单片机万年历设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
万年历显示模块设计
1使用硬件和软件简介
1.1 51单片机简介
本次单片机课程设计需要使用的是上课时学习的51单片机,其是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机即是基础入门的一个单片机,还是应用最广泛的一种。
1.2 使用软件简介
本次课程设计要使用2款软件协作完成,即protues完成基本电路构造和keil完成单片机程序设计。
1.2.1 protues介绍
Protues在两次课程设计中都有用到,可见学校对其应用的总是程度。Protues软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件,几乎是目前最好的仿真单片机及外围器件的工具。虽然目前国内的推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。
在编译方面,它支持IAR、Keil和MPLAB等多种编译,这次课程设计就是Protues和Keil的协同使用来完成。软件仿真方面,支持当前的主流单片机,如51系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、68000系列等。可以提供软件调试功能,丰富的外围接口器件及其仿真( RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件)。这样很接近实际。此外还具有强大的原理图绘制功能。
1.2.2 keil介绍
这次单片机课程设计中除必要的硬件外,同样离不开软件的支持,所使用的汇编语言或C语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。掌握这一软件的使用对于使用51系列单片机的设计者来说是十分必要的,如果使用C语言编程,那么Keil几乎就是唯一的选择。即使不使用C语言而仅用汇编语言编程,Keil方便易用的集成环境、强大的软件仿真调试工具也会事半功倍。
2 设计过程
2.1 设计流程图
图2.1 设计流程图
2.2 keil编程
根据上述的电路图,可知显示部分采用8位7段数码管的分时显示,利用人眼的视觉暂留现象,在数码管上显示出连续的明显数值。
其中8位数码管的各位开关信号16进制编码如下表:
图2.2 8位数码管开关位编码
相应的2进制数输出转化位7段数码管显示十进制的编码表如下:
图2.3 7段数码管显示编码
根据以上数据和单片机的各端口功能分布,可以大略得出程序的流程图。程序开始前,可以先进行一些预处理,使编程过程简化。
2.2.1 程序预处理
首先,讲头文件中包含的单片机的各对应引脚定义为较容易书写的格式,同时定义十进制到7段数码管显示对应的8位2进制数转化的数组序列。
然后,定义全局变量(同时初始化初值),方便在各函数间调用和改变年月日时分秒的具体数值,避免使用指针带来的语言复杂性。
最后,对要用到的函数进行统一声明(也可以直接先写函数),防止编程时不合理的调用函数。
2.2.2 主函数流程
最重要的主函数流程可归纳如下:
先将2输出端置零,使得显示屏清空。后建立一永久循环H,表示程序一直运行。循环的开始再建立一设定好次数的循环J,用来做单片机分频用,其中调用键盘扫描程序,看是否有键按下,以此判定下一步动作。由于日历的要求控制键不多,课程设计的要求为可切换显示,故最少应有2个控制键来切换日期和时间的显示。
若按下的为显示日期/时间,则对日期/时间相关数据进行处理,由其中一个输出端输出,由另一输出端控制显示在8位数码管的哪一位上,后延时实现一段时间。最后再次执行键盘扫描函数,看指令是否变化。
固定循环J结束,判断是否按下其他操作键,对时间日期的数据进行人为修改;若无则向下执行,进行时间/日期的溢出判断和正常增加计数。
最后运行至无限循环H底部,再跳至开头进行上述步骤。
3.2.3 相关子函数
键盘检测程序:由于操作键较少,所以不必使用多重键盘,只需使用单片机一个端口就可以有8个按键供使用。检测哪个端口有电位变化,就可判断按下的是哪个按键。
延时函数:就一设定好次数的循环,用以消耗指令周期,循环中可以为空语句,或者为检测、显示语句以确定按键、固定示数。
2.2.4 程序总流程图
根据上述文字表达,可以得出程序总流程图如下:
图2.4 程序总流程图
根据课程设计的要求和设计流程,结合设计出的电路图,可以设计相应的C语言程序,见附录。
2.3 protues设计电路图及仿真
根据所编的程序,可以设计出相应的电路图。
显示部分采用8位7段数码管,虽然年月日/时分秒只用带6位左右,但是为了分隔便于观察,所以增加2位空格显示。
其中将P1口做输入端,用来和8个接地按键相连,构成键盘电路。P2口做输出口,用来输出时间日期的8位2进制数表达。P0口做控制端,控制P2输出的信号显示在具体哪个数码管上。
此外,需要提供相应的外部时钟输入XLAT1和XLAT2,再对RET和EA端口赋予相应的电位,使得单片机能够正常工作。