数字时钟 89C52 单片机C语言程序STC89C52文档格式.docx
- 文档编号:20351804
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:17.15KB
数字时钟 89C52 单片机C语言程序STC89C52文档格式.docx
《数字时钟 89C52 单片机C语言程序STC89C52文档格式.docx》由会员分享,可在线阅读,更多相关《数字时钟 89C52 单片机C语言程序STC89C52文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
ucharmin=0;
ucharsec=0;
uintshi=12;
uintfen=30;
ucharMmin=0;
ucharMsec=30;
ucharM0=0;
ucharm=0;
ucharyear=9;
ucharmonth=7;
ucharmonth2;
ucharday=19;
ucharset1=1;
/*set1=1是调节时分秒set1=2时时调节年月日set=3时事调节闹钟*/
ucharset2=1;
/*set2=1时是调节【时】位set2=2时事调节【分】位*/
uintx=0;
/*x每【0.01s】自加一*/
voidDelay(uintk);
voidTimer0()/*定时器T05mS初始化*/
{
TMOD=0x01;
/*设置*定时器0**计数方式一*(每12个时钟脉冲计数一次)或IT0=1第二种计数方式*/
TH0=(65536-10000)/256;
/*给定计时器高位赋予初值=15536/256*/
TL0=(65536-10000)%256;
/*给定计时器低位赋予初值=15536%256*/
ET0=1;
/*打开定时器外部终断0允许ET1是中断器1的开关*/
EA=1;
/*打开总中断允许*/
TR0=1;
}
voidT0_srv(void)interrupt1/*5mS定时中断服务函数秒分时的值*/
x++;
if(x==100)
{
sec++;
x=0;
/*没每一秒【sec】加一*/
if(sec==60)
min++;
sec=0;
if(min==60)/*每一分钟【min】加一*/
min=0;
hour++;
if(hour==24)
hour=0;
/*每一小时【hour】加一*/
day++;
if(year%4==0)/*是否闰年的判断*/
MON[2]=29;
elseMON[2]=28;
if(day==MON[month])
day=0;
month++;
}
if(BIN==1)
if(Mmin!
=0||Msec!
=0)
M0=100-x;
if(M0==100)
{if(Mmin>
0)
Msec--;
if(Msec==0)
Msec=60;
Mmin--;
if(Msec==0){Mmin=0;
Msec=0;
M0=0;
if(Mmin==0)
if(Msec!
if(Msec==0){Msec=0;
if(Mmin==0&
&
Msec==0)
{M0=0;
}/*秒表分秒M0的赋值*/
}
voidScan_key()/*按键扫描函数【Scan_key()】*/
P3=H[0];
if(P3!
=H[0])
Delay
(1);
if(P3==H[4])
set1++;
if(set1>
4)set1=1;
er1:
if(P3==H[4])gotoer1;
/*按下键后未释放,在此等候*/
if(P3==H[3])
set2++;
if(set2>
3)set2=1;
er2:
if(P3==H[3])gotoer2;
if(P3==H[1])
BIN++;
if(BIN>
1)BIN=0;
er3:
if(P3==H[1])gotoer3;
}
voidTime_show()/*时间的显示变量为【时】【分】【秒】*/
P0=Code[hour/10];
/*第一位数字显示【时】的【十】位*/
P2=C[1];
P0=Code[hour%10];
/*第二位数字显示【时】的【个】位*/
P2=C[2];
if(x/50==0)
P0=0x40;
/*第三位符号【-】的显示*/
else
P0=0x00;
P2=C[3];
P0=Code[min/10];
/*第四位的数字的显示【分】的【十】位*/
P2=C[4];
P0=Code[min%10];
/*第五位的数字显示【分】的【个】位*/
P2=C[5];
fc1
/*第六位符号【-】的显示*/
P2=C[6];
P0=Code[sec/10];
/*第七位数字的显示【秒】的【十】位显示*/
P2=C[7];
P0=Code[sec%10];
/*第八位数字的显示【秒】的【个】位显示*/
P2=C[8];
voidYear_show()
P0=Code[year/10];
/*第一位数字显示【年】的【十】位*/
P0=Code[year%10];
/*第二位数字显示【年】的【个】位*/
P0=Code[month/10];
/*第四位的数字的显示【月】的【十】位*/
P0=Code[month%10];
/*第五位的数字显示【月】的【个】位*/
/*第六位符号【-】的显示*/
P0=Code[day/10];
/*第七位数字的显示【天】的【十】位显示*/
P0=Code[day%10];
/*第八位数字的显示【天】的【个】位显示*/
voidClock_show()
P0=Code[shi/10];
P0=Code[shi%10];
P0=Code[fen/10];
P0=Code[fen%10];
voidMiao_show()/*时间的显示变量为【时】【分】【秒】*/
P0=Code[Mmin/10];
P0=Code[Mmin%10];
P0=Code[Msec/10];
P0=Code[Msec%10];
P0=Code[M0/10];
P0=Code[M0%10];
voidTime_set()/*调整时间的函数time_set()*/
Scan_key();
if(set1==1)
{
if(set2==1)/*当set1=1set2=1时位时的设置*/
if(P3==H[2])hour++;
/*按一下第三行的键hour就加一*/
if(hour>
24)hour=0;
while(P3==H[2]);
/*按键未释放,在此等候*/
if(set2==2)/*当set1=1set2=1时位时的设置*/
if(P3==H[2])min++;
if(min>
60){min=0;
voidYear_set()/*调整时间的函数time_set()*/
if(set1==2)
if(P3==H[2])year++;
if(year>
100)year=0;
if(P3==H[2])month++;
if(month>
12){month=0;
year++;
if(set2==3)
if(P3==H[2])day++;
if(day>
MON[month]){day=0;
Clock_set()
if(set1==3)
if(P3==H[2])shi++;
if(shi>
24)shi=0;
if(P3==H[2])fen++;
if(fen>
60){fen=0;
shi++;
voidMiao_set()/*调整时间的函数time_set()*/
if(set1==4)
if(set2=
4f5
=1)/*当set1=1set2=1时位时的设置*/
if(P3==H[2])Mmin++;
if(Mmin>
24)Mmin=0;
if(P3==H[2])Msec++;
if(Msec>
60){Msec=0;
Mmin++;
voidClock()
if((hour==shi)&
(min==fen))
P1=0x00;
fen)
P1=0xff;
voidDelay(uintk)/*延时函数delay()的定义*/
uinti,j;
for(i=0;
i<
k;
i++)
for(j=0;
j<
121;
j++)
{;
voidmain()/*主函数*/
{
Timer0();
while
(1)
Time_show();
Time_set();
Year_show();
Year_set();
Clock_show();
Clock_set();
Clock();
Miao_show();
Miao_set();
A=sec;
if(sec==A-1)
if(set1!
=4)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字时钟 89C52 单片机C语言程序STC89C52 数字 时钟 89 C52 单片机 语言 程序 STC89C52