LED数码管时钟程序 电路时间可调.docx
- 文档编号:2917631
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:5
- 大小:53.04KB
LED数码管时钟程序 电路时间可调.docx
《LED数码管时钟程序 电路时间可调.docx》由会员分享,可在线阅读,更多相关《LED数码管时钟程序 电路时间可调.docx(5页珍藏版)》请在冰豆网上搜索。
LED数码管时钟程序电路时间可调
LED数码管时钟程序+电路-时间可调
自上次数码管时钟为完善版本(玩了几天后,懒啊不想动,汗)终于解决了不能进入调试的BUG
不来废话上程序:
/***************************************************************
*程序名称:
51单片机数码管电子钟+定时闹钟晶振:
12.00
*实验对象:
51hei单片机学习开发板
*单片机:
AT89S52或STC89C52闹钟时间:
7:
10分(程序自定义)
*使用定时器方式,数码管显示24小时“00-00-00”(增加中断进入对时功能
P1为按键,P2为段选,P0为位选,
****************************************************************/
/***使用定时器方式,数码管显示24小时“00-00-00”(增加进入对时功能)
P1为按键,P2为段选,P0为位选,{闹钟暂时不可调待完善})***/
#include;
#defineucharunsignedchar/*宏定义*/
#defineuintunsignedint/*宏定义*/
ucharhour,hour_h,hour_l;/*定义小时,小时的高位,小时的低位*/
ucharmin,min_h,min_l;/*分*/
ucharsec,sec_h,sec_l;/*秒*/
ucharint_num;/*定时溢出作用标号*/
sbitkey_secadd=P1^1;/*定义了p1.1为秒增1键,用在调时中断里*/
sbitkey_minadd=P1^2;/*定义了p1.2为分增1键,用在调时中断里*/
sbitkey_houradd=P1^3;/*定义了p1.3为时增1键,用在调时中断里*/
sbitkey_intime=P1^0;//按P1.0进入调时
sbitkey_quit=P1^5;//P1.5退出调时
sbitbell=P1^5;//小喇叭
voiddelay(uchartime);/*延时子函数声明*/
voiddisplay();/*显示子函数声明*/
voidinter_init();/*定时器初始化子函数声明*/
voidtime24();
/****专用数码管显示表***/
ucharcodeduma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};/*0x40显示“一”符号*/
ucharcodewema[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00};
/*小时hour分min秒sec*/
//---------------------延时子函数--------------------------------
voiddelay(uchartime)/*延时子函数*/
{
uchartime_1;
for(;time>;0;time--)
for(time_1=100;time_1>;0;time_1--);
}
//---------------------初始化T0函数--------------------------
voidtime0(void)interrupt1/*定时器T0服务子程序*/
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
int_num++;
}
//---------------------定时器函数--------------------------
voidinter_init()/*定时器初始化子函数*/
{
EA=1;/*开总中断*/
EX0=1;/*开外部中断0*/
ET0=1;/*打开定时器T0*/
TMOD=0x01;/*工作方式1*/
TCON=0x00;/*触发方式*/
IP=0x01;/*中断优先级别,T0优先*/
TH0=(65535-50000)/256;/*置初值,大约50ms一个中断*/
TL0=(65535-50000)%256;
TR0=1;/*置位TR0,启动定时器0*/
}
//---------------------24小时时间自加--------------------------
voidtime24()/*时间递增*/
{
if(int_num==20)/*值满20,大约就是一秒的时间。
*/
{/*其值设为2,则定时时间快10倍,可做毫秒计时*/
int_num=0;
sec++;/*秒值加1*/
if(sec==60)/*如果秒值满60,就归0*/
{
sec=0;
min++;/*分值加1*/
if(min==60)
{
min=0;
hour++;/*分值归0,时值加1*/
if(hour==24)
{
hour=0;/*时值满24归0*/
}
}
}
}
}
//-----------按键调整子函数-------------------------------------
voidkey(void)//按键调整子函数
{
if(key_intime==0)
{EA=0;//关中断
sec=0;//秒归零
while(100)//正确
{display();
if(key_quit==0)
{
EA=1;
break;
}
if(key_secadd==0)
{
delay
(1);
if(key_secadd==0)
{
sec++;
while(!
key_secadd);
if(sec==60)
{
sec=0;
}
}
}
if(key_minadd==0)
{
delay(80);
if(key_minadd==0)
{
min++;
while(!
key_minadd);
if(min==60)
{
min=0;
}
}
}
if(key_houradd==0)
{
delay(80);
if(key_houradd==0)
{
hour++;
while(!
key_houradd);
if(hour==24)
{
hour=0;
}
}
}
}}
}
//---------------------数码管显示子函数-------------------------------------
voiddisplay()/*数码管显示子函数*/
{
sec_h=sec/10;/*求出秒高位需要显示的字符*/
sec_l=sec%10;/*求出秒低位需要显示的字符*/
min_h=min/10;
min_l=min%10;
hour_h=hour/10;
hour_l=hour%10;
P2=duma[sec_h];/*显示秒高位*/
P0=wema[6];
delay(10);
P2=duma[sec_l];/*显示秒低位*/
P0=wema[7];
delay(10);
P2=duma[10];/*“一”符号的显示*/
P0=wema[5];
delay(10);
P2=duma[min_h];/*分*/
P0=wema[3];
delay(10);
P2=duma[min_l];
P0=wema[4];
delay(10);
P2=duma[10];/*“一”符号的显示*/
P0=wema[2];
delay(10);
P2=duma[hour_h];/*时*/
P0=wema[0];
delay(10);
P2=duma[hour_l];
P0=wema[1];
delay(10);
}
//---------------------主函数--------------------------------
/*voidalarm_clock()//闹钟子函数-变频发声
{
uinti,j,y,m;
if(hour==00)//时到了00点?
{
if(min>;=01){m=0;}//分大于或等于01就把m清零,若不成立向下执行
if(min==00)//到了00分?
{
if(m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED数码管时钟程序 电路时间可调 LED 数码管 时钟 程序 电路 时间 可调