单片机电子闹钟程序亲自编写可用.docx
- 文档编号:13643987
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:17
- 大小:104.05KB
单片机电子闹钟程序亲自编写可用.docx
《单片机电子闹钟程序亲自编写可用.docx》由会员分享,可在线阅读,更多相关《单片机电子闹钟程序亲自编写可用.docx(17页珍藏版)》请在冰点文库上搜索。
单片机电子闹钟程序亲自编写可用
单片机电子闹钟程序(亲自编写-可用)
————————————————————————————————作者:
————————————————————————————————日期:
学校电子钟,有闹钟功能,按键可调时间,可调打铃时间,打铃时间长短显示,每个模块有功能注释。
其中正常时间显示和闹钟时间显示可用一个开关来调整。
芯片选择STC89C52
程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//定义显示段码
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
ucharcodebbtime[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ucharclock[]={0,0,0,0};
ucharclock1[]={12,30,0};
ucharweikong[6];
ucharbbduration=4;
ucharlingtime=9;
//学校打铃时间组
ucharshangwu1[]={8,30};
ucharshangwu2[]={10,0};
ucharshangwu3[]={10,20};
ucharshangwu4[]={11,50};
ucharxiawu1[]={13,30};
ucharxiawu2[]={15,00};
ucharxiawu3[]={15,15};
ucharxiawu4[]={16,45};
//按键定义
sbitmode=P1^7;
sbitsec_clr=P1^0;
sbitmin_set_add=P1^3;
sbitmin_set_sub=P1^4;
sbithour_set_add=P1^1;
sbithour_set_sub=P1^2;
sbitbb_set_add=P1^5;
sbitbb_set_sub=P1^6;
sbitspeaker=P2^6;
//延时函数
voiddelay(unsignedintt)
{
while(t--);
}
//时钟进位函数
voidclockjinwei()
{
clock[0]++;
if(clock[0]==20)
{
clock[1]++;
clock[0]=0;
if(clock[1]==60)
{
clock[2]++;
clock[1]=0;
if(clock[2]==60)
{
clock[3]++;
clock[2]=0;
if(clock[3]==24)
clock[3]=0;
}
}
}
}
//定时器0中断服务函数
voidtimer0(void)interrupt1using1
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
clockjinwei();
}
//时钟分位显示函数
voidfenwei()
{
weikong[0]=clock[3]/10;
weikong[1]=clock[3]%10;
weikong[2]=clock[2]/10;
weikong[3]=clock[2]%10;
weikong[4]=clock[1]/10;
weikong[5]=clock[1]%10;
}
//闹钟分位显示函数
voidnaofen()
{
weikong[0]=clock1[0]/10;
weikong[1]=clock1[0]%10;
weikong[2]=clock1[1]/10;
weikong[3]=clock1[1]%10;
weikong[4]=clock1[2]/10;
weikong[5]=clock1[2]%10;
}
//闹钟定时显示函数
voidnaozhongdisplay()
{
ucharz,s;
ucharx=0x01;
naofen();
for(z=0;z<6;z++)
{
P2=0;
P0=table[weikong[z]];
P2=x;
x=_crol_(x,1);
for(s=0;s<255;s++);
}
}
//时钟显示函数
voiddisplay()
{
uchari,j;
ucharx=0x01;
fenwei();
for(i=0;i<6;i++)
{
P2=0;
P0=table[weikong[i]];
P2=x;
x=_crol_(x,1);
for(j=0;j<255;j++);
}
}
//总显示函数
voidzhongxian()
{
if(mode==1)
delay(100);
if(mode==1)
display();
if(mode==0)
delay(100);
if(mode==0)
naozhongdisplay();
}
//按键处理程序
voidkey_set()
{
zhongxian();
P1=0xff;
if(min_set_add==0)
{
delay(100);
if(min_set_add==0)
{
if(mode==1)
{
clock[2]++;
if(clock[2]==60)
{
clock[2]=0;
}
while(min_set_add==0)
zhongxian();
}
}
if(mode==0)
{
clock1[1]++;
if(clock1[1]==60)
{
clock1[1]=0;
}
while(min_set_add==0)
zhongxian();
}
}
//
if(min_set_sub==0)
{
delay(100);
if(min_set_sub==0)
{
if(mode==1)
{
clock[2]--;
if(clock[2]==0)
clock[2]=59;
}
while(min_set_sub==0)
zhongxian();
if(mode==0)
{
clock1[1]--;
if(clock1[1]==0)
clock1[1]=59;
}
while(min_set_sub==0)
zhongxian();
}
}
//
if(hour_set_add==0)
{
delay(100);
if(hour_set_add==0)
{
if(mode==1)
{
clock[3]++;
if(clock[3]==24)
{
clock[3]=0;
}
while(hour_set_add==0)
zhongxian();
}
if(mode==0)
{
clock1[0]++;
if(clock1[0]==24)
{
clock1[0]=0;
}
while(hour_set_add==0)
zhongxian();
}
}
}
//
if(hour_set_sub==0)
{
delay(100);
if(hour_set_sub==0)
{
if(mode==1)
{
clock[3]--;
if(clock[3]==0)
clock[3]=23;
}
while(hour_set_sub==0)
zhongxian();
if(mode==0)
{
clock1[0]--;
if(clock1[0]==0)
clock1[0]=23;
}
while(hour_set_sub==0)
zhongxian();
}
}
//
if(sec_clr==0)
{
delay(100);
if(sec_clr==0)
{
clock[1]=0;
}
while(sec_clr==0)
zhongxian();
}
}
//闹钟响铃函数
voidbb()
{
if(clock[1]<=bbduration)
{
speaker=1;delay(100);speaker=0;
}
elsespeaker=0;
}
//打铃函数
voiddaling()
{
if(clock[1]<=lingtime)
{
speaker=1;delay(100);speaker=0;
}
elsespeaker=0;
}
//时间比较函数
voidbijiao()
{
if(clock[3]==shangwu1[0])
{
if(clock[2]==shangwu1[1])
daling();
}
if(clock[3]==shangwu2[0])
{
if(clock[2]==shangwu2[1])
daling();
}
if(clock[3]==shangwu3[0])
{
if(clock[2]==shangwu3[1])
daling();
}
if(clock[3]==shangwu4[0])
{
if(clock[2]==shangwu4[1])
daling();
}
if(clock[3]==xiawu1[0])
{
if(clock[2]==xiawu1[1])
daling();
}
if(clock[3]==xiawu2[0])
{
if(clock[2]==xiawu2[1])
daling();
}
if(clock[3]==xiawu3[0])
{
if(clock[2]==xiawu3[1])
daling();
}
if(clock[3]==xiawu4[0])
{
if(clock[2]==xiawu4[1])
daling();
}
}
//闹钟比较
voidnaobijiao()
{
if(clock[3]==clock1[0])
{
if(clock[2]==clock1[1]||clock[2]==clock1[1]+1||clock[2]==clock1[1]+2)
bb();
}
}
//响铃时长显示函数
voidbbtimeshow()
{
P3=bbtime[bbduration];
if(bbduration>15)
bbduration=0;
}
//响铃按键处理函数
voidbbtime_set()
{
bbtimeshow();
if(bb_set_add==0)
{
delay(100);
if(bb_set_add==0)
bbduration++;
while(bb_set_add==0)
bbtimeshow();
}
if(bb_set_sub==0)
{
delay(100);
if(bb_set_sub==0)
bbduration--;
while(bb_set_sub==0)
bbtimeshow();
}
}
//主程序
voidmain()
{
EA=1;
ET0=1;
TR0=1;
while
(1)
{
key_set();
bijiao();
bbtime_set();
naobijiao();
}
}
电路图:
分四部分显示:
如果在学习这个程序过程中有什么问题,可以发邮件到询问。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电子 闹钟 程序 亲自 编写 可用