ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:229.78KB ,
资源ID:4610258      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4610258.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子表设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

电子表设计.docx

1、电子表设计 摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次设计是以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子表,它由5V直流电源供电,通过6个共阴极七段数码管能够准确显示时间的时、分、秒,还可以通过键盘校准时间,设置闹钟以及整点报时,和闹铃。

2、该电子表的校准时间可以校准到秒,精确度极高。关键词:键盘;MAX7219;AT89C51;共阴极七段数码管目录摘要3关键词3引言5一、方案的选择和比较51.1、数字时钟方案51.2、数码管显示方案51.3、单片机型号的选择5二、硬件电路设计62.1、系统总体设计62.2、振荡电路设计62.3、复位电路62.4、键盘电路设计72.5、显示电路设计72.6、蜂鸣器电路设计8三、 软件设计83.1、软件规划83.2、主程序83.3、中断子程序83.4、LED显示子程序83.5、键盘子程序9四、元件清单14五、系统调试14六、小结14参考文献14附录一 程序清单15附录二 电路图23引言 自从电子表发

3、明以来,由于电子表电子表计时准确,不用每天上弦,价格便宜,很受消费者喜爱,。这次根据老师提供的微机课程设计的题目,我决定选择了电子表设计,设计中以AT89C51芯片为核心,并且选用专门驱动LED共阴极数码管的MAX7219芯片制作显示电路,通过软件设计,可以正常的完成时间的调整,闹钟的设置,整点报时以及闹铃功能, 我经过仔细分析设计题目的要求,确定了电子表的设计方案,并且用Proteus软件画出原理图,再用Keil51软件把程序调试出来,最后用Proteus软件把硬件电路和软件结合起来进行硬件和软件的整体调试。最后才把硬件和软件都调试到最佳。一、 方案的选择和比较1.1、数字时钟方案。方案一:

4、本方案采用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路的DS1302,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部还有有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软

5、件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路和实际情况的考虑,本设计采用方案二完成数字时钟的功能。1.2、数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能

6、获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。1.3、单片机型号的选择通过对多种单片机性能的分析,最终认为89C51是最理想的电子时钟开发芯片。89C51是一种带4K字节闪烁可编程

7、可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。二、硬件电路设计2.1、系统总体设计本系统利用单片机AT89C51制作简易电子表,用一个44的编码键盘作为电子表的输入设备,由MAX7219驱动六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。系统的

8、而总体框图如图1所示。2.2、振荡电路设计AT89C51芯片内部有一个高增益反相放大器,其输入端为引脚XTAL1,输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容器(电容C1和C2一般取30pF)。石英晶体振荡器为感性元器件,与电容构成振荡电路,为片内放大器提供正反馈和振荡所需的移相条件,从而构成一个稳定的自激振荡器,如图2所示。 图2、振荡电路2.3、复位电路 本次设计的复位电路为按键电平复位电路其电路如图3所示。图3、复位电路 图1、系统总体框图2.4、键盘电路设计 44键盘为矩阵键盘,采用逐行扫描查询工作方式。由于按键数量比较少(16个键),为了节省元件,降低成

9、本,和简化电路,采用非编码键盘,按键信息通过键盘子程序来获取。键盘的布局示意图如图4所示。其中09为数字键,另外6个键为功能键。 0 1 2 3 4 5 6789校时报时开关设置闹钟闹钟开关确认取消图4 键盘布局示意图按键的去抖动采用软件方式。在检测到有键按下时,执行延时子程序,再确认该键是否仍保持闭合状态。若仍然保持为闭合状态,则确认为该键闭合;若延时后,没闭合,则说明是抖动。2.5、显示电路设计由于系统需要6位显示,采用LED数码管进行显示是一种经济实用的方法。由于动态显示速度更新快,电路比较简单,成本也比较低,所以我们采用动态显示。MAX7219是一种串行接口的8位LED数码管显示驱动器

10、。它与通用微处理器只有3根串行线相连,最多可驱动8个共阴极数码管或64个发光二极管。它内部有可存储的显示信息的88静态RAM,并且动态扫描电路,以及段、位驱动器。可以节省IO口,以及可以减小编程难度。6个LED排成一行,最左一个显示时间的秒的个位。从右往左,依次是时的十位、个位,分的十位、个位,秒的十位、个位。其电路如图5所示。 图5、显示电路2.6、蜂鸣器电路设计 用Q9012晶体管进行声音放大,Q9012价格便宜,设计的电路也简单,能够节省成本。其电路如图6所示。 图6、蜂鸣器电路三、 软件设计3.1、 软件规划采用模块程序设计的思想编写软件,整个系统的软件由一个主程序和多个子程序组成,每

