《基于51单片机的电子台历设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机的电子台历设计.doc(12页珍藏版)》请在三一办公上搜索。
1、摘要本设计是一个基于单片机AT89S51的简易电子台历,附有复位电路,时钟电路,键盘电路。复位电路是单片机的初始化操作,除了正常的初始化外,当程序运行出错后或者操作失误使系统进入死锁状态时,为摆脱困境,也需要能够通过独立式键盘电路进行启动,调整,再运行,时钟电路采用12MHZ的晶振,作为系统的时钟源,具有较高的准确性。在上电或者复位时数码管显示年,月,日,时,分,秒。A键用于模式调整,形成一个循环,按一次键,即对秒调整。再按一次对分调整,如此循环。B键用于按下A键之后进行加1的操作,按一次加1,C键用于减1的操作,按一次减1。能够完成从00时00分00秒到23时59分59秒的循环计时,过23时
2、59分59秒,日期增加1,当日期达到1个月后,月进位1,满12个月后,年进位1,年的首2位保持不变,始终为20。单片机并行口的电子台历的设计在AT89S51的P0口和P2口外接由14个LED数码管(LED7LED0)构成的显示器,用P0口作LED的段码输出口(P0.0P0.7对应于LED的adp),P2.7P2.0作LED的段码年月日的位控输出线(P2.7P2.0对应于LED7LED0),P1.7P1.0对应时间的数码管,P3口外接三个按键A、B、C(对应于P3.0P3.2)。数码管为4位一体的共阳极的数码管,数码管采用动态扫描法,从右往左依次点亮,显示数字。关键字:单片机、电子台历、数码管A
3、BSTRACTThe design is a single electrical calendar basing SCMC of AT89S51. There are restoration circuit, clock circuit and keyboard circuit. Restoration circuit is used as an original operation, besides normal start-up, when the program runs mistakenly and system loses its order ,in order to get rid
4、 of the trouble, it also need to restart ,adjust and run through keyboard. Clock circuit uses 12MHZ Crystal as the source of the calendar ,with a high accuracy.When the system starts, the display shows year, month ,day, week and time the A keyboard is used to start and adjust, the B keyboard is used
5、 to add 1,when press it ,the date will add 1, the C keyboard is used to minus 1, when press it , the date will minus 1.It can make a cycle from 00:00 to 23:59:59.The display includes 14 LEDS, the SCMC joins the display in the P1, P0 ports and P2 ports, the SCMC joins the keyboards in the P3 scan, li
6、ghting the LEDS from right to left , showing the numbers.Keywords:SCMC,CalendarLED 目 录第1章 前言2第2章 电子台历方案介绍及结构图32.1 方案1 介绍32.2 方案2介绍42.2.1电子台历整机电路原理图42.3 电子台历工作原理52.3.1 实现时钟计时的基本方法52.3.2 电子台历的显示52.3.3 电子台历的启、停及时间调整5第3章 硬件电路单元电路的设计53.1 电源电路53.2 时钟电路63.3 复位电路63.4 键盘/显示接口电路6第4章 软件系统的设计7结论10参考文献11附录1 电子台历
7、整机原理图11附录2 PCB原理图12第1章 前言在修完本学期的课程,经历了单片机课程设计后,为了更好地检测自己的水平,进一步巩固知识,增强应用能力,进行了此次课程设计,我们选定的课题为基于单片机的电子台历的设计。本次设计的目的在于利用所学知识和电子领域的生产实践相互结合起来,认识到产品的原理,硬件制作流程,进一步熟练语言编程,提高画图水平,增添我们对学习单片机的兴趣,现在进行基于单片机的电子台历的毕业设计,无疑是很有现实意义和指导意义的。电子台历就是基于单片机发展起来的一种仪表,已经广泛使用在各个公共场合与家庭中,电子台历的品种众多,前面板形式有很多种,有的除了显示日期,时间,还安装了传感器
8、,能够显示温度等,还有的具有整点报时功能,用微处理器控制,微处理器的品种也很多,此次设计采用的是89S51,数字显示可以用液晶显示器,也可以用普通数码管,数码管也有一位的,四位一体等之分,还分共阴极和共阳极。大家都知道,数码管比液晶显示器的价钱便宜,所以我们大多见到得是数码管显示产品。数码管不能够显示汉字,只能够显示数字,简单的字母,所以采用分开显示的办法,把汉字刻在显示数字的数码管前。有时甚至在显示星期时,采用7个发光二极管,对应星期,只需来回点亮数码管就可以达到目的,更加有利于节省成本。目前用于电子产品设计调试的工具有很多,有制图用的Protel软件,Protel 设计系统是第一套引入Wi
9、ndows环境的EDA开发工具,它具有原理图设计等功能。C语言编译器用到Keil uVision3软件,Keil uVision3集成开发环境IDE是一个基于Windows的软件开发平台,有一个功能强大的编辑器,项目管理器和制作工具。Keil uVision3支持所有的Keil 工具,包括C编译器,宏汇编器,链接器/定位器和目标文件至HEX格式的转换器。在本次设计中,用到了这3个专业软件。第2章 电子台历方案介绍及结构图2.1 方案1 介绍方案1:基于Intel 8155的电子台历的设计利用Intel 8155芯片为AT89S51扩展并行口,通过Intel 8155外接由八个LED数码管(LE
10、D7LED0)构成的显示器和由3个按键A、B、C构成的键盘。该系统是以单片机为核心,通过外接键盘,显示电路来实现的。由于外接电路和显示电路需占用单片机的口线,而单片机的资源是有限的,为在充分利用单片机资源的同时,还能扩展其资源,使设计的整体电路应用范围更广泛,因此,可以选择能扩展单片机口线的芯片为其扩展硬件资源,又由于Intel 8155在扩展口线的同时,还能为单片机扩展定时器/计数器和RAM资源空间。该方案是采用Intel 8155芯片对单片机进行扩展,其显示部分就与Intel 8155接口,数码管的段控由PA口控制,位控由PB口控制。设计方框图如下图2.1所示:AT89S51复位电路显示器
11、驱动电路8155时钟电路 键盘电源电路 图2.1 电子台历整机电路框图2.2 方案2介绍方案2:基于单片机并行口的电子台历的设计电子台历整机电路框图如下图2.2。整个电路包括复位电路、时钟电路、电源电路、键盘/显示电路,各电路通过控制器AT89S51使其有机的结合起来。显示器驱动电路AT89S51复位电路时钟电路键盘电源电路图2.2 电子台历整机电路框图本次设计采用方案2,可以减少成本。在AT89S51的P0口,P1口和P2口外接由16个LED数码管(LED15LED0)构成的显示器,用P0口作LED的段码输出口(P0.0P0.7)对应于LED的adp),P2.7P2.0,P1.0P1.7作L
12、ED的位控输出线,P3口外接3个按键A、B、C(对应于P3.0P3.2)。本次电子台历设计出来使用单片机工作所必须的硬件资源(如连接晶振的引脚XTAL1和XTAL2,复位引脚RESET)外,对单片机的硬件资源还做了具体的安排。(1)P0口:P0.0P0.7作为数码管显示器的段控码驱动74LS244的输入端。(2)P3口:P3.0P3.2作为A、B、C键输入口。(3)P1,P2口:P1.0P1.7,P2.0P2.7分别控制数码管LED7LED0的位控码驱动74LS244的输入端。(4)定时/计数器使用定时器0工作方式2实现电子钟的运行。方式2是8位可自动重新装载初值的T/C,T/C是16位的,计
13、数寄存器由TH高8位和TL低8位构成。在特殊功能寄存器(SFR)中,对应 T/C0为TH0和TL0定时器和计数器的初始值通过TH0,TL0设置。满计数值为2t,方式2中TH和TL被当作为两个8位计数器。计数过程中,TH寄存为初值并保持不变,由TL进行8位计数。计数溢出是,除产生溢出中断请求外,还自动将TH中初值重装到TL,即重新装载。(5)专用寄存器定时器控制寄存器TCON,通过设置该寄存器TR0位的状态来控制地定时/计数器0的启动/停止;中断允许寄存器IE,通过设置该寄存器EA/ET0位的状态来设置定时/计数器0中断允许/禁止;定时器/计数器工作方式寄存器TMOD,设置定时/计数器0的工作方
14、式。2.2.1电子台历整机电路原理图电子台历的整机电路原理图见附录1。2.3 电子台历工作原理2.3.1 实现时钟计时的基本方法利用单片机的可编程定时/计数器、中断系统来实现时钟计数。(1)计数初值计:将定时器设为工作方式2,定时时间为1000s,则计数溢出1000次即得时钟计时最小单位秒,而1000次计数可用软件方法实现。假设使用T/C0,方式2,1000s定时,fosc=12MHZ。则初值X满足=28-1000/(12/12)=FD17H。(2)采用中断方式进行溢出次数累计,计满1000次为秒计时(1秒);(3)从秒到分和从分到时的计时是通过累加器和数值进行比较实现的。2.3.2 电子台历
15、的显示日期在8位数码管上显示,在上电或者复位后显示,因此,在内部RAM中设置显示缓冲区共8个单元。电子台历的时钟时间在6位数码管上进行显示,因此,在内部RAM中设置显示缓冲区共6个单元。2.3.3 电子台历的启、停及时间调整电子台历设置3个按键通过程序控制来完成电子台历的启、停及时间调整。其功能分别如下:A键控制电子台历的调整;B键调加1;C键调减1。当第一次按下A键进入对秒的调整,如果按下B键(或者C键)将进行加1(或者减1)的操作,如果不按B(或者C),再按一次A键,即进入对分的调整,再按一次,对时的调整,依次类推。第3章 硬件电路单元电路的设计3.1 电源电路电源电路为整个电路提供电源,
16、是电路设计不可缺少的一部分。电源电路的稳定性决定了整个电路的可靠程度。在本设计中,整个电路需要+5V电源。电源电路是把市电交流220V经过变压器降压为交流9V,再通过二极管整流、电容滤波、三端集成稳压器7805稳压后输出+5V直流电源。3.2 时钟电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。时钟电路是单片机心脏。典型值有6MHZ和12MHZ,单片机内部有一个高增益反相放大器,XTAL1和XTAL2分别为其输入与输出端,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构
17、成一个稳定的自激振荡器,产生时钟送至单片机内部的各个部件。时钟电路产生的震荡脉冲经过触发器进行二分频后,才能成为单片机的时钟脉冲信号。3.3 复位电路复位是单片机的初始化操作,其主要功能是把PC初始化为00H,使单片机从00H单元开始执行程序。除了进入系统的正常初始化之外,当程序运行出错或者操作失误使系统处于死锁状态时,为恢复计算机正常工作,也需要按复位键来重新启动。单片机在启动运行时需要复位,使CPU和其它部件处于一种确定的安全可靠的初始状态,并从这个状态开始工作。复位引脚RST,它是史密特触发输入,当振荡器起振后,在引脚上出现2个机器周期以上的高电平,使机器复位,RST为低电平后,退出复位
18、,CPU从初始状态开始工作。复位后状态:P0P3:0FFH; SP:07H; 此外其它16个寄存器除了SBUF外都为:00H。根据MCS-51系列单片机内部功能,复位电路有上电自动复位和按键手动复位两种方式。本设计采用前者,即是通过外部复位电路的电容的充电来实现的。而后者是通过时复位端经电阻与Vcc电源接通来实现的。MCS-51单片机上电瞬间RST引脚获得高电平,随着电容C充电,RST的电平逐渐降低,高电平只要能保持足够时间(2个机器周期),单片机就可以复位。本设计采用的晶振频率为12MHZ,因此,电路设计如下,选C为22F、R为2K。复位信号持续时间应超过2s才能完成复位操作。3.4 键盘/
19、显示接口电路键盘电路如图3.4所示。本设计中有3个按键故采用独立式按键,以单片机P1,0P1.2口线作为键盘接口,并通过上拉电阻接到Vcc。当有键按下时,P1口的相应口线为低电平,无键按下时为高电平。键盘的每一个键就是一个机械开关,键按下时,开关闭合,键松开时,开关断开。但是由于机械开关的撞击作用,开关的动作会产生抖动,约510MS。为保证对按键仅溢出处理,应消除抖动的影响,有几种方法:滤波,利用电容的滤波作用,按键按下后,输出端为低电平;双稳态消抖。独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独用一根I/O口线,每个按键的工作不会影响其他I/O口线的状态。此电路图采用的
20、是低电平有效,并且上拉电阻保证了按键断开时,I/O口线有确定的高电平。按键的稳定闭合期,一般为510MS。可以由操作人员的按键动作确定,一般为十分之几秒至几秒时间,为保证CPU对键的一次闭合,仅作一次键输入处理,必须要消除抖动对电路的影响。通常去抖动影响的措施有硬、软两种。本设计采用的就是软件去抖动法。显示电路为电子台历提供显示功能。静态显示和动态显示:静态就是需要显示的字符的各段连续通过电流,因而所显示的字段连续发光。动态显示就是所需要显示字段断续通过电流,因而其发光也是不连续的,在多个字符需要显示时,可以轮流给每一个字符通电流,逐次把所需要显示的字符显示出来,在每点一个显示器后,必须持续通
21、电一段时间,使之发光稳定,然后再点亮另一个显示器,如此循环扫描所有的显示器,由于巡回显示速度较快,每秒可重复多次(为了不产生闪烁,可每秒扫描20次)。虽然在同一时间只有一个显示器通电,但由于视觉暂停和发光二极管的余辉效应,可以认为每个显示器都在稳定地显示,这种巡回扫描显示器的操作要靠程序控制,动态显示的亮度随电流的平均值的增大而增强,其亮度大体上等于通过同样大小的直流电流的静态显示器的亮度,时间为6位显示。数码管显示为单片机负载,为提高显示的可靠性需对数码管进行驱动。第4章 软件系统的设计主程序:#includeunsignedcharhour=16,min=5,sec=50;year=10,
22、mon=5,day=5,date=3;unsigned char timer0_tick;#define timer0_count 0xf1b8 /* 65536-12000000/(12*200) */Unsignedchar code_seven=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;Unsignedchar selec_led=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;Unsignedchar data1=31,29,31,30,31,30,31,31,30,31,30,31;Unsign
23、edchar data2=31,28,31,30,31,30,31,31,30,31,30,31;/*-*/void timer0_isr() interrupt 1 TR0=0; TL0=timer0_count & 0x00ff; TH0=timer0_count8; TR0=1; timer0_tick+; if(timer0_tick=200) timer0_tick=0;sec+;if(sec=60)sec=0;min+;if(min=60)min=0;hour+;if(hour=24) sec=0;min=0;hour=0;day+;date+; if(date7) date=1;
24、if(year%4=0&year%100!=0)|year%400=0) if(daydata1mon-1) day=1;mon+; if(mon12) mon=1; year+;else if(daydata2mon-1)day=1;mon+; if(mon12) mon=1; year+; /*-*/void delay() unsigned char j,k;for(j=1;j10;j+)for(k=1;k8; PT0=1; ET0=1; TR0=1; EA=1;void delay_ms() unsigned char j,k; for(j=1;j40;j+) for(k=1;kdat
25、a1mon-1)day=1;mon+; if(mon12) mon=1;year+;else if(daydata2mon-1) day=1; mon+; if(mon12) mon=1; year+; while(P1_0=0) display();if(P1_1=0)/调整分+1 delay_ms();if(P1_1=0)mon+;if(mon12)mon=1; year+;if(mon12) hour=0;while(P1_1=0) display();if(P1_2=0)/调整时+1 delay_ms(); if(P1_2=0) year+;while(P1_2=0) display(
26、); if(P1_3=0) delay_ms(); if(P1_3=0); P1_4=P1_4;while(P1_3=0) display(); /*/void keyscan1()if(P1_0=0) /调整秒+1delay_ms();if(P1_0=0)sec+; if(sec=0) sec=0;min+; while(P1_0=0) display1();if(P1_1=0)/调整分+1 delay_ms();if(P1_1=0)min+;if(min=60)min=0;hour+;while(P1_1=0) display1();if(P1_2=0)/调整时+1 delay_ms();
27、 if(P1_2=0) hour+;if(hour=24) sec=0; min=0;hour=0; day+; while(P1_2=0) display1();if(P1_3=0) delay_ms();if(P1_3=0); P1_4=P1_4;while(P1_3=0) display1();/*/void main()timer0_initialize();P1=0XFF;while(1)if(P1_4=1) display();keyscan(); elsedisplay1();keyscan1();结 论单片机主要应用于控制领域,用以实现各种测试和控制功能。单片机因其稳定可靠、体
28、积小、价格便宜,在社会生产中得到了广泛的 应用。单片机原理和接口技术是学习和应用单片机不可缺少的课程。本次设计的单子台历主要用到了单片机的定时器中断系统、数据传送功能以及键盘和显示接口。单片机程序设计是单片机系统的灵魂,没有固化程序的单片机是不能工作的。在单片机程序设计中,一定要主要程序书写的规范化,掌握指令的正确使用。电子钟的秒加1运行是靠单片机的定时器中断产生,正确计算定时/计数器初值是保证电子钟台历准确的前提。电子钟数码管的显示可能出现数字闪烁的现象,主要是因为显示程序的延时不恰当,选择恰当的延时时间能使时钟数字稳定的显示在数码管上。单片机程序设计能力的提高一定要自己动手去做,先从小功能
29、程序入手,逐步转向比较复杂的程序,最后向C51转化。通过程序的调试和编译,在Proteus能够仿真出本次设计作品要求反映的相应功能:A键按下调整为模式选择键,B、C键进行加、减,以便调整到要求的时间。此电子钟在每次开机和系统复位后要对其实际调整才能正确反映当前实际,这样使用起来比较麻烦,为解决此问题可在本单片机系统中加实时时钟芯片DS1302提供实时时间。参考文献李广弟,朱月秀,王秀山,单片机基础【M】,北京:北京航空航天大学出版社,2001,。7;牛昱光,李晓林,李临生,李丽宏,单片机原理与接口技术,北京:电子工业出版社,2009.12;张伟,Protel 99SE实用教程,北京:人民邮电出版社,2008.4。附录1 电子台历整机原理图附录2 PCB原理图