单片机课程设计电子秒表与闹钟的设计.docx
- 文档编号:4462068
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:24
- 大小:170.59KB
单片机课程设计电子秒表与闹钟的设计.docx
《单片机课程设计电子秒表与闹钟的设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子秒表与闹钟的设计.docx(24页珍藏版)》请在冰豆网上搜索。
单片机课程设计电子秒表与闹钟的设计
摘要
随着科学技术的不断发展,人们对时间计量的要求越来越高。
在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。
本作品是以STC89C51单片机作为主控芯片,使用12MHZ的晶振,使用专用时钟日历芯片DS12C887产生时间信息,时间精确。
软件部分以C语言为主体,用1602LCD液晶屏显示输出信息,输出信息量多,更直观、人性化。
该时钟可实现人机交互,可通过提供的键盘对其进行调整。
系统具有以下功能:
年、月、日、时、分、秒显示;12小时/24小时模式切换,在12小时模式中,用AM和PM区分上午和下午;秒表功能;整点闹铃和报时功能,且闹钟可设置多组。
本次设计的电子时钟系统由单片机最小系统,1602LCD液晶屏,时钟芯片,调整按键,蜂鸣器,电源五大部分组成。
关键词:
定时器中断闹钟电子时钟
1电子秒表与闹钟系统概述
1.1课程设计基本要求
(1)用并行口设计一个具有显示功能的秒表,显示准确的北京时间(时、分、秒),可用24小时制式;
(2)有时间校准功能;
(3)允许通过转换功能键转换显示时间,用定时器实现一个电子闹钟,能设定和修改定时的时间,并能到时响铃通知;
(4)所有按键需要通过串口自发自收来调校各种功能。
1.2系统实现功能
本系统是基于单片机AT89S52制作的数字电子钟。
根据实验要求,在完成实验所要求的基本功能外,扩展了几个功能。
硬件系统设计方面:
采用六位LED数码管,用切换的方式显示时间和设置的闹钟时间;可调整时间以及闹钟时间;
具有设置闹钟的功能。
软件系统设计方面:
程序采用汇编语言编写,使自己更加理解硬件语言以及其工作原理;“时钟”基准时间由单片机内部的定时中断提供用一个计数器对定时中断的次数进行计数,可实现“秒”定时,同理可以进行“分”﹑“时”定时;采用按键查询功能复用,简化了程序的设计;采用动态扫描法显示6位数码管。
基于51单片机的电子时钟的设计,从硬件和软件两个方面给出了具体实现过程。
该时钟的设计采用功能分块的思想方法,将硬件电路划分为开关电路,显示驱动电路和数码管电路等若干独立模块,而软件的实现则由闹钟的声音程序、时间显示程序、日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等组成。
文中给出了各个模块的电路图,并用Proteus的ISIS软件对电子时钟系统的各个功能进行了仿真,并给出了相应的仿真结果图像。
1.3系统应用价值展望
现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。
由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。
在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。
这是前期准备工作。
第二部分是硬件部分:
依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。
第三部分是软件部分:
先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。
第四部分是软件画图部分:
设计好电路后进行画图,包括电路图和仿真图的绘制。
第五部分是软件仿真部分:
软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。
第六部分是硬件实现部分:
连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。
最后进行功能扩展,在已经正确的设计基础上,添加额外的功能。
2仿真软件Proteus和Keil简介
2.1Proteus简介
Proteus是英国Labcenter公司开发的电路分析与仿真软件。
该软件的特点是:
①集原理图设计、仿真和PCB设计于一体,真正实现从概念到产品的完整电子设计工具,②具有模拟电路、数字电路、单片机应用系统、嵌入式系统(不高于ARM7)设计与仿真功能,③具有全速、单步、设置断点等多种形式的调试功能,④具有各种信号源和电路分析所需的虚拟仪表,⑤支持KeilC51uVision2、MPLAB等第三方的软件编译和调试环境,⑥具有强大的原理图到PCB板设计功能,可以输出多种格式的电路设计报表。
拥有PROTEUS电子设计工具,就相当于拥有了一个电子设计和分析平台。
2.2Keil简介
KeilSoftware公司推出的uVision3是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。
除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。
此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。
uVision3提供逻辑分析器,
KeilC51是KeilSoftware公司出品的51系列兼容C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
3系统工作原理分析
3.1AT89C2051模块
AT89C2051是一种低电压、高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机数据存储器,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
是一种强劲的微型处理器,对许多嵌入式控制应用提供一定高度灵活和成本低的解决办法。
下图为其芯片引脚:
图3-1AT89C2051引脚图
各引脚功能如下:
(1)VCC:
电源电压。
(2)GND:
地。
(3)P1口:
P1口是一个8位双向I/O口。
口引脚P1.2~P1.7提供内部上拉电阻,P1.0和P1.1要求外部上拉电阻。
P1.0和P1.1还分别作为片内精密模拟比较器的同相输入(ANI0)和反相输入(AIN1)。
P1口输出缓冲器可吸收20mA电流并能直接驱动LED显示。
当引脚P1.2~P1.7用作输入并被外部拉低时,它们将因内部的写入“1”时,其可用作输入端。
当引脚P1.2~P1.7用作输入并被外部拉低时,它们将因内部的上拉电阻而流出电流。
(4)P3口:
P3口的P3.0~P3.5,P3.7是带有内部上拉电阻的七个双向I/O口引脚。
P3.6用于固定输入片内比较器的输出信号并且它作为一通用I/O引脚而不可访问。
P3口缓冲器可吸收20mA电流。
当P3口写入“1”时,它们被内部上拉电阻拉高并可用作输入端。
用作输入时,被外部拉低的P3口脚将用上拉电阻而流出电流。
P3口还用于实现AT89C2051的各种第二功能,如下表所列:
引脚口
功能
P3.0
RXD串行输入端口
P3.1
TXD串行输入端口
P3.2
INT0外中断0
P3.3
INT1外中断1
P3.4
T0定时器0外部输入
P3.5
T1定时器1外部输入
图3-2AT89C2051引脚功能
P3口还接收一些用于闪速存储器编程和程序校验的控制信号。
(5)RST:
复位输入。
RST一旦变成高电平所有的I/O引脚就复位到“1”。
当振荡器正在运行时,持续给出RST引脚两个机器周期的高电平便可完成复位。
每一个机器周期需12个振荡器或时钟周期。
(6)XTAL1:
作为振荡器反相器的输入和内部时钟发生器的输入。
(7)XTAL2:
作为振荡器反相放大器的输出。
3.2显示器驱动模块
由于通过数码管公共极的电流较大,单片机I/O口驱动能力是不够的,故LED驱动模块必不可少。
为避免过多地使用分立元件,本次设计采用一片74HC245来驱动位码,用P2口进行位选扫描。
图3-3显示器驱动模块仿真图
74HC245是常用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据,74LS245还具有双向三态功能。
片选端CE,接低电平时传输数据,接高电平时A、B均为高阻态。
方向选择端AB/BA,接高电平时信号由A向B传输(发送),接低电平时信号由B向A传输(接收)。
3.3数码管显示模块
显示设备为共阳8位7段数码管(LED),用单片机P0口作为LED段选控制端,用单片机P2口作为LED位选控制端,并采用集成块74LS245作为位驱动模块。
片选端CE接地,方向选择端AB/BA接电源。
图3-4数码管显示模块仿真图
LED数码管及引脚图资料LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的2个8数码管字样了。
如:
显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。
这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。
图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个LED的亮灭来显示数字。
4程序流程图设计
主程序流程图:
图4-1主程序流程图
当有不同按键,进入不同的服务子程序,同时在查询的时候判断是不是整点,有没有到达闹铃设置的时间,进入服务子程序采用的是查询的模式。
秒表子程序流程图:
图4-2秒表子程序流程图
闹铃程序流程图:
图4-3闹铃程序流程图
实现闹钟功能主要有两个步骤,首先是能在按键中把闹钟数值写进寄存器,实现存储功能。
其次是根据在查询按键服务程序中作判别,检查当前时间是否与闹铃时间相等,如果相等,则使在相应时间时对蜂鸣器提供驱动电流即可。
就实现了闹钟设置的功能。
TO中断子程序:
图4-4中断子程序流程图
5Proteus仿真原理图
列出元件连线仿真,如图:
图5-1电子时钟系统总图
功能按键解释:
S1为功能选择按键,S2为功能扩展按键,S3为数值加一按键。
操作时,连续短时间(小于1秒)按动S1,即可在以上的几个功能中连续循环。
中途如果长按(大于2秒)S1,则立回到时钟功能的状态。
功能说明:
(1)时钟功能:
上电后LED数码管会显示已设定好的10:
10:
00。
(2)校时功能:
短按一次S1,当前时间变为闪烁状态,按动S2小时位加1,按动S3分钟位加1。
(3)闹钟功能:
短按二次S1,显示状态为22:
10:
00。
冒号为长亮。
按动S2小时位加1,按动S3分钟位加1,秒时不可调。
(4)倒计时功能:
该功能为拓展功能。
短按三次S1,显示状态为0。
按动S2则从低位依次显示高位,按动S3则相应位加1,当S2按到第6次时会是所设定的时间状态下开始倒计时,再次按动S2将再次进入调整功能,并且停止倒计时。
(5)秒表功能:
短按四次S1,显示状态为00:
00:
00.冒号为长亮。
按动S2则开始秒表计时,再次按动S2则停止计时,当停止计时的时候按动S3则秒表清零。
(6)计数器功能:
短按五次S1,显示状态为00:
00:
00。
冒号为长灭,按动S2则计数器加1.按动S3则计数器清零。
6课程设计体会
我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的课程设计就为我们提供了良好的实践平台。
这次单片机课程设计我们历时一个星期,时间虽然不算长,但经过这一个星期的实践和体验下来,我们综合那些理论知识来运用到设计和创新,那些原本感觉枯燥乏味的程序在这次课程设计后,我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
总而言之,单片机课程设计对于我们有很大的帮助,我们从中受益匪浅。
在此次设计中我们必须首先熟悉和掌握单片机的结构及工作原理,单片机的接口技术及相关外围芯片的特性,控制方法。
以及单片机核心电路设计的基本方法和技术,了解有关电路参数的计算方法。
单片机不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
而在这次设计LCD动态图片显示的过程中,我学到了很多有关LCD动态图片显示的设计方法与工作原理。
我不但巩固了以前所学过的知识,也学到了很多在单片机的控制系统课程设计,书本上所没有学到过的知识。
同时也明白了理论与实践相结合的重要性,只有理论知识是远远不够的,原本以为我们学习的课程很多了。
但是当我们要真正的用我们已学过的知识来解决实际的问题时,开始我们都茫然了。
所以,我们要学的东西真的还有很多很多,只有把所学的理论知识与实践相结合起来,在实际的操作过程中,我们才能够体会到其中意义,从而提高自己的实际动手能力和独立思考的能力。
参考文献
[1]徐煜明,韩雁.单片机原理及接口技术,电子工业出版社
[2]万光毅,严义,邢春香.单片机实验与实践教程,北京航空航天大学出版社
[3]张迎新.单片机中级教程,北京航空航天大学出版社
[4]丁元杰.单片机原理与应用,机械工业出版社
[5]孙育才.MCS-51系列单片微型计算机及其应用,东南大学出版社
附:
源程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7F,0x3F};
ucharcodetable1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0x3F};
ucharcodetable2[]={0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x37};
sbitkey1=P3^5;
sbitkey2=P3^4;
sbitkey3=P3^2;
sbitL5=P3^1;
sbitL3=P3^3;
sbitL1=P3^5;
sbitL4=P3^2;
sbitL2=P3^4;
sbitL6=P3^0;
sbitP3_7=P3^7;
sbitled=P1^7;
charmiao=0,fen=10,shi=10,count1,count1_1,count2,count3,count4,num,ci,wei1,wei2,wei3,wei4,wei5,wei6,time,dingmiao,dingfen=10,dingshi=22,miaobiao;
charji1,ji2,ji3,ji4,ji5,ji6;
charmiao_ge,miao_shi,fen_ge,fen_shi,shi_ge,shi_shi;
uintkai,change1,xun1,change2,xun2;
uintxiao1,xiao2,xiao3,xiao4,xiao5,xiao6;
uintnaozhong;
voiddelay(uintz)
{uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);}
voiddidi()
{P3_7=1;
delay
(2);
P3_7=0;
delay
(2);}
voidxianshi(uchara,ucharb)
{if(num!
=1)
{if(num==2||num==4)P1=table[a];
elseif(num==3||num==5||change1==1)
P1=table1[a];
elseP1=table[a];}
else
{if(change2==1)P1=table2[a];
elseP1=table1[a];}
if(b==1)
{L5=0;
delay
(2);
L5=1;}
if(b==2)
{L3=0;
delay
(2);
L3=1;}
if(b==3)
{L1=0;
delay
(2);
L1=1;}
if(b==4)
{L4=0;
delay
(2);
L4=1;}
if(b==5)
{L2=0;
delay
(2);
L2=1;}
if(b==6)
{L6=0;
delay
(2);
L6=1;}}
voidmiaox(uchart)
{uchary1,y2;
y1=t%10;
y2=t/10;
xianshi(y1,1);
xianshi(y2,2);}
voidfenx(uchart)
{uchary3,y4;
y3=t%10;
y4=t/10;
xianshi(y3,3);
xianshi(y4,4);}
voidshix(uchart)
{uchary5,y6;
y5=t%10;
y6=t/10;
xianshi(y5,5);
xianshi(y6,6);}
voiddisplay()
{if(num==2)
{if(dingshi<=23)
{miaox(dingmiao);
fenx(dingfen);
shix(dingshi);}
elseif(dingshi==24)
{kai=1;
xianshi(11,1);
xianshi(11,2);
xianshi(11,3);
xianshi(11,4);
xianshi(11,5);
xianshi(11,6);}}
elseif(num==3)
{led=1;
if(xiao1==0)
xianshi(10,1);
else
xianshi(miao_ge,1);
if(xiao2==0)
xianshi(10,2);
else
xianshi(miao_shi,2);
if(xiao3==0)
xianshi(10,3);
else
xianshi(fen_ge,3);
if(xiao4==0)
xianshi(10,4);
else
xianshi(fen_shi,4);
if(xiao5==0)
xianshi(10,5);
else
xianshi(shi_ge,5);
if(xiao6==0)
xianshi(10,6);
else
xianshi(shi_shi,6);}
elseif(num==4)
{xianshi(wei1,1);
xianshi(wei2,2);
xianshi(wei3,3);
xianshi(wei4,4);
xianshi(wei5,5);
xianshi(wei6,6);}
elseif(num==5)
{led=1;
xianshi(ji1,1);
xianshi(ji2,2);
xianshi(ji3,3);
xianshi(ji4,4);
xianshi(ji5,5);
xianshi(ji6,6);}
elseif(num==1)
{miaox(miao);
fenx(fen);
shix(shi);}
elseif(num==0)
{miaox(miao);
fenx(fen);
shix(shi);}}
voidscan()
{if(key1==0)
{TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
display();
delay(4);
display();
if(key1==0)
{while(key1==0)
{if(time==1)break;
display();}
while(key1==0);
if(time==1)
{time=0;
TR1=0;
num=0;
ci=0;
miaobiao=0;
ji1=0;
xiao1=0;xiao2=0;xiao3=0;xiao4=0;xiao5=0;xiao6=0;
ji1=0;
ji2=0;
ji3=0;
ji4=0;
ji5=0;
ji6=0;
dingmiao=0;dingfen=10;dingshi=22;
wei1=0;wei2=0;wei3=0;wei4=0;wei5=0;wei6=0;miao_ge=0;miao_shi=0;fen_ge=0;fen_shi=0;shi_ge=0;shi_shi=0;}
else
{num++;
TR1=0;}
if(num>=6)num=0;}}
if(num!
=0)
{i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机课程设计 电子秒表与闹钟的设计 单片机 课程设计 电子 秒表 闹钟 设计