11、个子程序作为一个相对独立的模块,实现一个基本的功能,可以为多个程序共享。这样,便于程序的编写、调试,也容易分工完成。体现了结构化编程的优势。电子表系统的整个软件由主程序和显示子程序、键盘扫描子程序、延时子程序、蜂鸣器子程序等多个子程序组成。在程序中,6EH,6DH,6CH,6BH,6AH,69H分别存放时的十位,个位,分的十位,个位,秒的十位,个位。5BH,5AH,59H,分别存放显示的时,分,秒。58H,57H,26H分别存放闹钟设置的时间的时,分,秒。4FH存放中断计时的次数。红灯的亮灭代表闹钟的开启关闭,绿灯的亮灭代表整点报时的开启关闭。3.2、主程序主程序的功能包括对系统的初始化,定时

12、器T0装载初始值,开启定时器T0中断,调用显示子程序,然后调用键盘子程序,再判断整点报时是否开启,闹钟是否开启。如果整点报时开启,则转到相应的子程序判断它是否是整点,如果是整点,则蜂鸣器响1秒钟,否则返回到主程序如果闹钟开启,则转到相应的子程序判断它是否是到了设置的闹钟时间,如果是到了,则蜂鸣器响15秒钟,否则返回到主程序。主程序流程图如图7所示。3.3、中断子程序中断子程序的功能主要是自动计时,每50ms中断一次,中断了20次,则代表1秒钟,则59H单元内容加1,同时4FH单元内容清零,如果59H单元内容满了60,则5AH单元内容加1,同时59H单元内容清零,如果5AH单元内容满了60,则5

13、BH单元内容加1,同时59H单元内容清零,如果5BH单元内容满了24,则5BH单元内容清零,中断返回到主程序中断子程序图如图8所示。3.4、LED显示子程序LED显示采用了MAX7219驱动芯片,该芯片简单,实用。只要对MAX7219的控制寄存器进行准确地设置,把显示的的亮度设置为最亮,扫描范围设置为6个数码管,设置译码方式为BCD译码。设置MAX7219的工作方式为正常即可。再把显示时间的时的十位,个位,分的十位,个位,秒的十位,个位分别存放到MAX7219的01H、02H、03H、04H、05H、06H显示内容寄存器中,该芯片会自动扫描,显示在相应的数码管上。LED显示子程序流程图如图9所

14、示。3.5、键盘子程序键盘扫描程序的功能,首先判断键盘上有无键按下。如果有按下,则延时一段时间,再判断是否按下,再等待键释放,最后将相应的键码存放到R1存储单元中,再判断是数字键,还是功能键,如果是功能键则执行相关的功能,如是数字,看是否按了校时键或者设置闹钟键,如果按了,则要将相关数字存到相应的存储单元。否则返回到主程序该键盘采用延时的方法去除键的抖动影响,延时时间为10ms。键盘程序流程图如图10所示。图7、主程序流程图重装定时器初值循环次数加1否满20次?是秒单元加1否60s到?是秒单元清0,分单元加1否60分到?是分单元清0,时单元加1否24小时到?是时单元清0图8、中断程序流程图 图

15、9、LED显示子程序流程图 图10、键盘程序流程图四、 元件清单元件名称 数量AT89C51 1个1K电阻 3个12MHZ晶振 1个30PF电容 2个100欧电阻 1个按钮开关 17个蜂鸣器 1个Q9012晶体管 1个红色发光二极管 1个 绿色发光二极管 1个共阴极七段数码管 6个MAX7219 1个10K电阻 1个330欧电阻 1个10uF电解电容 1个五、 系统调试 我首先运用软件Keil51检查程序是否有语法错误,再生成Hex文件,装载到AT89C51芯片中,再运用Proteus软件进行硬件的调试,以及修改程序,完成相应的功能。该系统调试主要是键盘程序调试和显示程序调试,特别是显示时延时

