各位,幫我看看,一下程序,顯示的秒表越走越慢,是為什么?運行平臺是論壇的這個51hei板子.
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar disnum,miao;
uint cnt;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code tabledu[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=124;j>0;j--);
}
display1(uchar shi,uchar ge)
{
// dula=0;
P0=0xef;
wela=1;
wela=0;
P0=tabledu[shi];
dula=1;
dula=0;
delay(1);
// dula=0;
P0=0xdf;
wela=1;
wela=0;
P0=tabledu[ge];
dula=1;
dula=0;
delay(1);
}
display2(uchar yi,uchar er,uchar san,si)
{
//dula=0;
P0=0xfe;
wela=1;
wela=0;
P0=tabledu[yi];
dula=1;
dula=0;
delay(1);
// dula=0;
P0=0xfd;
wela=1;
wela=0;
P0=tabledu[er];
dula=1;
dula=0;
delay(1);
// dula=0;
P0=0xfb;
wela=1;
wela=0;
P0=tabledu[san];
dula=1;
dula=0;
delay(1);
// dula=0;
P0=0xf7;
wela=1;
wela=0;
P0=tabledu[si];
dula=1;
dula=0;
delay(1);
}
void main()
{
EA=1;
ET1=1;
TMOD=0x20;
TH1=0x9c;
TL1=0x9c;
TR1=1;
P0=0xf7;
wela=1;
wela=0;
P0=0x80;
dula=1;
dula=0;
while(1)
{
display1(disnum/10,disnum%10);
display2(miao/1000,miao%1000/100,miao%1000%100/10,miao%1000%100%10%10);
}
}
void time1() interrupt 3
{
TH1=0x9c;
TL1=0x9c;
cnt++;
if(cnt==100)
{
cnt=0;
if(disnum==100)
{
disnum=0;
miao=miao+1;
if(miao==9999)
{
miao=0;
}
}
disnum++;
}
}
你定義時把秒也定義uint吧,因為你下面秒的值計到9999才清零,溢出啦。。。。
高手
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |