标题:
单片机数码管时钟电路为什么秒表不动,而是分钟在计秒!
[打印本页]
作者:
栗子4933
时间:
2019-9-7 17:10
标题:
单片机数码管时钟电路为什么秒表不动,而是分钟在计秒!
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管
uchar StrTab[6];
uchar hour=12,minute=21,second=22; //初始设定时间
void display ();
main()
{
EA=1;
TMOD|=0X01;
TH0=(65536-20000)/256; //定时10MS
TL0=(65536-20000)%256; //初始设定时间为12:21:22
ET0=1; //在数码管上也显示为12:21:22
TR0=1; //但是秒表马上变成00,而是分钟在读秒。
TMOD|=0X10; //P1为位码,p2位段码。 //
TH1=(65536-20000)/256; //求大佬指正。
TL1=(65536-20000)%256;
TR1=1;
ET1=1;
while(1)
{
}
}
void display ()
{
StrTab[0]=table[hour/10];
StrTab[1]=table[hour%10];
StrTab[2]=table[minute/10];
StrTab[3]=table[minute%10];
StrTab[4]=table[second/10];
StrTab[5]=table[second%10];
}
void time1() interrupt 3
{
static uchar num;
TH1=0XD8;
TL1=0XF0;
switch(num)
{
case 0:P1=0X04;P2=StrTab[num];break;// 小时
case 1:P1=0X08;P2=StrTab[num];break;
case 2:P1=0X10;P2=StrTab[num];break;//分钟
case 3:P1=0X20;P2=StrTab[num];break;
case 4:P1=0X40;P2=StrTab[num];break;//秒
case 5:P1=0X80;P2=StrTab[num];break;
default:break;
}
num++;
if(num==6)
num=0;
}
void time0() interrupt 1
{
static uchar count;
TH0=0XD8;
TL0=0XF0;
count++;
switch(count)
{
case 60:display();break;
default:break;
}
if(count==100)
{
count=0;
second++;
if(second==60);
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
}
}
作者:
栗子4933
时间:
2019-9-7 17:57
" if(second==60); "它竟然不报错!
此贴终结!
作者:
tyrl800
时间:
2019-9-7 20:35
要根据硬件电路如何连接来分析
作者:
csmyldl
时间:
2019-9-7 21:30
程序逻辑有错误,特别是if(count==100)这一句,这样计时也不准,请把计时逻辑搞清楚再去调试
作者:
cphnkj188
时间:
2019-9-8 09:21
多了分号kile 是不会报错的,我也犯过同样错误,“差之毫厘、谬之千里” 啊
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1