电子时钟,思路清楚,分享!!!:自己编的电子时钟,不是很完美,有点个缺点,调时间闪的问题,希望高手指点一下里面还有个另一种思路的,感觉很不错,分享给大家了!!!
#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;}
}