毕业设计电子时钟设计.docx
《毕业设计电子时钟设计.docx》由会员分享,可在线阅读,更多相关《毕业设计电子时钟设计.docx(36页珍藏版)》请在冰豆网上搜索。
毕业设计电子时钟设计
郑重申明
本人呈交的毕业实习报告(设计),是在导师的指导下,独立进行实习和研究工作所取得的功效,所有数据、图片资料真实靠得住。
尽我所知,除文中已经注明引用的内容外,本毕业实习报告(设计)的功效不包括他人享有高作权的内容。
对本毕业实习报告(设计)所涉及的实习和研究工作做出奉献的其他个人和集体,均已在文中以明确的方式标明。
本毕业实习报告(设计)的知识产权归属于作者与培育单位。
学生签名
日期
摘要
该电子时钟是采用STC89C52单片机进行的电子时钟设计,其设计包括:
显示模块,按键模块,闹铃模块,无线接收模块。
时钟采用STC89C52单片机自身按时器进行计时,按键模块采用独立式键盘(4个按键),闹铃部份由8550三极管和蜂鸣器组成,无线接收模块采用1838接收窗,显示时、分、秒用8位数码管显示,具有可调整时刻功能,在设计进程中硬件和软件应同时进行。
关键词:
电子时钟单片机闹钟蜂鸣器
1绪论
课题背景及意义……………………………………………………………5
课题内容……………………………………………………………………5
2方案论证
功能要求……………………………………………………………………7
数字时钟方案论证与比较…………………………………………………7
数码管显示方案论证与比较………………………………………………8
3.电子时钟的硬件设计
电子时钟的组成……………………………………………………………9
单片机最小系统图…………………………………………………………9
STC89C52引脚功能…………………………………………………………10
数码显示模块………………………………………………………………11
闹铃部份……………………………………………………………………11
按键模块……………………………………………………………………12
4电子时钟的软件设计
电子时钟程序流程框图……………………………………………………14
按键调整流程图……………………………………………………………16
子程序的设计………………………………………………………………17
数码管显示模块……………………………………………………17
按键子模块…………………………………………………………18
主程序………………………………………………………………34
5硬件的制作与测试分析
电子时钟的硬件制作………………………………………………………37
硬件测试……………………………………………………………………37
软件调试……………………………………………………………………37
测试结果分析与结论………………………………………………………38
数码管测试结果分析………………………………………………38
按键测试结论………………………………………………………38
测试结论……………………………………………………………39
结论…………………………………………………………………………………40
参考文献……………………………………………………………………………42
1论述
课题背景及意义
二十一世纪的今天,电子时钟已经融入到千万万万户家庭中,它已经成了人们生活中不可或缺的一部份。
电子时钟通过数码管显示,使其直观明了,更能实现整点报时,遥控控制等功能,使其更符合现今人们的生活需求,电子时钟的出现令人们的生活加倍的有条不紊。
目前市场上的电子时钟很多,为了迎合市场的需要,知足广大的消费人群,人们通过自己的DIY设计让电子时钟富有创意。
电子时钟通过不断地改良,使其更具有市场。
本次设计的电子时钟利用单片机STC89C52进行控制的,利用单片机自身的按时器功能,外加遥控器进行控制,采用数码管显示,可对电子时钟进行调整校准。
电子时钟既可普遍应用于家庭,也可应用于银行、邮电、宾馆、医院、学校、企业、商店等相关行业的大厅,和单位会议室、门卫等场所。
因此,此设计具有相当重要的现实意义和实用价值。
课题内容
本次设计的题目是:
基于51单片机的电子时钟设计与制作。
利用单片机的计时、校时等功能,设计并制作出一个以单片机STC89C52为核心组件,采用数码管显示“时“分“秒”的电子时钟,要求能正常显示,并可用按键进行调整校准和用遥控器进行相同操作。
这次设计与传统的机械表相较,它具有走的更精准,显示更直观等特点,同时具有不同的操作方式,让这次设计更符合现代生活的需求,而且单片机的数字时钟具有编程灵活,便于功能扩充等特点。
本次设计可分为两部份:
软件部份、硬件部份。
硬件部份包括:
STC89C52单片机模块,数码管模块,蜂鸣器模块,按键模块,闹铃模块。
通过正确连接电路和单片机的编程来实现上述要求。
软件部份的主程序包括:
数码管显示程序,按键控制程序,遥控器操作程序。
使其实现时分秒正常显示,并可通过按键和遥控器进行调试功能。
2方案论证
功能要求
一、能显示时、分、秒
二、通过按键能够对电子时钟进行调整校准
3、通过遥控器可对电子时钟进行调整校准
4、可实现设定闹钟并报警功能
五、上电后,电子钟显示“14-00-00”,蜂鸣器同时发作声音
数字时钟方案论证与比较
在本次设计中,数字时钟是最主要的部份,按照这次设计的需要,可利用两种方案实现。
方案一:
采历时钟芯片DS12887A进行控制时,由于该芯片具有完备的时钟闹钟功能,所以能够直接用它来进行显示或设置,如此能够让软件的编程相对简单。
而且为了保证时钟在电网电压不足或突然断电的情形下仍能正常工作,芯片内部本身就包括锂电池,当电网电压不足或突然掉电的时候,系统会自动转换到内部锂电池供电系统,而且即便系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时刻。
方案二:
采用单片机本身的按时器进行计时,来实现数字时钟功能。
原理为:
在单片机内部存储器设三个字节别离寄存时钟的时、分、秒信息。
利用按时器与软件结合实现1秒按时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,按时器都要从头赋初值,所以该时钟精度不高。
而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。
数码管显示方案论证与比较
方案一:
采用静态显示。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。
该方式每一名都需要一个8位输出口控制。
静态显示时较小的电流能取得较高的亮度,且字符不闪烁。
但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
方案二:
采用动态显示。
所谓动态显示就是一名一名的轮流点亮各个位,对于显示器的每一名来讲,每隔一段时刻点亮一次。
利用人的视觉暂留功能能够看到整个显示,但必需保证扫描速度足够快,字符才不闪烁。
显示器的亮度既与导通电流有关,也于点亮时刻与距离时刻的比例有关。
调整参数能够实现较高稳固度的显示。
动态显示节省了I/O口,降低了能耗。
从节省I/O口和降低能耗动身,本设计采用方案二。
综上所诉:
咱们采用单片机完成数字时钟的功能,采用数码管的动态显示来完成显示部份。
3.电子时钟的硬件设计
电子时钟的组成
本次设计制作的电子时钟组成部份为:
STC89C52主控制模块,按键模块,复位电路,数码管显示模块,闹铃模块。
组成图如图3-1所示
图3-1电子时钟系统组成
单片机最小系统图
单片机最小系统又称为最小应用系统,即用最少的元器件组成单片性能够工作的系统。
一般应包括:
电源、单片机、晶振电路、复位电路等。
如图3-2所示为单片机最小系统图。
图3-2单片机最小系统图
STC89C52引脚功能
图3-3STC89C52引脚
如图3-3所示,STC89C52主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,别离接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件概念,在本设计中,P0端口(32~39脚)被概念为功能控制端口,别离与其相应功能管脚相连接,13脚概念为IR输入端。
数码管显示模块
图3-4数码管显示模块
如图3-4所示,在这次的设计中,数码管接在单片机的P0和P2口,P0控制段选信号,P2控制位选信号。
通过位选信号依次点亮各个数码管,由于人眼有视觉暂留的特性,因此若是第一个数码管灭和第二个数码管亮之间的时刻足够短,人眼是感觉不出数码管的转变的。
闹铃部份
闹铃如下图3-5所示,主要由8550三极管和蜂鸣器组成,可通过手动设置来实现闹铃功能。
图3-5闹铃图
按键模块
如图3-6所示,本次设计是采用四个独立式按键,别离为“时刻设置”键,“闹钟设置”键,“+”键,“-”键,,通过这四个按键来调整电子时钟的时刻显示和闹钟响应。
“时刻设置”“闹钟设置“+”“—”
图3-6按键图
4电子时钟的软件设计
本次设计主如果对单片机,数码管,红外遥控器,按键和闹铃部份进行编写的。
电子时钟程序流程框图
图4-1系统程序流程框图
本次的设计主程序是按照每一个模块的特性来进行编写,先对各个模块进行初始化,然后再依照各自不同来分模块编写,最后得出总的流程图。
进入程序后,先将单片机,数码管,按键等进行初始化,数码管显示固定数值“14-00-00”,程序开始等待按键按下,当有按键按下,单片机检测一次,肯定按下,单片机挪用程序,同时数码管刷新一次,显示当前操作结果。
完后,程序返回按键等待,如此循环执行
按键调整流程图
图4-2按键调整流程图
子程序的设计
数码管显示模块
4位独立数码管显示,电路相对简单,主要特点,简单易用,显示清楚,性价比高。
数码管显示程序:
voiddisplay(void)
{
P0=led[hour/10];//p0口送数据拆数显示
P2=0xFE;//片选
delay();//延时
P2=0xFF;//片选关
P0=led[hour%10];
P2=0xFD;
delay();
P2=0xFF;
P0=0x40;
P2=0xFB;
delay();
P2=0xFF;
P0=led[minit/10];
P2=0xF7;
delay();
P2=0xFF;
P0=led[minit%10];
P2=0xEF;
delay();
P2=0xFF;
P0=0x40;
P2=0xDF;
delay();
P2=0xFF;
P0=led[second/10];
P2=0xBF;
delay();
P2=0xFF;
P0=led[second%10];
P2=0x7F;
delay();
P2=0xFF;
}
按键子模块
本次设计是采用四个独立式按键,别离为“设置”键,“+”键,“-”键,“复位”键,通过这四个按键来调整电子时钟的时刻显示和闹钟响应。
按键操作子程序:
voidKeykonzhi()
{
if(time==0)//键盘时间设定键按下
{
delay();
delay();
if(time==0)
{
while(!
time);
timenum1++;//标记++
TR1=0;
f2=0;
}
}
if(timenum1==1)//如果timenum1==1调时
{
dsflg=0;
st=0;
if(add==0)//加键按下
{
delay();
delay();
if(add==0)
{
while(!
add);//松手检测
hour++;//小时++
}
}
if(dec==0)//减键按下
{
delay();
delay();
if(dec==0)
{
while(!
dec);//松手检测
hour--;//小时--
}
}
if(hour>23)//限位
{hour=0;}
P0=led[hour/10];//显示小时函数
P2=0xFE;
delay();
P2=0xFF;
P0=led[hour%10];//显示小时函数
P2=0xFD;
delay();
P2=0xFF;
}
if(timenum1==2)////如果timenum1==2调分//以下也是和调时一样的方法
{
dsflg=0;
st=0;
if(add==0)
{
delay();
delay();
if(add==0)
{
while(!
add);
minit++;
}
}
if(dec==0)
{
delay();
delay();
if(dec==0)
{
while(!
dec);
minit--;
}
}
if(minit>60)
{minit=0;}
P0=led[minit/10];
P2=0xF7;
delay();
P2=0xFF;
P0=led[minit%10];
P2=0xEF;
delay();
P2=0xFF;
}
if(timenum1==3)////如果timenum1==3调秒
{
dsflg=0;
st=0;
if(add==0)
{
delay();
delay();
if(add==0)
{
while(!
add);
second++;
}
}
if(dec==0)
{
delay();
delay();
if(dec==0)
{
while(!
dec);
second--;
}
}
if(second>60)
{second=0;}
P0=led[second/10];
P2=0xBF;
delay();
P2=0xFF;
P0=led[second%10];
P2=0x7F;
delay();
P2=0xFF;
}
if(timenum1==4)////如果timenum1==4退出
{
TR1=1;
timenum1=0;
dsflg=1;
f2=1;
st=1;
}
}
voidalmset()
{
timenum1=0;
if(timer==0)//键盘上的闹钟键按下
{
delay();
delay();
if(timer==0)
{
while(!
timer);//松手
timenum2++;//标记++
f1=0;
}
}
if(timenum2==1)//如果timenum2=1设定脑钟的小时
{
dsflg=0;
st=0;
if(add==0)//加键按下
{
delay();
delay();
if(add==0)
{
while(!
add);//松手
hour1++;//小时++
}
}
if(dec==0)//减键按下
{
delay();
delay();
if(dec==0)
{
while(!
dec);//松手
hour1--;//小时--
}
}
if(hour1>23)//限位
{hour1=0;}
P0=led[hour1/10];//小时显示
P2=0xFE;
delay();
P2=0xFF;
P0=led[hour1%10];
P2=0xFD;
delay();
P2=0xFF;
P0=0x77;//显示一
P2=0xBF;
delay();
P2=0xFF;//显示一
P0=0x38;
P2=0x7F;
delay();
P2=0xFF;
}
if(timenum2==2)//如果timenum2=1设定脑钟的分钟和上面小时一样
{
dsflg=0;
st=0;
if(add==0)
{
delay();
delay();
if(add==0)
{
while(!
add);
minit1++;
}
}
if(dec==0)
{
delay();
delay();
if(dec==0)
{
while(!
dec);
minit1--;
}
}
if(minit1>60)
{minit1=0;}
P0=led[minit1/10];
P2=0xF7;
delay();
P2=0xFF;
P0=led[minit1%10];
P2=0xEF;
delay();
P2=0xFF;
P0=0x77;
P2=0xBF;
delay();
P2=0xFF;
P0=0x38;
P2=0x7F;
delay();
P2=0xFF;
}
if(timenum2==3)//如果timenum2=3退出
{
timenum2=0;
dsflg=1;
f1=1;
st=1;
}
}
当用手按下一个键时,如图3-4所示,往往按键在闭合位置和断开位置之间跳几下才稳固到闭合状态的情形;在释放一个键时,也回会出现类似的情形。
这就是抖动。
抖动的持续时刻随键盘材料和操作员而异,不过通常老是不大于10ms。
很容易想到,抖动问题不解决就会引发对闭合键的识别。
用软件方式能够很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这以后,在读入键盘码。
图3-4按键抖动新号波形
这次设计进程中电路的工作原理:
数字电子钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。
因此,一个大体的数字钟电路主要由显示器“时”,“分”,“秒”和单片机,还有校时电路组成。
8个数码管的段选接到单片机的P0口,位选接到单片机的P2口。
数码管依照数码管动态显示的工作原理工作,将标准秒信号送入“秒单元”,“秒单元”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分单元”的时钟脉冲。
“分单元”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时单元”。
“时单元”采用24进制计时器,可实现对一天24小时的累计。
显示电路将“时”、“分”、“秒”通过七段显示器显示出来。
校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整,按一下设置键进入时设置,按下“+”时加一次,按下“-”键,时减一次,同理,按设置键两次即进行分调整,按下三次进行秒调整。
主程序
voidmain(void)
{
second=59;//时间初始化为00:
00:
00
minit=59;
hour=13;
second1=0;//闹钟默认为12:
00:
00
minit1=05;
hour1=14;
count0=0x00;
count1=0x00;
timenum1=0;
f1=1;
f2=1;
dsflg=1;
m=0;
f=0;
st=1;
P1=0xFF;
TMOD=0x11;
TL1=tl;
TH1=th;
EA=1;
TR1=1;
ET1=1;
IT1=1;
TH0=0;
TL0=0;
TR0=1;
EX1=1;
while
(1)
{
if(zhengdian==1)
{
speaker=0;
delay1
(1);
speaker=1;
delay1
(1);
}
if(f1==1)
{
Keykonzhi();
}
if(f2==1)
{
almset();
}
almkozi();
if(dsflg==1)
{
display();
}
if(st==1)
{
if(add==0)
{
delay();
delay();
if(add==0)
{
while(!
add);
second=00;//时间初始化为00:
00:
00
minit=00;
hour=00;
}
}
}