16、间的掌握,我采取一步一步调试的方法,先调试键盘程序,再调试显示程序,最后整体调试。每次调试都会遇到很多问题,要一个一个功能键去调试,最后要每个功能键都能正常发挥功能。这次运用Proteus软件将硬件和软件结合起来一起调试,方便简单,很容易分析自己程序的故障。六、 小结 通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。损耗了过多的内存资源,但我经过我不断的优化,程序已经比先前更短一些。 通过本次设计程序,也加深了我对汇编语言的指令的理

17、解,特使跳转指令的范围要特别注意,还要注意十进制和十六进制的BCD码转换的问题。也让我深深体会到编程时一定要严谨,才能减少不必要的错误。当我们发现错误时,我们要学会分析错误的原因,不断的分析自己的程序,一定要思维严谨,可能一个小问题的忽视,就会导致程序的不成功。 通过不断的查阅相关的资料,也让我学会了读懂别人的程序,也学会了修改别人的程序,来达到为我所用的目的。经过几天的努力,最后我终于成功了,我感到非常高兴,因为我曾经想过放弃编写了,当我经过一段思想挣扎,我决定再尝试一下,不断的尝试,不断的失败,到最后才成功。也让我体会到我们不要轻易的放弃自己想做的事。参考文献【1】 严天峰单片机应用系统设

18、计与仿真调试【M】北京:北京航空航天大学出版社,2005【2】 王守中,聂元铭51单片机开发入门与典型实例(第二版)【M】北京:人民邮电出版社,2009【3】 李广弟,朱月秀,冷祖祁单片机基础(第三版)【M】北京:北京航空航天大学出版社,2007【4】 李朝青单片机原理及串行外设接口技术【M】北京:北京航空航天大学出版社,2008附录一 程序清单DIN BIT P2.0LOAD BIT P2.1CLK BIT P2.2ORG 0000HLJMP MAINORG 000BHLJMP CLOCKORG 0100HMAIN:MOV SP,#70H ;初始化MOV 6EH,#00HMOV 6DH,#0

19、0HMOV 6CH,#00HMOV 6BH,#00HMOV 6AH,#00HMOV 69H,#00HMOV 59H,#00HMOV 5AH,#00HMOV 5BH,#00HMOV 58H,#00HMOV 57H,#00HMOV 56H,#00HMOV 4FH,#00HCLR P1.1CLR P1.2MOV TMOD,#01H ;设置定时器T0的工作方式为1MOV TL0,#0B0H ;转载计数初值MOV TH0,#3CHSETB EA ;开启中断SETB ET0SETB TR0START:LCALL DISP ;调用显示程序 LCALL KEY ;调用键盘程序START1:JB P1.2,K1

20、 ;判断报时开关是否开启START2:JB P1.1,K2 ;判断闹钟开关是否开启LJMP STARTK1:LCALL BSLJMP START2K2:LCALL NZLJMP STARTKEY:MOV R4,#00H ;设置初值MOV R3,#0F7H ;扫描初值MOV R1,#00H ;键码寄存器清零L2:MOV A,R3 ;开始行扫描MOV P3,A ;将扫描值输出至P3MOV A,P3 ;读入P3值,判断是否有键被按下MOV R4,A ;存入R4,以判断是否放开SETB CMOV R5,#04H ;扫描P3.4P3.7L3:RLC A ;将按键值左移一位JNC KEY2 ;有键按下C=

21、0,跳至KEY2INC R1 ;C=1,没键按下,键码寄存器加1DJNZ R5,L3 ;4列扫描是否扫描完毕MOV A,R3 ;扫描值载入SETB CRRC A ;扫描下一行MOV R3,A ;存回扫描寄存器JC L2 ;C=1,程序转到L2处JNB P1.3,K5 ;判断是否是在设置闹钟JNB P1.4,K5 ;判断是否是在校时RETK5:LJMP KEY KEY2:LCALL DELAY1 ;调用显示子程序 D1:MOV A,P3 XRL A,R4 ;与上次读入值作比较JZ D1 ;判断键是否松开MOV A,R1 ;装载键码值CLR CSUBB A,#0AH ;判断是数字键还是功能键JNC

