代码
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code xunhuan[]={0x20,0x10 ,0x08,0x04,0x02,0x01}; /*循环显示*/
uchar weitable[6];//申明六位数码管
unsigned char jishu;
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int mstcnt; /*临时变量0.25*4000=1s*/
unsigned char tcnt; /*临时变量用来2ms循环显示*/
uchar i,j;
uchar code duanxuan[]={
0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90, //"9"
0x88, //"A"
0x83, //"B"
0xC6, //"C"
0xA1, //"D"
0x86, //"E"
0x8E, //"F"
0x89, //"H"
0xC7, //"L"
0xC8, //"n"
0xC1, //"u"
0x8C, //"P"
0xA3, //"o"
0xBF, //"-"
0xFF, //熄灭
0xFF //自定义
};
/*void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}*/
/*void chushihua_T0()
{
TMOD=0x01;
TH0=(65536-250)/256;
TL0=(65536-250)%256;
EA=1;
ET0=1;
TR0=1;
}*/
void chushihua()
{
P2=0xff;
P0=0xc0;
}
void main()
{
chushihua();
TMOD=0x01;
TH0=(65536-250)/256;
TL0=(65536-250)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void timer0() interrupt 1
{
TH0=(65536-250)/256;
TL0=(65536-250)%256;
tcnt++;
mstcnt++;
if(tcnt==8)//2毫秒定时,2毫秒刷新一次数码管
{
tcnt=0;
P0=duanxuan[weitable[jishu]];
// delay(1);
P2=xunhuan[jishu];
for(i=248;i>0;i--) //*2ms延迟
for(j=8;j>0;j--);
//delay(10);
P2=0;
jishu++;
if(jishu==6)
jishu=0;
}
if(mstcnt==40000);//1s时
{
mstcnt=0;
second++;//秒加1
if(second==60)
{
second=0;//秒清零
minite++;//分加1
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
weitable[0]=second%10;
weitable[1]=second/10;
weitable[2]=minite%10;
weitable[3]=minite/10;
weitable[4]=hour%10;
weitable[5]=hour/10;
}
谢谢哈,这个问题解决了,不过改了后为什么,数字不是按照1s每次加的呢,晶振是12MHZ,我改的是if(mstcnt==4000),0.25X4000=1s是对的,不知道为什么,求解答,谢谢
追答在12MHz时,4000,是对的。应该按照每秒加一。
追问理论该对的,就是实际加的时候不是啊,怎么回事呢