第一章 引言
随着我们的生活和科技的不断进步,单片机越来越广泛的应用到了各种行业和生活中。人们已经不仅仅满足于利用单片机实现单一的简单功能,而是希望能够出现功能强大全面的单片机系统。而在众多的单片机及其系统中,最小系统以其简洁的结构,多样的外部扩展接口,较低的配置要求,成为应用最为广泛的系统。
最小应用系统的硬件一般包括单片机、输入输出接口电路、输入设备(按键)、输出设备(数码管)以及常规芯片如译码器、驱动器、地址锁存器等部分。基于51单片机的代表性和应用广泛性,本次设计的系统选用51系列单片机作为主要芯片,采用ATC51、LED 数码管、 按键、二极管等部分构成,能实现时钟日历的功能,能进行时、分、秒的显示,也具有日历计算、 显示和时钟,日历的校准、定时时间的设定,实现三路开关定时输出等功能。
功能比较全面的单片机以其较低的成本,简单的操作,较强的实用性和浓缩性博得越来越多市场的青睐。尤其是功能全面的数字时钟,更是广泛应用于我们的生活中。随着单片机越来越多的应用到了人们的工作和生活中,多功能的单片机系统的应用前景也必将越来越广阔。
1
山东工商学院2007届毕业论文
第二章 8051单片机基础介绍
8051单片机自1977年问世以来,一直深受人们的欢迎,它是少数生命周期较长的CPU架构之一。目前全世界的半导体供应商一直在开发非常先进的基于8051内核的单片机。由于它不断提高的性能、更大的存储空间、增强的I/O端口、丰富的开发工具以及大量的可用代码,因此设计师们到现在还热衷于这个“古老”的单片机架构,并不断地在新的设计中应用它。“很多工程师是伴随着8051成长的,因此他们乐于使用基于8051内核的现代单片机,” R2 Controls公司的总裁Tim Hinchey指出,“他们了解8051单片机的体系结构,热衷于许多新的模拟I/O功能。8051单片机提供的良好架构使得它广泛应用于工商业的各种产品中。”
在英特尔早期的8051单片机中,每条指令需要12个时钟周期,现在已缩短至1到2个时钟周期,最新的8051单片机时钟频率很高,运行指令的速度可达100 MIPS。在不断追求更高性能的同时,芯片生产商们继续保留了原先8051的指令集、寄存器、标志位和其它CPU特性,沿用哈佛CPU体系结构,将指令和数据分别放在不同的存储区。8051系列向下兼容,以前的8051代码在最新的产品中可以更好更快地运行。
早期的8051芯片提供了128字节的RAM和4k字节的ROM,分别用于存储临时数据和指令(使用I/O端口可将外部存储器扩展到K字节)。现在,生产商们大大提升了单片机的性能,可以用来处理更大量的数据和指令,而且使用闪存技术可以更方便地加载应用程序代码。
适用于任何人:8051单片机的成功源于模拟电路的多样性,现在生产商们已经把各种各样的模拟电路集成到了单片机上。“有些工程师认为8051用途不大,但是,当他们看到增强型的8051单片机所具有的模拟和数字性能时,他们改变了自己的看法,” Goal Semiconductor公司的CEO Irv Lustigman指出,“我们最新的8051单片机将包括高压开漏FET和带高压输出的DAC,使得单片机成为一个高电压组件的智能控制器。”例如,这种FET能直接控制发动机,而高压DAC则能操作伺服电动机和存储设备。
2
山东工商学院2007届毕业论文
第三章 系统介绍
3.1最小应用系统的组成和工作原理
设计的最小应用系统的硬件包括单片机、输入输出接口电路、输入设备
(按键)、输出设备(数码管)以及常规芯片如译码器、驱动器、地址锁存器等部分。最小系统的主机采用C51单片机,地址锁存器选用CD4511的BCD锁存, 译码器选用CD4511的七段译码,数码显示电路选用共阴极数码管。
3.1.1 ATC51单片机
最小系统的核心是ATC51单片机,其内部带有4KB的FLASH ROM,128B片内RAM,基本上能满足最小系统的设计要求。如接上时钟电路、复位电路即可加电工作。如图1所示。
ATC51单片机各引脚的功能介绍如下: 1) P0口
P0口作为扩展外部存储器和I/O接口的数据总线和低八位地址总线。由于数据和地址是分时地复用P0口,所以在P0口接2片CD4511锁存器,用来锁存P0口输出的低八位地址信号,这样就把数据和地址分开了。CD4511的输出就是低八位地址码A0~A7 2) P1口
P1口作为通用I/O口使用。P1.0~P1.2作按键的输入口线。 3) P2口
P2口作为扩充外部存储器和I/O接口的高八位地址线。P2 口的P2.0至P2.2分别通过电阻R10至R13与VT1至VT3 的基极相连接。 4) P3口
3
山东工商学院2007届毕业论文
P3口线既可作一般的I/O口使用,又可定义为第二功能,本应用系统中将P3.6、P3.7口线作外部设备的读写选通信号线,其余口线留作二次开发时使用。 5) 控制线
RESET——复位信号输入端。采用上电自动复位和按钮手动复位相结合的电路。 ALE——地址锁存允许信号输出端。 EA——内部和外部程序存储器选择线。由于C51单片机内部带有8KB的FLASH ROM,因此EA端接+5V。 VCCR1510U1C122uFRESETP10P11P12P13P14P15P16P17RSTP30P31P32P33P34P35WRRD12345671011121314151617181920P10P11P12P13P14P15P16P17RST/VPDRXD/P30TXD/P31INT0/P32INT1/P33T0/P34T1/P35WR/P36RD/P37XTAL2XTAL1VSSVCCP00P01P02P03P04P05P06P07EA/VPPALE/PROGPSENP27P26P25P24P23P22P21P204039383736353433323130292827262524232221VCCP00P01P02P03P04P05P06P07ALEPSENP27P26P25P24P23P22P21P20R24KXTAL1C2C3 图1 4山东工商学院2007届毕业论文
3.1.2 CD4511
CD4511既有BCD锁存,还有7段译码及驱动器功能
其多用于驱动共阴极LED数码管显示(有时也用做 3-8线译码,类似74LS138 )
CD4511引脚图:
5
山东工商学院2007届毕业论文
3.2电路原理分析
3.2.1. 显示原理
电路原理图见图2。由6个共阴极的数码管组成时、分、秒的显示。P0 口的数据线P0.0 至P0.7 分别与两个CD4511译码的ABCD 口相接,P2 口的P2.0至P2.2分别通过电阻R10至R13与VT1至VT3 的基极相连接。这样通过P0 口送出一个存储单元的高位、低位BCD显示代码,通过P2 口送出扫描选通代码轮流点亮LED1 至LED6,就会将要显示的数据在数码管中显示出来。从P0 口输出的代码是BCD 码,从P2 口输出的就是位选码。这是扫描显示原理。
图2
6
山东工商学院2007届毕业论文
3.2.2. 数码管结构及代码显示
在单片机系统中,通常用LED数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
LED显示器又称数码管,八段LED显示器由8个发光二极管组成。其中7个发光二极管构成字型“8”的各个笔画段,另一个小数点为dp发光二极管。LED显示器有两种不同的形式:一种是发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是发光二极管的阴极都连在一起的,称之为共阴极LED显示器。如图3所示。
图3
共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示各种字符。8个笔划段hgfedcba对应于一个字节(8位)的D7 D6 D5 D4 D3 D2 D1 D0,于是用8位二进制码就可以表示欲显示字符的字型代码。
在本次设计中,采用共阴极LED显示器。
7
山东工商学院2007届毕业论文
共阴LED 数码管结构、字段及引脚排列见图4 图4
共阴LED 数码管由8只发光二极管VD1至VD8共阴连接并按! 8! 字形结构排列而成。这样,我们将这些二极管的正极接高低不同的电位,把所有的负极接地,当正极为高电位时相应的二极管就会导通而发光,从而使数码管呈现不同的字符。而只有P2相应呈现高电位, VT 个管导通,LED1 的GND 与地相接,LED位被选中才具备发光的使能条件;可见,在利用P2 口送出位选码,使各位轮流得到发光使能条件的同时,通过P0 口分别送出不同的段选码,就会在LED1至LED4 中显示出不同的数字来。
3.2.3 键盘及读数原理
键盘是人与微机打交道的主要设备,键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。
组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。下图中,当开关S未被按下时,KEY输入为高电平,S闭合后,KEY输入为低电平。由于按键是机械触点,当机械触点断开、闭合时会有抖动,KEY输入端的波形如下图所示。这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全可以感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。
图9
图10
由于按键的读取容易引起误动作。在本次设计中,采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,。软件法其实很简单,就是在单片机获得KEY为低信息后,不是立即认定键已被按下,而是延时10毫秒或更长一些时间后再次检测该
8
山东工商学院2007届毕业论文
口线,如果仍为低,说明键的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(KEY为高)再延时,消除后沿的抖动,然后再对键值处理。在本次实验中采用的延时时间为20ms。
3.2.4 连击功能的实现
按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。利用连击功能,能实现快速调时操作。
3.2.5 调试中出现的问题及解决办法
用CD4511驱动LED数码管显示数字时,发现字形69分别显示为“Ьq”,
较之常见的“69”字形有差异。为了使CD4511显示的字形与常见的一致,可以将CD4511换成CD4543,但比较麻烦。经查阅相关资料,发现了一种行之有效的简便易行的方法。
研究CD4511 BCD码的输入端A、B、C、D与输出字形笔段a、b、c、d、e、f、g的关系,可以发现,当输入B端为高电平时,对应显示的数字2、3、6、7除6外均有a段输出,因此,只要从B端取出高电平信号再补上6的a段输出即可;当D端为高电平时,只有8、9两个数字,但d段在显示9时却不输出高电平,也需补上。要补上这两个笔段的输出,仅需两只简单的二极管门电路即可实现。如图1、2所示。二极管可用1N4148、2CK等。同时,a、d笔段对应限流电阻应适当减小,使各段通过的电流一致。当然,如要求不高,电阻也可不动。做法是,找到CD4511的{10}脚,切断通向该脚限流电阻的铜箔,串入一只二极管,再从{6}脚接一只二极管到该电阻,对{13}脚也重复上述步骤,改进工作就完成了。
如果A,B,C,D端输出驱动电流不够,可改用三极管构成射随器,电路如图2所示,其中三极管可用任何型号的硅NPN小功率管。如果电源电压超出三极管的发射结击穿电压,则两只三极管发射极均应串入隔离二极管。
9
山东工商学院2007届毕业论文
经过改进的实验电路,经过测试后发现,显示的情况得到很大的改善。
3.2.6 系统使用说明
系统由ATC51、LED 数码管、按键、发光二极管等部分构成,能实现时间的调整、定时时间的设定,输出等功能。系统的功能选择由SB0、SB1、SB2、SB3、SB4 完成。其中SB0为时间校对,定时器调整功能键,按SB 0进入调整状态。SB1为功能切换键。第一轮按动SB1依次进入一路、二路、三路定时时间设置提示程序,按SB3进入各路定时调整状态。定时时间到,二极管发亮。到了关断时间后灭掉。如果不进入继续按SB1键,依次进入时间 ! 年! 位校对、! 月! 位校对、! 日! 位校对、! 时! 位校对、! 分! 位校对、! 秒! 位 校对状态。不管是进入那种状态,按动SB2 皆可以使被调整位进行不进位增量加1变化。各预置量设置完成后,系统将所有的设置存入RAM 中,按SB1退出调整状态。上电后,系统自动进入计时状态,起始于! 00! 时! 00! 分。SB4为年月日显示转换键,可使原来显示时分秒转换显示年月日。
10
山东工商学院2007届毕业论文
第四章 程序设计思想和相关指令介绍
本系统的主程序主要完成时间显示和定时输出判断功能。而年月日显示和各时间单元进位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。
4.1 数据与代码转换
由前述可知,从P2 口输出位选码,从P0 口输出段选码,LED 就会显示出数字来。但P0 口的输出的数据是要BCD 码,各存储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。可见,将要显示的存储单元的数据直接送到P0 口去驱动LED 数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD码行转换后,将各个单元数据的段选代码送入P0 口,给CD4511译码后去驱动数码管显示。
具体转换过程如下:
我们先将要显示的数据装入累加器A 中,再将A 中的数据转换成高低两位的BCD 码,再放回A 中,然后将A 中的值输出。如:有一个单元存储了45这样一位数,则需转换成四位的BCD 码:(0100)(0101)然后放入A 中。A 中BCD 码,高位四位代表!4!低四位代表!5!同时送给两个译码器中,译码后! 45! 字就在两个LED 中显示出来。
4.2 计时功能的实现与中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0打开后,进入计时,满100毫秒后,重装定时。中断一次,满一秒后秒进位,满60秒后即为1分钟, 分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。这样然后根据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED 中显示出来,实现时钟计时功能。累加是用指令INC 来实现的。进入中断服务程序以后,执行PUSH PSW 和PUSH A 将
11
山东工商学院2007届毕业论文
程序状态寄存器PSW 的内容和累加器A 中的数据保存起来,这便是所谓的! 保护现场! . 以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片内RAM 中的任一区间设定,而堆栈的数据存取与一般的RAM 存取又有区别,对它的操作,要遵循! 后进先出! 的原则。
4.3 时钟误差分析
开启定时器/计数器0,使之开始计时,中断后进入中断程序。自停止计数到、计数又开始,中间执行了7条指令,也就是延迟了13个单周期共用时间26us,这样,每个中断的总时间应为为100.026sm,而原来定时是100ms,,所以,也就是说每次中断定时多了26um.这样,可改变计数重装值,使每次中断定时时间为99.974sm,加上原来的7条指令所用的时间,正好100sm.计数10次得1s.这样就可得到较精确的计时秒数,然后根据进率,得到时、分的值。
4.4 时间控制功能与比较指令
系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先将执行设备开启的时间和关闭时间置入RAM 某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条CLR 指令,将对应的那路P3置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB对应的P3置低电位,二极管截止,。实现此控制功能用到的比较指令为CJNE A,#direct, rel,其转移条件是累加器A 中的值与立即数不等则转移。
12
山东工商学院2007届毕业论文
第五章 程序各部分流程图介绍
5.1 主流程图
以上为主流程图
13
山东工商学院2007届毕业论文
5.2 定时中断程序流程图
14
山东工商学院2007届毕业论文
5.3 调时功能流程图
15
山东工商学院2007届毕业论文
5.4 调时功能流程图存贮单元分配表
16
山东工商学院2007届毕业论文
结论
由于单片机在生活中的应用日趋广泛,越来越多的产品采用单片机制作,而51单片机又是其中应用最为广泛和实用的一种。利用51单片机最小系统制作数字时钟,可以方便精确的实现显示时间,调整时间,显示日历等多种功能,且使用寿命长,不易损坏。可以看出,基于单片机系统的实物制作,会越来越多的被应用于实际生活中,成为今后设计的主流。
在刚开始有设计构想的时候,我看到别人设计的数字时钟设计精细,还可以有很多除显示时间外的功能,总希望自己设计出的时钟也能尽可能多的实现一些附加功能,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,往往几天的时间还没有一点进展。但是,经过一段时间的学习,我发现制作一个功能完善的数字时钟决不是一蹴而就的事情,需要长时间的积累和经验,而这些又是我的弱项,因此,在老师的帮助下,我终于认清自己的不足及劣势,不要贪图大而全,只要尽我所能,制作一个实用简单的数字时钟也是件很不容易的事情。
由于我的知识浅薄,经验不足及阅历颇浅,因此,在该系统的设计方面还有很多不足,比如功能较少,细节处不够精细等问题,我会在今后使用过程中,根据具体要求不断的修改,完善,争取使该系统慢慢趋向完美。
17
山东工商学院2007届毕业论文
致 谢 语
在毕业设计中,我从指导教师魏书田教授身上学到了很多东西。
他认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是实践中,都给与我很大的帮助,使我得到了很大的提高,这对于我的以后工作和学习都有一种巨大的帮助,在此感谢他的耐心的辅导。另外,在系统制作过程中还得到了很多同学的帮助,这里一并表示感谢。
[参考文献]
[1] 谢自美.《电子线路设计、实验、测试 》[M] .武汉:华中理工大学出版社,2000 [2] 何书森、何华斌.《实用数字电路原理与设计速成》[M].福州:福建科学技术出版社,2000
[3] 白驹衍. 《单片计算机及应用》[M].北京:电子工业出版社, 1999 [4] 周兴华. 《手把手教你学单片机》[M].北京:航空航天大学出版社, 2005 [5] 竞赛评审委员会. 《2006年上海市嵌入式系统创新设计应用竞赛获奖作品论文集》[C].北京:航空航天大学出版社, 1999. P122-125.
[6] 何立民. 《单片机与嵌入式系统应用》[M].北京:航空航天大学出版社, 2006 [7] 胡辉. 《单片机应用系统设计与训练》[M].北京:航空航天大学出版社, 2004 [8] 何立民. 《单片机高级教程——应用与设计(第2版)》[M].北京:航空航天大学出版社, 2006
[9] 李广弟 冷祖祁 康宁. 《单片机基础(第3版)》[M].北京:航空航天大学出版社, 1999
[10] 黄智伟. 《凌阳单片机课程设计指导》[M].北京:航空航天大学出版社, 2004 [11] 王丰 栾学德. 《单片机原理与应用技术》[M].北京:航空航天大学出版社, 2006 [12] 楼然苗. 《单片机课程设计指导》[M].北京:航空航天大学出版社, 2005
18
山东工商学院2007届毕业论文
附录
程序
SEC EQU 32H ;秒 即时时间\\伪指令 MIN EQU 31H ;分 HOUR EQU 30H ;时 DAY EQU 35H ;日 MON EQU 34H ;月 YEAR EQU 33H ;年
MIN_1 EQU 41H ; 分 定时器1路、开存储单元 HOUR_1 EQU 42H ;时 DAY_1 EQU 43H ; MON_1 EQU 44H ; YEAR_1 EQU 45H ;
MIN_11 EQU 40H ;分 定时器1路、关存储单元 HOUR_11 EQU 46H ;时 DAY_11 EQU 47H ;日 MON_11 EQU 48H ;月 YEAR_11 EQU 49H ;年 ;***********************
ORG 0000H
LJMP MAIN ORG 0003H ; LJMP SHOW
ORG 000BH ;计数中断T0、方式1 LJMP TIME ORG 0013H LJMP CHANGE; ;------主程序
ORG 0030H
MAIN:
;--------初始化赋值
MOV YEAR , #02 MOV MON , #05 MOV DAY , #01 MOV HOUR , #00 MOV MIN , #00 MOV SEC , #00
CLR 40H ;定时单元1路清零
CLR 41H CLR 42H CLR 43H CLR 44H
19
山东工商学院2007届毕业论文
CLR 45H CLR 46H CLR 47H CLR 48H CLR 49H ; -------开中断
MOV TMOD , #01H ;计数、模式1、T0 MOV TL0, #0B0H ;100SM 计数定时 MOV TH0, #3CH ; CLR P3.0
MOV 20H, #0AH ;10 次*100SM SETB PT0 ;T0 为最高级 SETB TR0 ;允许计数 SETB ET0 ;允许T0 中断 SETB EX0 ;允许INT0 中断 SETB EX1 ;允许INT1中断 SETB EA ;开总中断 ;------显示、定时器启动判断 LOOP: MOV R1, #30H; 存储单元 MOV R4, #01H; 位选通 MOV R3, #03H; 三组显示 NEXT:
MOV A , @R1 ;
MOV B , #10 ;将存储单元转换成两高低两组的BCD 码 DIV AB SWAP A ORL A, B
MOV P0, A;输出 MOV P2, R4
INC R1 ;下一单元 MOV A, R4 ; RL A ;位移 MOV R4, A
LCALL DE5SM ;延时0.5SM
DJNZ R3, NEXT ;全扫描显示一偏 ;------判断定时输出(只编写了一路)
CJNE R7, #88H,LOOP ;是8 则开,否则、定时已关、转开 MOV A, YEAR
CJNE A, YEAR_1, LOOP_1;年比较,不等转关 MOV A, MON
CJNE A, MON_1, LOOP_1 MOV A, DAY
CJNE A , DAY_1,LOOP_1 MOV A, HOUR
20
山东工商学院2007届毕业论文
CJNE A, HOUR_1,LOOP_1 MOV A, MIN
CJNE A, MIN_1, LOOP_1
CPL P3.0
;---------关
LOOP_1: MOV A, YEAR
CJNE A, YEAR_11, LOOP;年比较 MOV A, MON
CJNE A, MON_11, LOOP MOV A, DAY
CJNE A , DAY_11,LOOP MOV A, HOUR CJNE A, HOUR_11,LOOP MOV A, MIN
CJNE A, MIN_11, LOOP CPL P3.0
LJMP LOOP ;-----年月日显示中断子程序 SHOW: PUSH PSW PUSH ACC PUSH B PUSH 01H PUSH 02H PUSH 03H PUSH 04H
MOV R2, #0FFH ;中断扫描次数 TURN: MOV R1 , #33H MOV R4 , #01H MOV R3 , #03H NEXT_1: MOV A, @R1 MOV B , #10 DIV AB SWAP A ORL A, B MOV P0, A MOV P2, R4 INC R1 RL A MOV R4,A LCALL DE5SM
DJNZ R3, NEXT_1
DJNZ R2, TURN ;反复显示一定时间后返回 POP 04H POP 03H POP 02H
21
山东工商学院2007届毕业论文
POP 01H POP B POP ACC POP PSW
RET I ;-----计数中断服务子程序 TIME: PUSH PSW PUSH ACC PUSH B PUSH 06H
MOV TH0 , #3CH;重装计数 MOV TL0 , #0BH;
DJNZ 20H, OUT ;转到中断跳出POP程序 MOV 20H, #0AH ; 重装:100*10=1000 ;-----进位程序 INC SEC MOV R6, SEC ;
CJNE R6, #60, OUT;比较 MOV SEC , #00 ; INC MIN MOV R6, MIN
CJNE R6, #60, OUT MOV MIN , #00 INC HOUR MOV R6 , HOUR CJNE R6 , #25 , OUT MOV HOUR ,#00 INC DAY MOV R5, MON
CJNE R5, #1, MON_22;是否1月、不是转2 月 MOV R5, DAY
CJNE R5, #32, OUT ; 本月是否溢出 INC MON MOV DAY,#1 LJMP OUT OUT: POP 06H POP B POP ACC POP PSW RET I
MON_22: MOV R5, MON
CJNE R5 , #2 , MON_33;是否2 月、不是转3 月 MOV A, YEAR ;判断是否瑞年 MOV B, #4 DIV AB
22
山东工商学院2007届毕业论文
MOV A , B
JNZ OUT_1;不是则转 (A 不为零则转) MOV R5 ,DAY
CJNE R5,#30, OUT;如是瑞年、判断是否到29天 INC MON MOV DAY ,#1 LJMP OUT OUT_1: MOV R5, DAY
CJNE R5, #29, OUT ;平年二月判断 INC MOV LJMP MON_33: MOV CJNE MOV CJNE INC MOV LJMP MON_44: MOV CJNE MOV CJNE INC MOV LJMP MON_55: MOV CJNE MOV CJNE INC MOV LJMP MON_66: MOV CJNE MOV CJNE INC MOV LJMP MON_77: MOV CJNE MOV CJNE 23
MON
DAY , #1 OUT R5, MON
R5, #3 , MON_44 R5, DAY
R5 , #32, OUT MON
DAY , #1 OUT R5, MON
R5,#4, MON_55 R5, DAY R5 ,#31,OUT MON DAY , #1 OUT R5,MON
R5,#5, MON_66 R5,DAY
R5,#32,OUT MON DAY,#1 OUT
R5, MON
R5,#6, MON_77 R5, DAY R5 ,#31,OUT MON DAY , #1 OUT
R5, MON
R5,#7, MON_88 R5, DAY R5,#32,L1
山东工商学院2007届毕业论文
INC MON MOV DAY , #1 L1: LJMP OUT
MON_88: MOV R5, MON
CJNE R5,#8, MON_99 MOV R5, DAY CJNE R5 ,#32,L2 INC MON MOV DAY , #1 L2: LJMP MON_99: MOV CJNE MOV CJNE INC MOV L3: LJMP MON_00: MOV CJNE MOV CJNE INC MOV L4: LJMP MON_AA: MOV R5, CJNE MOV CJNE INC MOV L5: LJMP MON_BB: MOV CJNE INC MOV MOV L6: LJMP OUT ;----- CHANGE : PUSH PSW PUSH PUSH PUSH MOV SHOW_1: MOV MOV 24
OUT R5, MON
R5,#9, MON_00 R5,DAY R5 ,#31,L3 MON DAY , #1 OUT R5, MON
R5,#10, MON_AA R5, DAY R5 ,#32,L4 MON DAY , #1 OUT MON
R5,#11, MON_BB R5,DAY R5,#31,L5 MON DAY , #1 OUT R5, DAY R5 ,#32,L6 YEAR MON, #1 DAY , #1
校对时间、定时调整中断 ACC B 00H P2,#00H
A , #01H;显示1 P0, A
山东工商学院2007届毕业论文
MOV P2, #0FFH;三组数码管都显示1路 LCALL READ ;调用读P1 口键程序 CJNE A, 01H, SHOW_1;去抖后比较 LCALL DE250SM ; 延时250秒 CJNE A, #0FBH, T1 LJMP SB3_1
T1: CJNE A, #0FEH,SHOW_1
AJMP SHOW_2 ;-------二组显示 SHOW_2: MOV A, #02H; 显示2 MOV P0, A
MOV P2, #0FFH; LCALL READ
CJNE A, 01H, SHOW_2 ;去抖后比较 LCALL DE250SM; 延时250秒
CJNE A, #0FBH,T2;不等转去判断此时SB3按了没 LJMP SB3_2
T2: CJNE A, #0FEH, SHOW_2
AJMP SHOW_3
------三组显示
SHOW_3: MOV A, #03H; 显示3 MOV P0, A
MOV P2, #0FFH;位码 LCALL READ
CJNE A, 01H,SHOW_3;去抖后比较 LCALL DE250SM;延时250秒
CJNE A, #0FBH, T3;不等转去判断此时SB3按了没 LJMP SB3_3
T3: CJNE A, #0FEH, SHOW_3 AJMP SHOW_4;
------即时年单元调时、显示
SHOW_4: MOV A , YEAR ;调出年单元 MOV B, #10 ;BCD 转换 DIV AB SWAP A ORL A, B
MOV P0, A ; MOV P2, #01H; LCALL READ LCALL DE250SM
CJNE A, 01H, SHOW_4 ;去抖 CJNE A, #0FEH, KEY2_1 ;按SB2 转年调整 AJMP MON_CH ;按SB1往下调月单元 KEY2_1: CJNE A, #0FDH, SHOW_4 LCALL YEAR_AD ; 调用年调整
25
山东工商学院2007届毕业论文
AJMP SHOW_4 ;
MON_CH: MOV A , MON ; 月单元调整
MOV B, #10 DIV AB SWAP A ORL A, B
MOV P0, A ; MOV P2, #02H; LCALL READ LCALL DE250SM
CJNE A, 01H, MON_CH ;去抖 CJNE A, #0FEH, KEY2_2 ;按SB2 转月调整 LJMP DAY_CH ;按SB1往下调日单元 KEY2_2: CJNE A, #0FDH, MON_CH LCALL MON_AD ; 调用月调整 LJMP MON_CH ;
DAY_CH: MOV A , DAY ; 日单元调整 MOV B, #10 DIV AB SWAP A ORL A, B
MOV P0, A ; MOV P2, #04H; LCALL READ LCALL DE250SM
CJNE A, 01H, DAY_CH ;去抖
CJNE A, #0FEH, KEY2_3 ;按SB2 转日调整 LJMP HOUR_CH ;按SB1往下调时单元 KEY2_3: CJNE A, #0FDH, DAY_CH
LCALL DAY_AD ; 调用日调整 LJMP DAY_CH HOUR_CH: MOV A , HOUR ; 时单元调整 MOV B, #10 DIV AB SWAP A ORL A, B
MOV P0, A ; MOV P2, #01H; LCALL READ LCALL DE250SM CJNE A, 01H, HOUR_CH ;去抖
CJNE A, #0FEH, KEY2_4 ;按SB2 转时调整 AJMP MIN_CH ;按SB1往下调分单元 KEY2_4: CJNE A, #0FDH, HOUR_CH
26
山东工商学院2007届毕业论文
LCALL HOUR_AD ; 调用时调整 AJMP HOUR_CH ;
MIN_CH: MOV A , MIN ; 分单元调整 MOV B, #10 DIV AB SWAP A ORL A, B
MOV P0, A ; MOV P2, #02H; LCALL READ LCALL DE250SM
CJNE A, 01H, MIN_CH ;去抖
CJNE A, #0FEH, KEY2_5 ;按SB2 转分调整 AJMP SEC_CH ;按SB1往下调秒单元 KEY2_5: CJNE A, #0FDH,MIN_CH
LCALL MIN_AD ; 调用分调整 LJMP MIN_CH ;
SEC_CH: MOV A , SEC ; 秒单元调整 MOV B, #10 DIV AB SWAP A ORL A, B
MOV P0, A ; MOV P2, #04H; LCALL READ LCALL DE250SM
CJNE A, 01H, SEC_CH ;去抖 CJNE A, #0FEH, KEY2_6 ;按SB2 秒调整 LJMP OUT_A ;按SB1跳出 KEY2_6: CJNE A, #0FDH, SEC_CH CLR SEC ; 归零 LJMP SEC_CH ;
-------按SB2\\定时器年单元加1子程序
SB3_2: LJMP SHOW_2 ;二路没编返回 SB3_3: LJMP SHOW_3 ;三路没编返回 SB3_1: MOV A , YEAR_1 ; 调时年单元 MOV B ,#10 DIV AB SWAP A ORL A,B MOV P0, A
MOV P2, #01H LCALL READ LCALL DE250SM
27
山东工商学院2007届毕业论文
CJNE A, 01H, SB3_1 CJNE A, #0FBH, KEY2_7 ;按SB2 转年调整 LJMP MON_111 ;按SB1往下调月单元 KEY2_7: CJNE A, #0FDH, SB3_1
INC YEAR_1 ; 1路年单元加1 MOV R5,YEAR_1
CJNE R5,#09,SB3_1 ;溢出 MOV YEAR_1, #00H AJMP SB3_1 ; ;-------月单元加1子程序
MON_111: MOV A , MON_1 ; 调时月单元显示 MOV B ,#10 DIV AB SWAP A ORL A,B MOV P0, A MOV P2, #02H LCALL READ LCALL DE250SM
CJNE A, 01H, MON_111 CJNE A, #0FBH, KEY2_8 ;按SB2 转月调整 LJMP DAY_111 KEY2_8: CJNE A,#0FDH,MON_111
INC MON_1 ;1路月单元加1 MOV R5,MON_1
CJNE R5,#13,MON_111;溢出 MOV MON_1, #01H
AJMP MON_111 ; 转到月显 ------日单元加1子程序
DAY_111: MOV A , DAY_1 ; 调时日单元显示提示 MOV B ,#10 DIV AB SWAP A ORL A,B
MOV P0, A MOV P2, #04H LCALL READ LCALL DE250SM
CJNE A, 01H,DAY_111
CJNE A, #0FBH, KEY2_9 ;按SB2 转日调整 LJMP HOUR_111
KEY2_9: CJNE A,#0FDH,DAY_111
INC DAY_1 ;1组日单元加1 MOV R5, DAY_1
28
山东工商学院2007届毕业论文
CJNE R5,#32,DAY_111;溢出 MOV DAY_1, #01H
AJMP DAY_111 ; 转到日显 ;-------按SB2 时单元加1子程序 HOUR_111: MOV A , HOUR_1 ; 调时时单元显示提示 MOV B ,#10 DIV AB SWAP A ORL A,B MOV P0, A MOV P2, #01H LCALL READ LCALL DE250SM CJNE A, 01H,HOUR_111
CJNE A, #0FBH, KEY2_10 ; 按SB2 转时调整 LJMP MIN_111
KEY2_10: CJNE A,#0FDH,HOUR_111 INC HOUR_1 MOV R5,HOUR_1
CJNE R5,#24,HOUR_111;溢出 MOV HOUR_1, #00H AJMP HOUR_111 ; 转到时显 ;-------分单元加1子程序
MIN_111: MOV A , MIN_1 ; 调时分单元、并显示提示 MOV B ,#10 DIV AB SWAP A ORL A,B MOV P0, A MOV P2, #02H LCALL READ LCALL DE250SM
CJNE A, 01H,MIN_111
CJNE A, #0FBH, KEY2_11 ;按SB2 转分调整 AJMP OFF_CH ;按SB3往下调定时:关单元 KEY2_11: CJNE A, #0FDH, MIN_111
INC MIN_1 ;1路分单元加1 MOV R5, MIN_1
CJNE R5,#60,MIN_111;溢出 MOV MIN_1, #00H
AJMP MIN_111 ; 转到分显年单元调整 OFF_CH: MOV A , YEAR_11 ; 调时年单元 MOV B ,#10 DIV AB
29
山东工商学院2007届毕业论文
SWAP A ORL A,B MOV P0, A MOV P2, #01H LCALL READ LCALL DE250SM CJNE A, 01H, OFF_CH
CJNE A, #0FBH, KEY2_F7 ;按SB2 转年调整 LJMP MON_OFF ;按SB1往下调月单元 KEY2_F7: CJNE A, #0FDH, OFF_CH
INC YEAR_11 ; 1路年单元加1
MOV R5,YEAR_11
CJNE R5,#09,OFF_CH ;溢出 MOV YEAR_11, #00H AJMP OFF_CH ; ;-------月单元加1子程序
MON_OFF: MOV A , MON_11 ; 调时月单元显示 MOV B ,#10 DIV AB SWAP A ORL A,B MOV P0, A MOV P2, #02H LCALL READ LCALL DE250SM
CJNE A, 01H, MON_OFF
CJNE A, #0FBH, KEY2_F8 ;按SB2 转月调整 LJMP DAY_OFF
KEY2_F8: CJNE A,#0FDH,MON_OFF
INC MON_11 ;1路月单元加1 MOV R5,MON_11
CJNE R5,#13,MON_OFF;溢出 MOV MON_11, #01H
AJMP MON_OFF ; 转到月显 ;_------日单元加1子程序
DAY_OFF: MOV A , DAY_11 ; 调时日单元显示提示 MOV B ,#10 DIV AB SWAP A ORL A,B MOV P0, A MOV P2, #04H LCALL READ LCALL DE250SM
30
山东工商学院2007届毕业论文
CJNE A, 01H,DAY_OFF
CJNE A, #0FBH, KEY2_F9 ;按SB2 转日调整 LJMP HOUR_OFF KEY2_F9: CJNE A,#0FDH,DAY_OFF
INC DAY_11 ;1组日单元加1 MOV R5, DAY_11
CJNE R5,#32,DAY_OFF;溢出 MOV DAY_11, #01H
AJMP DAY_OFF ; 转到日显 ;-------按SB2 时单元加1子程序 HOUR_OFF: MOV A , HOUR_11 ; 调时时单元显示提示 MOV B ,#10 DIV AB SWAP A ORL A,B MOV P0, A MOV P2, #01H LCALL READ LCALL DE250SM CJNE A, 01H,HOUR_OFF
CJNE A, #0FBH, KEY2_F10 ; 按SB2 转时调整 LJMP MIN_OFF
KEY2_F10: CJNE A,#0FDH,HOUR_OFF INC HOUR_11 MOV R5,HOUR_11
CJNE R5,#24,HOUR_OFF;益出 MOV HOUR_11, #00H AJMP HOUR_OFF ; 转到时显 ;-------分单元加1子程序
MIN_OFF: MOV A , MIN_11 ; 调时分单元、并显示提示 MOV B ,#10 DIV AB SWAP A ORL A,B MOV P0, A MOV P2, #02H LCALL READ LCALL DE250SM
CJNE A, 01H,MIN_OFF
CJNE A, #0FBH, KEY2_F11 ;按SB2 转分调整 LJMP ON_1 ;按SB3往下调定时:开与关 KEY2_F11: CJNE A, #0FDH, MIN_OFF
INC MIN_11 ;1路分单元加1 MOV R5, MIN_11
31
山东工商学院2007届毕业论文
CJNE R5,#60,MIN_OFF;溢出 MOV MIN_11, #00H
LJMP MIN_OFF ; 转到分显 ;-------开、关定时
ON_1: CJNE A, #0FBH, MIN_OFF K1: MOV A, #88H MOV R7, A MOV P0, A
MOV P2, #0FFH;三组都显示开 LCALL READ LCALL DE250SM
CJNE A, 01H, ON_1;去抖后比较
CJNE A, #0FBH,KEY2_12 ;按SB2 转关
LJMP OUT_A ;按SB3调出、处于开状态 KEY2_12: CJNE A, #0FDH, K1
K2: MOV A, #00H; 显示0关 MOV R7, A MOV P0, A
MOV P2, #0FFH; LCALL READ LCALL DE250SM
CJNE A, 01H, K2;去抖后比较
CJNE A, #0FBH,KEY2_13 ;按SB2 转开 LJMP OUT_A ;SB3调出、处关状态 KEY2_13: CJNE A, #0FDH, K2 ; 比较按了没 LJMP K1 ; 按了SB2、转开 OUT_A: POP 00H POP B POP ACC POP PSW RETI
;_------读取按键程序
READ: MOV A , P1;读取按键 MOV R1, A
LCALL DE10MS MOV A, P1 RET ;_----延时程序
DE5SM: PUSH 01H
MOV R1, #0FFH DJNZ R1,$ POP 01H RET
DE10MS: PUSH 04H
32
山东工商学院2007届毕业论文
PUSH 05H
MOV R4, #0AH Dl1: MOV R5, #0FFH Dl2: DJNZ R5,$ DJNZ R4,dl1 POP 05H POP 04H RET
DE250SM: PUSH 02H PUSH 00H
MOV R0, #0FFH DEL: MOV R2, #0FFH DJNZ R2,$ DJNZ R0, DEL POP 00H POP 02H RET
;_---调整时间进位程序 MIN_AD: INC MIN
MOV R6, MIN
CJNE R6, #60, OU1 MOV MIN , #00 OU1: RET HOUR_AD: INC HOUR MOV R6 , HOUR CJNE R6 , #25 , OU2 MOV HOUR ,#00 OU2: RET
DAY_AD: INC DAY
MOV R6, DAY
CJNE R6 , #32, OU3 ; 是否溢出 MOV DAY ,#01H OU3: RET
MON_AD: INC MON MOV R6, MON
CJNE R6, #13, OU4 ; 是否溢出 MOV MON ,#01H OU4: RET YEAR_AD: INC YEAR
MOV R6, YEAR
CJNE R6, #09, OU5;是否溢出 MOV YEAR ,#00H OU5: RET END
33
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务