電子時鐘,思路清楚,分享!!!:自己編的電子時鐘,不是很完美,有點個缺點,調時間閃的問題,希望高手指點一下里面還有個另一種思路的,感覺很不錯,分享給大家了!!!
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar secge,secshi,minge,minshi,houge,houshi;
uchar tt,sig,hou,sec,min; //tt為循環計時達到1s的控制變量,sig為節拍標志位,當計數達到1s時候,改變節拍,同時主程序檢測
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值01234567
sbit hourkey=P3^0;
sbit minkey=P3^1;
void delay(uchar m)
{
while(--m)
{;}
}
void keyscan(void)
{
if(hourkey==0)
delay(100);
if(hourkey==0)
{
hou++;
if(hou==24)
hou=0;
}
while(!hourkey)
// {;}
if(minkey==0)
delay(100);
if(minkey==0)
{min++;
if(min==60)
min=0;}
while(!minkey)
// {;}
hourkey=1;
minkey=1;
}
void display(void) //顯示子程序
{
secge=sec%10; //個位和十位分離
secshi=sec/10;
minge=min%10;
minshi=min/10;
houge=hou%10;
houshi=hou/10;
P0=tab[secge]; //顯示秒的各位
P2=7;
delay(500);
P0=tab[secshi]; //顯示秒的十位
P2=6;
delay(500);
P0=0x40; //顯示中間橫條,開發板的數碼管為共陰
P2=5;
delay(500);
P0=tab[minge];//顯示分
P2=4;
delay(500);
P0=tab[minshi];
P2=3;
delay(500);
P0=0x40; //顯示橫條
P2=2;
delay(500);
P0=tab[houge]; //顯示小時
P2=1;
delay(500);
P0=tab[houshi];
P2=0;
delay(500);
}
void main(void)
{
TMOD=0x01;
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
EA=1;
ET0=1;
TR0=1;
hou=0;
sec=0;
min=0;
while(1)
{
while(sig==1)
{
sec++;
sig=0;
if(sec==60)
{ {sec=0; //進位清零操作
min++;}
if(min==60)
{ {min=0;
hou++;}
if(hou==24)
hou=0;
}
}
}
keyscan();
display();
}
}
void time0()interrupt 1
{
TMOD=0x01; //t0工作在方式1
TL0=(65536-50000)%256; //定時50ms
TH0=(65536-50000)/256;
EA=1; //開cpu中斷
ET0=1; //開t0中斷
TR0=1; //啟動定時
tt++;
if(tt==20) //循環20次
{sig=1;
tt=0;}
}