课程设计单片机时钟打铃系统Word文档格式.docx
- 文档编号:22294680
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:23
- 大小:1.02MB
课程设计单片机时钟打铃系统Word文档格式.docx
《课程设计单片机时钟打铃系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计单片机时钟打铃系统Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
校正完毕后,再按一次K1键,则退出时间校正状态,并显示当前校正后的准确时间。
设定时间:
按第一次K1键进入小时校正状态,此时若不需要设置,则不操作;
以此类推。
第三次按下K1键,进入小时设定状态,通过按K2、K4键进行小时设定。
按下第四次K1键,进入分钟设定状态,通过按K2、K4键进行分钟设定。
设定完毕后,按一下K3键(闹钟使能)。
继续按K1键,若不需要设置,则不操作,以此类推,到按最后一次K1键则退出时间设定状态并显示当前时间,当时间与我们设定的时间一致时,通过闹钟电路响声提示。
若要关闭闹钟,此时再按一次K3键即可停止响声。
若k5=1,执行冬季打铃时间。
若k5=0,则执行夏季打铃时间。
3.2时间显示模块
本设计采用四位七段共阳数码管做显示模块,其中前两位做时、月份显示,其余两位作为分、日显示,选取前两位的一个dp点作为秒点。
单片机P0.0-P0.7分别接七段数码管的abcedfg和dp引脚。
P2.0-P2.3分别作为四个七段数码管的片选端。
图3-2
时间显示模块主要由四位数码管来显示,配合按键控制模块的校正与设定时间,相应的显示。
时间正常显示时,LED每闪动60次,分钟自动加一;
每六十分钟小时自动加一;
每24小时天自动加一。
3.3打铃模块
单片机p3.7口控制蜂鸣器,若数码管显示时间与设定的学校作息时间相同,蜂鸣器模拟打铃一分钟。
图3-3
打钟模块快的主要功能:
闹铃。
当设定时间与当前时间一致时,则闹钟自动闹铃进行提示,一分钟后,自动退出响铃状态,若按K3键,闹钟退出响铃状态。
第4章应用软件设计
4.1系统软件设计思想
本系软件设计中,利用单片机定时器设计时间计时处理,采用单片机内部的T0定时器溢出中断来实现,工作在T1方式下,定时50微妙,则连续中断20次即为一秒,得到了我们所需时间的最小单位。
该设计用C51编写程序,由于汇编语言的移植性比较差,而C语言则比较灵活。
许多子函数都可以直接移植过去。
在程序中除了有主函数外还包含许多子函数,如延时函数、按键扫描函数、初始化函数、时间显示函数、设定闹钟显示函数、设定日期显示函数、设定年份显示函数、月份选择函数、年份显示辅助函数、冬夏季作息时间切换函数。
4.2系统主程序
在主控程序循环中主要工作为扫描是否有按键,若有按健则做相应的功能处理,同时也扫描显示器显示时间数据,并检查所设置的时间是否到了。
时间计时处理程序是等过了1s后,则更新时间数据,将最新的时、分的数据转换为数字数据并显示在七段显示器上。
图3-2主程序流程图
4.3中断子程序
中断子程序的主要功能:
提供时间基准。
当连续中断20次时,即为一秒,此时秒加一。
当秒值为60时,分钟加一,同时秒清零;
当分钟值为60时,小时加一,同时分钟值清零。
当小时为24时,天值加一,同时小时清零。
由于每月天数不定,1、3、5、7、8、10、12月为31天,当计数到此类月份时,天值为32时,月值加一,同时天值为1;
4、6、9、11月为30天,当计数到此类月份时,天值为31时,月值加一,同时天值为1。
如果是闰年,则2月为29天,当计数到此类月份时,天值为30时,月值加一,同时天值为一。
如果不是闰年,则2月为28天,当计数此类月份时,天值为29时,月值加一,同时天值为一。
当月值为13时,则年值加一,同时月值为一。
图3-3定时器中断函数
4.4按键扫描子程序
按键扫描子程序是程序计中相当重要的一部分。
按键扫描子程序的功能是:
扫描是否有按键按下,若有键按下,则执行相应功能。
设计中包含了防抖动程序,延时20ms,判断是否为抖动,若不是抖动则执行相应程序功能。
第5章系统仿真调试
5.1软件简介
本次课程设计仿真主要采用proteus。
Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
5.2软件仿真
启动Proteus进行仿真时显示的初始化时间。
初始界面仿真图如图:
图5-1
时间校正:
当我们需要正确的显示时间即可进行时间校正,按一下K1即进入小时校正状态,通过K2加一或K4减一来进行小时校正,再按一次K1键即可进行分钟校正,校正原理同小时校正相同。
其仿真图如图5-2所示。
图5-2
日期校正:
当我们需要与当前日期保持一致时,则可以使用日期校正功能,连续按动五次K1键,则进入月份校正状态,通过K2加一键或K4减一键进行校正月份,再按一次K1键,则可进行日期校正,校正原理同月份校正原理相同。
其仿真图如图5-3。
图5-3
年份校正:
当我们需要保持年份与当前年份一一致时,则可以进行年份校正。
连续按动七次K1键,即进入年份校正状态,通过K2加一键或K4减一键进行校正。
其仿真图如图5-4所示。
图5-4
到时打铃:
当单片机显示时间与设定学校打铃时间相同时,蜂鸣器响。
如图5-5所示。
图5-5
第6章硬件调试与结果分析
结束语
此次课程设计为期两个星期,围绕着利用最小单片机系统设计模拟学校作息时间打铃系统,实现了时间计时,时间调整,时间暂停,到点响铃和冬夏季切换等功能。
由按键输入控制设置年、月、日以及当前时间并可设置闹钟定时,显示时间与设计作息时间相同时由蜂鸣器发出响声。
设计之初,由于忽略了数码管共阴与共阳的问题,导致在硬件调试的时候未能成功,修改后,导致秒点不能闪烁,一直未能找出原因,最后发现是忽略了与、或之间没转换。
在设计冬夏季切换时,对主函数初始化问题理解不透彻,致使一开始不能切换。
在设计打铃时间表时,还可以采用查表法,此方法相比可以节约程序空间。
致谢
通过两周的课程设计,利用单片机把复位电路,显示电路,电源电路,继电器电路,电铃电路连接起来,在通过单片机的编程实现设计要求。
单片机作息时间控制系统是利用定时器计时处理来做秒计数,当所设置的时间到了,则发出一阵声响,启动继电器,由继电器可以控制收音机开启或者关闭。
时,分,秒数据是存在变量内并写入七段显示管的缓冲区内,由显示管扫描中定时时扫描而显示出时间。
我由最初的不知所措到后来的获益良多,觉得这两周过得很充实,也积累了一些设计的宝贵经验。
这些离不开我的团队对我的帮助,更离不开王老师的悉心指导。
参考文献
附录A系统硬件电路原理图
附录B程序清单
#include<
REG52.H>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodea[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbitK1=P1^4;
sbitK2=P1^5;
sbitK3=P1^6;
sbitK4=P1^7;
sbitsd=P1^0;
sbitBEEP=P3^7;
ucharm=59,h=7,sec=30,cnt=0,x,y,qian,bai,shi,ge;
ucharset_h=8;
ucharset_m=6;
ucharmonth=6;
ucharday=12;
ucharth0_f;
uchartl0_f;
uintyear=2013;
voiddelay(uchart);
voidscankey(void);
voidinit(void);
voiddisplay(void);
voidset_time(void);
voidset_day(void);
voidm_choose(void);
voidbianhuan(void);
voidbianhuan1(void);
voidtime0(void)interrupt1
{
TH0=0x3c;
TL0=0xb0;
cnt++;
if(y==1&
&
(set_h==h&
set_m==m))sd=0;
elsesd=1;
(h==8&
m==0))sd=0;
if(cnt==20)
{
sec++;
cnt=0;
if(sec==60)
{
sec=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
{
h=0;
day++;
switch(month)
{
case1:
if(day==32){month++;
day=1;
}break;
case2:
if(year%4==0)
{if(day==30){month++;
}}
else{if(day==29){month++;
}}break;
case3:
case4:
if(day==31){month++;
case5:
case6:
case7:
case8:
case9:
case10:
case11:
case12:
}
if(month==13)
month=1;
year++;
}
}
}
if(x==0)bianhuan1();
}
}
timer1()interrupt3
{
BEEP=~BEEP;
voidmain(void)
init();
while
(1)
if(k5==0)
vary1();
if(k5==1)
vary2();
voidvary1()
display();
scankey();
if(y==1&
set_m==m))BEEP=0;
elseBEEP=1;
m==0))BEEP=0;
elseBEEP=1;
m==45))BEEP=0;
voidvary2()
{
m==2))BEEP=0;
m==47))BEEP=0;
voidinit(void)
BEEP=0;
TMOD=0x11;
ET0=1;
TR0=1;
ET1=1;
TR1=0;
EA=1;
voiddisplay(void)
P2=0xfe;
P0=a[qian];
if(x%2==1&
cnt>
=10)
P0|=0xff;
delay(20);
P2=0xfd;
P0=a[bai];
elseif(x==0&
P0&
=0x7f;
P2=0xfb;
P0=a[shi];
if(((x%2==0&
x!
=0)||x==7)&
P0|=0x7f;
P2=0xf7;
P0=a[ge];
voidm_choose(void)
switch(month)
case1:
case2:
if(year%4==0){if(day==30){month++;
else{if(day==29){month++;
case3:
case4:
case5:
case6:
case7:
case8:
case9:
case10:
case11:
case12:
voidset_time(void)
qian=set_h/10;
bai=set_h%10;
shi=set_m/10;
ge=set_m%10;
voidset_day(void)
qian=month/10;
bai=month%10;
shi=day/10;
ge=day%10;
voidbianhuan(void)
qian=year/1000;
bai=year%1000/100;
shi=year%100/10;
ge=year%10;
voidbianhuan1(void)
qian=h/10;
bai=h%10;
shi=m/10;
ge=m%10;
voidscankey(void)
if(K1==0)
delay(20);
if(K1==0)
while(K1==0);
x++;
if(x==3)set_time();
elseif(x==5)set_day();
elseif(x==7)bianhuan();
elseif(x==8){x=0;
bianhuan1();
}
if(K2==0)
if(K2==0)
while(K2==0);
switch(x)
case0:
break;
case1:
h++;
if(h==24)h=0;
case2:
m++;
if(m==60)m=0;
case3:
set_h++;
if(set_h==24)set_h=0;
set_time();
case4:
set_m++;
if(set_m==60)set_m=0;
case5:
day++;
m_choose();
set_day();
case6:
month++;
if(month==13)month=1;
case7:
year++;
bianhuan();
}
if(K3==0)
if(K3==0)
while(K3==0);
y++;
if(y==2)y=0;
if(K4==0)
if(K4==0)
while(K4==0);
h--;
if(h==255)h=23;
m--;
if(m==255)m=59;
set_h--;
if(set_h==255)set_h=23;
set_m--;
if(set_m==255)set_m=59;
day--;
month--;
if(month==0)month=12;
year--;
}
}
voiddelay(uchart)
uchari;
do
for(i=0;
i<
23;
i++)
;
;
}while(t--);
评分表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 单片机 时钟 打铃 系统