基于51单片机的4位数码管电子钟.docx
- 文档编号:17159759
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:8
- 大小:15.11KB
基于51单片机的4位数码管电子钟.docx
《基于51单片机的4位数码管电子钟.docx》由会员分享,可在线阅读,更多相关《基于51单片机的4位数码管电子钟.docx(8页珍藏版)》请在冰点文库上搜索。
基于51单片机的4位数码管电子钟
附:
源程序
/***************************************************************************
标题:
定时器中断24小时时钟程序
效果:
数码管显示24小时制时钟(具有调时功能)
说明:
使用12M晶振,key1=P3^7;key2=P3^6;key3=P3^5;key4=P3^4;
数码管位选P1.0~P1.3,段选P0
******************************************************************************/
#include
#defineucharunsignedchar;
#defineuintunsignedint;
ucharposition;
uchartt;
ucharsecond;
ucharminute;
ucharhour;
ucharcodetable[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0--9
sbitsmg_q=P1^0;//数码管千位引脚
sbitsmg_b=P1^1;
sbitsmg_s=P1^2;
sbitsmg_g=P1^3;
sbitkey1=P3^7;//按键定义
sbitkey2=P3^6;
sbitkey3=P3^5;
sbitkey4=P3^4;
voidkeyscan();//函数声明
voiddisplay(unsignedcharhour,unsignedcharminute);
voiddelay(unsignedinttimer);
voidinit();
/***********************************************************
主函数
***********************************************************/
voidmain()
{
init();
while
(1)
{
if(tt==20)
{
tt=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
}
keyscan();
display(hour,minute);
delay
(1);
}
}
/***********************************************************
调时
***********************************************************/
voidkeyscan()
{
if(key1==0)//小时加1
{
TR0=0;
hour++;
if(hour==24)
hour=0;
delay(200);
TR0=1;
}
if(key2==0)//小时减
{
TR0=0;
hour--;
if(hour<0)
hour=23;
delay(200);
TR0=1;
}
if(key3==0)//分钟加
{
TR0=0;
minute++;
if(minute==60)
minute=0;
delay(200);
TR0=1;
}
if(key4==0)//分钟减
{
TR0=0;
minute--;
if(minute<0)
minute=59;
delay(200);
TR0=1;
}
}
/***********************************************************
初始化
***********************************************************/
voidinit()
{
tt=0;
position=0;
second=0;
minute=0;
hour=0;
smg_q=1;
smg_b=1;
smg_s=1;
smg_g=1;
key1=1;
key2=1;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/***********************************************************
定时器TO中断
***********************************************************/
voidt0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
/***********************************************************
显示
***********************************************************/
voiddisplay(unsignedcharhour,unsignedcharminute)
{
P0=0XFF;
switch(position)
{
case0:
smg_g=1;
smg_q=0;
P0=table[hour/10];
break;
case1:
smg_q=1;
smg_b=0;
P0=table[hour%10];
if(tt>=10)
P0&=0x7f;//小数点以半秒的时间闪烁
break;
case2:
smg_b=1;
smg_s=0;
P0=table[minute/10];
break;
case3:
smg_s=1;
smg_g=0;
P0=table[minute%10];
break;
}
position++;
if(position>3)
position=0;
}
/***********************************************************
延时
***********************************************************/
voiddelay(unsignedinttime)
{
unsignedintx,y;
for(x=time;x>0;x--)
for(y=110;y>0;y--);
}
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 数码管 电子钟