22、 GONGNENG RETGONGNENG:MOV A,R1 ;判断是什么功能键XRL A,#0AHJZ LOOP1MOV A,R1XRL A,#0BHJZ LOOP2MOV A,R1XRL A,#0CHJZ LOOP3MOV A,R1XRL A,#0DHJZ LOOP4MOV A,R1XRL A,#0EHJZ LOOP5MOV A,R1XRL A,#0FHJZ LOOP6LOOP1:CLR P1.4 ;校时功能键 CLR TR0 CLR ET0 LCALL HC LCALL KEYLOOP2:CPL P1.2 ;报时开关功能键LJMP STARTLOOP3:CLR P1.3 ;设置闹钟键 L

23、CALL HC LCALL KEYLOOP4:CPL P1.1 ;闹钟开关键LJMP STARTLOOP5:JNB P1.3,K3 ;确认键JNB P1.4,K4LJMP START K3:LCALL ZH2 SETB P1.3LJMP STARTK4:LCALL ZHLCALL DISPSETB P1.4SETB TR0SETB ET0LJMP STARTLOOP6:SETB P1.3 ;取消键SETB P1.4SETB TR0SETB ET0LJMP STARTDISP:LCALL LED8 ;显示子程序RETLED8:CLR LOAD ;MAX7219的控制寄存器设置MOV R0,#0F

24、H MOV R1,#0AH ;设置亮度为最亮LCALL TRT ;调用串行通信子程序LCALL T12MSMOV R0,#05H ;设置扫描范围MOV R1,#0BHLCALL TRTLCALL T12MSMOV R0,#0FFH ;设置译码方式为BCD译码MOV R1,#09HLCALL TRTLCALL T12MSMOV R0,#01H ;设置工作方式为正常MOV R1,#0CHLCALL TRTMOV A,5BH ;显示数据按BCD码分离ANL A,#0F0H SWAP AMOV R0,AMOV R1,#01HLCALL TRT ;第1位数据送出MOV A,5BHANL A,#0FHMO

25、V R0,AMOV R1,#02HLCALL TRT ;第2位数据送出MOV A,5AHANL A,#0F0HSWAP AMOV R0,AMOV R1,#03HLCALL TRT ;第3位数据送出MOV A,5AHANL A,#0FHMOV R0,AMOV R1,#04HLCALL TRT ;第4位数据送出MOV A,59HANL A,#0F0HSWAP AMOV R0,AMOV R1,#05HLCALL TRT ;第5位数据送出MOV A,59HANL A,#0FHMOV R0,AMOV R1,#06HLCALL TRT ;第6位数据送出RETTRT:CLR LOAD ;LOA信号为低NOP

26、MOV R2,#08H ;第1次传送8位数据MOV A,R1 ;地址传送T_1:CLR CLK ;CLK信号置低RLC A ;移位传送MOV DIN,CLCALL T88 ;调用指令延时子程序SETB CLKLCALL T88DJNZ R2,T_1LCALL T88MOV R2,#08H ;第2次传送8位数据MOV A,R0T2:CLR CLKT2T:LCALL T88RLC AMOV DIN,CLCALL T88SETB CLKLCALL T88DJNZ R2,T2SETB LOADCLR CLKLCALL T88RETZH:MOV R0,#6EH ;校时数据的整合子程序MOV A,R0SW

27、AP ADEC R0ORL A,R0MOV 5BH,A ;将6EH、6DH单元中的数据整合到5BH单元中MOV R0,#6CHMOV A,R0SWAP ADEC R0ORL A,R0MOV 5AH,A ;将6CH、6BH单元中的数据整合到5AH单元中MOV R0,#6AHMOV A,R0SWAP ADEC R0ORL A,R0MOV 59H,A ;将6AH、69H单元中的数据整合到59H单元中RETZH2:MOV R0,#6EH ;闹钟数据整合的子程序MOV A,R0SWAP ADEC R0ORL A,R0MOV 58H,A ;将6EH、6DH单元中的数据整合到58H单元中MOV R0,#6CHMOV A,R0SWAP ADEC R0ORL A,R0MOV 57H,A ;将6CH、6BH单元中的数据整合到57H单元中MOV R0,#6AHMOV A,R0SWAP ADEC R0ORL A,R0MOV 56H,A ;将6AH、69H单元中的数据整合到56H单元中RETHC:MOV R7,#06H ;时间数据缓存子程序 MOV R0,#6EHHC1:LCALL KEY MOV A,R1 MOV R0,A DEC R0 DJNZ R7,HC1 RETBS:MOV A,5AH ;报时子程序ADD A,59HXRL A,#00HJZ BS1RETBS1:LCALL SYLJ

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1