|
#include <AT89X52.H> unsigned char dispbitcnt; //數(shù)碼管位碼掃描變量
unsigned char second; //秒變量
unsigned char minite; //分變量
unsigned char hour; //時(shí)變量
unsigned char tcnt; //秒信號(hào)產(chǎn)生變量
unsigned char mstcnt; //掃描時(shí)間變量 const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,<br> 0x92,0x82,0xf8,0x80,0x90};
//0123456789段碼
const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,<br> 0xef,0xdf};
//123456位碼
unsigned char dispbuf[6]={0,0,0,0,0,0};
//緩沖數(shù)組
//**************TMR0中斷數(shù)碼管掃描程序*********************
void Timer0() interrupt 1
{ P2=dispcode[dispbuf[dispbitcnt]];//段碼
P1=dispbitcode[dispbitcnt];//位碼
dispbitcnt++;
if(dispbitcnt==6)
{dispbitcnt=0;<br> }
tcnt++; //中斷產(chǎn)生秒信號(hào)
if(tcnt==244)
{tcnt=0;<br> second++;<br> if(second==60)<br> {second=0;<br> minite++;<br> if(minite==60)<br> {minite=0;<br> hour++;<br> if(hour==24)<br> {hour=0;<br> }
}
}
dispbuf[4]=second%10; //得秒鐘的低位,送緩沖數(shù)組
dispbuf[5]=second/10; //得秒鐘的高位,送緩沖數(shù)組
dispbuf[2]=minite%10; //得分鐘的低位,送緩沖數(shù)組
dispbuf[3]=minite/10; //得分鐘的高位,送緩沖數(shù)組
dispbuf[0]=hour%10; //得時(shí)鐘的低位,送緩沖數(shù)組
dispbuf[1]=hour/10; //得時(shí)鐘的高位,送緩沖數(shù)組
}
TMOD=0x01;
TL0=0x10;
TH0=0xf0; }
///****************1ms延時(shí)程序******************
void delay_1ms(unsigned char i)
{
unsigned char j;
for(i=0;i<144;i++)
for(j=0;j<144;j++);
} ///****************按鍵檢測(cè)*********************
void key_scan(void)
{
while(1)
{
if(P3_0==0)
{
delay_1ms(20);
if(P3_0==0)
{second++;<br> if(second==60)<br> {second=0;<br> }
dispbuf[4]=second%10;
dispbuf[5]=second/10;
while(P3_0==0);
}
}
if(P3_1==0)
{
delay_1ms(20);
if(P3_1==0)
{
minite++;
if(minite==60)
{minite=0;<br> }
dispbuf[2]=minite%10;
dispbuf[3]=minite/10;
while(P3_1==0);
}
}
if(P3_2==0)
{
delay_1ms(20);
if(P3_2==0)
{
hour++;
if(hour==24)
{
hour=0;
}
}
dispbuf[0]=hour%10;
dispbuf[1]=hour/10;
while(P3_2==0);
}
}
}
//*************主程序********************
void main(void)
{
TMOD=0x01;TL0=0x10;
TH0=0xf0;
while(1)
{
dispbitcnt=0;P1=0x00; //開段碼
P2=0x00; //開位碼
delay_1ms(200); //延時(shí)
delay_1ms(200); //延時(shí)
delay_1ms(200); //延時(shí)
delay_1ms(200); //延時(shí)
P2=0xff; //關(guān)位碼EA=1;
ET0=1;
TR0=1;
key_scan();
}
}
|
|