定时闹钟_C51单片机课程设计报告.doc
题目: 定时闹钟目录目录一、一、 概述概述1 11 11 1 设计目的及意义设计目的及意义 1 11 12 2 设计任务设计任务 1 11 13 3 设计系统的主要功能设计系统的主要功能 1 1二、系统总体方案及硬件设计二、系统总体方案及硬件设计2 22 21 1 系统总体方案系统总体方案 2 22 22 2 系统设计总框图系统设计总框图 2 22 23 3 硬件设计硬件设计 2 22 23 31 1 单片机最单片机最小小系系统统设计设计 2 22 23 32 2 报警模块报警模块设设计计 6 62 23 33 3 显示模块设显示模块设计计 7 72 23 34 4 调时模调时模块设计块设计 9 9三、软件设计三、软件设计10103 31 1 主程序流程图主程序流程图 10103 32 2 定时中断子程序流程图定时中断子程序流程图 11113 33 3 程序程序设设计计 1111四、系统的仿真与调试四、系统的仿真与调试12124 41 1 proteusproteus 软件仿真软件仿真 12124 42 2 系统的调试系统的调试 1111五、设计总结与体会五、设计总结与体会1313参考文献参考文献1313附录附录 1 1:源程序代码:源程序代码1414附录附录 2 2:系统原理图:系统原理图2424一、一、 概述概述1 11 1 设计设计目的及意义目的及意义学习和稳固单片机技术、电子技术、传感器技术及智能仪器等知识,使对已学过的根底知识能有更深入的理解,并融会贯穿。学会独立思考、独立工作,培养一定的自学能力和独立分析问题能力,以及增强系统地运用已学理论知识去解决实际问题的能力,同时培养成良好的科学态度和严谨的设计习惯。1 12 2 设计任务设计任务完成所选题目的分析与设计,到达技术性能要求。提交正式课程设计总结报告一份。本文设计的定时闹钟的核心模块采用 AT89C51 芯片,时、分、秒用 6 位 LED 数码管显示。在电路中通过四个按键 S1、S2、S3 和 S4 来进展定时、调时和复位,定时时间到通过蜂鸣器发出报警声。1 13 3 设计系统的主要功能设计系统的主要功能(1) 能显示时时分分秒秒。(2) 能够设置定时时间、修改定时时间。(3) 定时时间到能发出报警声。二、二、 系统总体方案及硬件设计系统总体方案及硬件设计2 21 1 系统总体方案系统总体方案(1) 由于 LED 显示器相对于其它显示器如 LCD 显示器来说其价格要廉价许多,而且亮度更高,耐温范围较广,所以采用 6 位数码管来显示时时分分秒秒。(2) 时间的定时用单片机内部时钟电路,在一定的时间内能使其误差较小,如经过一年其误差才仅有数秒。修改时间和定时用手动按键控制,报警声通过蜂鸣器发出。这样可以使得硬件电路设计较为简单,且软件设计也易于实现,并能够降低本钱。(3) 核心模块采用 AT89C51 单片机,功能强、通用性好、价格廉价,且易于控制。加上外围器件数码管、排阻、按键和蜂鸣器和应用程序,便构成了相应的应用系统。2 22 2 系统设计总框图系统设计总框图如图如图 1 1 所示所示 图 1 定时闹钟系统设计总框图2 23 3 硬件设计硬件设计231 单片机最小系统设计(1) 芯片:AT89C51 因为 51 单片机是各单片机中最为典型和最有代表性的一种,在 20 世纪 70 年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用广泛,开展很快,推广率和市场利润率较高,且适合于本设计系统中 CPU 内存和 I/O 等资源的要求,所以本设计采用 AT89C51 作为核心控制芯片。AT89C51 是一种带 4KB 闪烁可编程可擦除只读存储器FPEROMFalsh Programmable and Erasable Read Only Memory的单片机,可稳定地工作于 5V 的电源下。其集成度高、功能强、能耗低、通用性好、价格廉价。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器。其组合而成的配件产品在日常生活的使用过程中非常方便、简单且实用,深受着广阔消费者的喜爱。AT89C51管脚说明如下:时钟电路和复位电路键盘按钮单片机 AT89 C51蜂鸣器数码管显示 :供电电压端。CCV :接地端。GND P0口:P0口为三态双向口,能带8个TTL电路。有两种功能:第一功能是一个8位漏极开路型的双向I/O口,这时P0口可看做数据总线;第二功能是在访问外部存储器时,分时提供低8位地址和8位双向数据总线,这时先用做地址总线再用做数据总线。在FIASH编程时,P0 口作为原码输入口,当FIASH进展校验时,P0输出原码,此时P0外部必须被拉高。P0口内部无上拉电阻,作为I/O口使用时,必须外接上拉电阻。 P1口:P1口是一个内部带上拉电阻的8位准双向I/O口使用前有一个准备动作 ,负载能力为4个TTL电路。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部带上拉电阻的8位准双向I/O口,P2口缓冲器可接收、输出4个TTL门电流。P2口当用于外部程序存储器或16位地址外部数据存储器进展存取时,P2口输出地址的高八位。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口是一个内部带上拉电阻的准双向I/O口,可接收输出4个TTL门电流。同时为闪烁编程和编程校验接收一些控制信号。P3口的8个引脚都有各自的第二功能,可作为AT89C51的一些特殊功能口,如表1所示。 表1 P3口第二功能P3口引脚第二功能注释P3.0RXD串行输入口P3.1TXD串行输出口P3.20INT外部中断0输入P3.31INT外部中断1输入P3.40T定时/计时器0外部输入P3.51T定时/计时器1外部输入P3.6WR外部数据存储器写信号P3.7RD外部数据存储器读信号:为复位信号输入端。当振荡器复位器件时,要保持RST脚两个机器周期/PDRST VRST(24个时钟周期)以上的高电平时间。为内部的备用电源输入端。当主电源一PDVRAMCCV旦发生断电或电压降到一定值时,可通过为单片机内部提供电源,以保护片内PDVRAM中的信息不丧失,使上电后能继续正常运行。:为地址锁存RAMCCV/ALE PROGALE允许信号,当访问外部存储器时,用来锁存口送出的低8位地址信号。在ALE0P编程期间,用于输入编程脉冲。在平时,端以不变的频率周期输出正FLASHPROGALE脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个脉冲。如想制止的ALEALE输出可在的8EH地址上置0。此时,只有在执行MOV*,MOVC指令时才起作用。SFRALE另外,该引脚被略微拉高。如果微处理器在外部执行状态制止,置位无效。ALE :外部程序存储器的读选通信号。在由外部程序存储器取指期间,产生负PSENPSEN脉冲做为外部的选通信号,每个机器周期两次有效。但在访问外部数据存储ROMPSEN器时,不会产生有效的信号。可驱动8个门输入端。:访问外PSENPSENLSTTL/PPEA V部程序存储器控制信号。当保持低电平时,则在此期间只访问外部程序存储器EA0000H-FFFFH ,不管是否有内部程序存储器。注意加密方式1时,将内部锁定为EA。当端保持高电平时,访问程序存储器有两种情况:一是访问的地址空间RSTEACPU在0到4KB范围内,访问片内程序存储器;二是访问的地址超出4KB时,将自动CPUCPU执行外部程序存储器的程序。在编程期间,此引脚也用于施加12V编程电源FLASH 。PPV:晶体振荡电路的反向器输入端。1XTAL:晶体振荡电路的反向器输出端。2XTAL (2) 时钟电路单片机的时钟产生方法有两种: 内部时钟方式和外部时钟方式。 本系统中 AT89C51单片机采用内部时钟方式。最常用的内部时钟方式是采用外接晶体和电容组成的并联谐振回路。振荡晶体可在 1.2MHz12MHz 之间。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,一般可在 20pF100pF 之间取值。AT98C51 单片机的时钟电路如图 3 所示。图 3AT98C51 单片机的时钟电路(3) 复位电路复位是单片机的初始化操作。单片机系统在上电启动运行时,都需要先复位。其作用是使 CPU 和系统中其他部件都处于一个确定的初始状态,并从这个状态开场工作。单片机的外部复位电路有上电自动复位和按键手动复位两种。本系统中 AT89C51 单片机采用上电加按键手动复位电路,如图 4 所示。图 4AT89C51 单片机的复位电路232 报警模块设计为实现设计的定时闹钟系统在定时时间到时发出报警声,采用蜂鸣器作为报警发声装置。在本设计中有多种报警声可供选择,可选择报警时播放音乐。报警电路设计如图 5所示。AT89C51XTAL2XTAL1JZ12MC130PFC230PF图 5 定时闹钟系统的报警电路233 显示模块设计本系统中采用6位LED数码管显示时、分、秒,用两片74HC573分别对段码和位码进展锁存,实现动态扫描方式显示,节省单片机I/O口资源,简化硬件电路。(1)LED 显示器单片机中通常使用 8 段 LED,LED 是发光二极管显示器的缩写。LED 显示器由于构造简单,价格廉价,体积小,亮度高,电压低,耐温范围广,可靠性高,寿命长,响应速度快,颜色鲜艳,配置灵活,与单片机接口方便而得到广泛应用。LED 显示器是由假设干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。LED 显示器有多种形式,如:米字型显示器,点阵显示器和七段数码显示器等。在本系统中采用八段数码显示器。因为共阴极的 LED 数码管它的驱动电流是分开的,在单片机进展动态扫描的时候不会影响彼此的电流,故本系统中的 6 位 LED 数码管均用共阴极的数码管。(2) 74HC573 芯片特点:三态总线驱动输出,置数全并行存取,缓冲控制输入,使能输入有改善抗扰度的滞后作用。 原理说明:74HC573 的八个锁存器都是透明的 D 型锁存器,当使能G为高时,Q 输出将随数据D输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲存放器,I/O 通道,双向总线驱动器和工作存放器。74HC573 引脚说明:OE:3 态输出使能输入低电平有效。D0 - D7:数据输入端。Q0 - Q7:3 态锁存输出。LE:锁存使能输入。GND:接地。VCC:电源电压。74HC573 的引脚图、逻辑图及真值表如下:图 674HC573 引脚图图 774HC573 逻辑图表 2 74HC573 真值表OELEDQ H*ZLL*NO CHANGE LHLLLHHH(3)显示电路将两片 74HC573 的数据输入端 D0 - D7 都分别与 AT89C51 单片机的 P0.0 - P0.7 和 RESPACK-8 排阻的 2 - 9 引脚连接,两片 74HC573 的锁存使能端 L 分别接至 P2.6 和 P2.7,74HC573 的输出端接至数码管234 调时模块设计本系统要进展时间的调整和定时,因此用 4 个手动按键对其进展控制。键盘电路设计如图 9 所示。当按下时间调整键 S1 时,系统可进展时间调整的小时设置;当再按下 S1 时,可进展时间调整的分钟设置;再按下 S1 时,可进展时间调整的秒钟设置;再次按下 S1 时,系统恢复正常时间显示。当按下设置定时键 S2 时,系统可进展闹钟定时时间的小时设置,此时 S1 作为报警声选择键,可通过 S1 选择报警声;再按下 S2 时,可进展定时时间的分钟设置,此时也可通过 S1 选择报警声;第三次按下 S2 时,系统恢复正常时间显示,此时S1 恢复为时间调整按键。设置时间时都通过加时按键 S3 和减时按键 S4 进展控制。图 9 定时闹钟系统的键盘电路三、三、 软件设计软件设计3 31 1 主程序流程图主程序流程图开始初始化显示时间S1 按下.N图 10 主程序流程图3 32 2 定时中断子定时中断子程序流程图程序流程图调整时间减时调整加时调整YYYS2 按下.NS4 按下.S3 按下.NNYS1 按下.选择报警声S3 按下.定时加时S4 按下.定时减时YYYNNN开始秒变量加 11 秒到.YN图 11 定时中断子程序流程图3 33 3 程序程序设计设计 根据程序流程图采用汇编语言进展程序设计,其中主程序可根据系统实现的功能划分为以下几个子程序模块。 程序源代码见附录 1(1)时间调整子程序模块;(2)闹钟时间设置子程序模块;(3)蜂鸣器报警子程序模块;(4)数码管显示子程序模块。结 束蜂鸣器响分变量加 1,秒变量清零60 秒到.定时到.60 分到.时变量加 1,分变量清零24 时到.时变量清零YNNNYYYN四、四、 系统的仿真与调试系统的仿真与调试4 41 1 proteusproteus 软件仿真软件仿真使用 WAVE 软件编辑程序,在仿真设置中选择 E6000/T 仿真器,选择 POD-51 仿真头。为方便系统在 proteus 中进展仿真,选择了 7SEG-MP*6-CC-BLUE 数字显示器,并改变了一些 I/O 连接,然后选择 80C51CPU 进展汇编程序编辑。经过仿真得知,通过S1、S2、S3 和 S4 四个按键,可以对时间进展修改和闹钟的设置,定时时间到能发出报警声,系统非常完善地实现了所有要求的功能。4 42 2 系统的调试系统的调试将所编程序在 KEIL 软件里进展编译,编译正确后生成 HE*文件。 在 AT89C51 芯片中加载此文件后,对完成的实物作品进展调试。系统运行后,能准确的显示时间,并能通过 S1、S2、S3 和 S4 四个按键对时间进展修改和闹钟定时时间的设置,定时时间到能发出报警声。五、设计总结与体会五、设计总结与体会设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术开展的日新日异,单片机已经成为当今计算机应用中空前活泼的领域,在生活中可以说得是无处不在,作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。通过本次单片机原理及应用设计使我充分认识到了设计的重要性和必要性,本次设计使我对已学过的根底知识有了更深入的理解,学会了独立思考、独立工作以及对应用所学根本理论分析和解决实际问题的能力有了很大的提高。另外,本次设计使我的实际操作技能得到了训练, 同时也进一步培养了我严谨的科学作风。回忆起此次单片机课程设计,从选题到定稿,从理论到实践,可以说得是有苦有甜,但是从中却学到很多很多的的东西,不但稳固了以前所学过的知识,而且对单片机原理课外知识也得到了拓展。做的过程中,开场确实遇到了不少困难的问题,比方说芯片管脚不熟悉怎么放置等,同时在这过程中也发现了自己的许多缺乏之处,对以前所学过的知识理解得不够深刻,掌握得不够结实。通过单片机设计之后,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我们还学会了如何去培养创新精神和严谨的科学作风,从而不断地战胜自己,超越自己。更重要的是,我在这一设计过程中,学会了坚持不懈,绝不放弃。参考文献参考文献1*毅刚.单片机原理及应用.:高等教育,20032王幸之.单片机应用系统电磁干扰与抗干扰技术.:航空航天大学,20063何立民.单片机应用技术大全.:航空航天大学,19944*毅刚.单片机原理及接口技术.*:*工业大学,19905谭浩强.单片机课程设计.:清华大学,19896余锡纯.单片机原理与接口技术.*:电子科技大学,20037Mak.S, Radford. D.Design considerations for implementation of large scale automatic meter reading systems.Power Delivery, IEEE Transactions on,Volume 10, Issue 1, Jan. 1995 附录附录 1 1:源程序代码:源程序代码1 1、汇编语言程序:汇编语言程序:;* 引脚及变量定义 * S1 BIT P3.2 ;按键1 S2 BIT P3.3 ;按键2 S3 BIT P3.4 ;按键3 S4 BIT P3.5 ;按键4SPEAKER BIT P2.0 ;蜂鸣器 DULA BIT P2.6 ;段选锁存器锁存端 WELA BIT P2.7 ;位选锁存器锁存端 HOUR1 EQU 20H ;小时 MIN1 EQU 21H ;分钟 SEC1 EQU 22H ;秒钟 HOUR2 EQU 23H ;小时定时变量 MIN2 EQU 24H ;分钟定时变量 A1 EQU 25H ;显示变量 B1 EQU 26HC1 EQU 27HD1 EQU 28HE1 EQU 29HF1 EQU 30HA2 EQU 31HB2 EQU 32HC2 EQU 33HD2 EQU 34H NUM1 EQU 35H ;按键计数变量1 NUM2 EQU 36H ;按键计数变量2 COUNT EQU 37H ;计时变量 ORG 0000H LJMP MAIN ORG 000BH LJMP TIME;* MAIN PROGRAM * ORG 1000HMAIN: MOV SP,*50HSTART: MOV HOUR1,*00H ;初始化时间变量 MOV MIN1,*00H MOV SEC1,*00H MOV HOUR2,*01H ;初始化定时变量 MOV MIN2,*01H MOV COUNT,*00H ;初始化计时变量 MOV NUM1,*00H ;初始化按键计数变量 MOV NUM2,*00H MOV TMOD,*01H ;16位计数器 MOV TH0,*0D8H ;赋初值 MOV TL0,*0EFH SETB ET0 ;中断允许SETB EA SETB TR0 ;启动T0LOOP: MOV A,NUM2 JNZ LOOP1 ;A不为0时转移 LCALL DISPLAY1 ;显示当前时间 LCALL KEYTIME ;调用时间调整子程序 LCALL SETTIME ;调用定时设置子程序 LJMP LOOPLOOP1: LCALL DISPLAY2 ;显示定时时间 LCALL KEYTIME ;调用时间调整子程序 LCALL SETTIME ;调用定时设置子程序 LJMP LOOP ;* SETTIME PROGRAM *SETTIME: ;定时设置子程序LL1: S2,LL3 ;P3.3=1时转移 LCALL DELAY5 ;延时5MSMSTOP1: S2,LL3 ;P3.3=1时转移MOV C,S2JNC MSTOP1 ;P3.3=0时转移 INC NUM2 ;按键计数变量加1MOV A,NUM2 CJNE A,*1,LL2 ;判断按键计数是否为1 CLR TR0 ;定时器中断关闭LL2: CJNE A,*3,LL ;判断按键计数是否为3 MOV NUM2,*0 ;按键计数变量清0 SETB TR0 ;定时器中断翻开LL: LCALL DISPLAY2 ;显示定时时间LL3:MOV A,NUM2 JZ LL5 ;A为0时转移 S3,KK2 ;P3.4=1时转移 LCALL DELAY5 ;延时5MSKK1: S3,KK2 ;P3.4=1时转移 MOV C,S3 JNC KK1 ;P3.4=0时转移MOV A,NUM2 CJNE A,*1,MM1 ;判断按键计数是否为1INC HOUR2 ;小时定时变量加1MOV A,HOUR2 CJNE A,*24,MM1 ;判断小时定时变量是否为24 MOV HOUR2,*0 ;小时定时变量为24则复位0 LCALL DISPLAY2 ;显示定时时间MM1:LCALL DISPLAY2 ;显示定时时间MOV A,NUM2 CJNE A,*2,KK2 ;判断按键计数是否为2 INC MIN2 ;分钟定时变量加1MOV A,MIN2 CJNE A,*60,KK2 ;分钟定时变量是否为60 MOV MIN2,*0 ;分钟定时变量为60则复位0 LCALL DISPLAY2 ;显示定时时间KK2:LCALL DISPLAY2 ;显示定时时间 S4,LL5 ;P3.5=1时转移 LCALL DELAY5 ;延时5MSKK3: S4,LL5 ;P3.5=1时转移 MOV C,S4 JNC KK3 ;P3.5=0时转移MOV A,NUM2 CJNE A,*1,MM2 ;判断按键计数是否为1 DEC HOUR2 ;小时定时变量减1MOV A,HOUR2CJNE A,*0,MM2MOV HOUR2,*24 LCALL DISPLAY2 ;显示定时时间MM2:LCALL DISPLAY2 ;显示定时时间MOV A,NUM2 CJNE A,*2,LL5 ;判断按键计数是否为2DEC MIN2MOV A,MIN2 ;分钟定时变量减1CJNE A,*0,LL5MOV MIN2,*60LL5: LCALL DISPLAY2 ;显示定时时间RET ;* KEYTIME PROGRAM *KEYTIME: ;时间调整子程序L1: S2,L3 ;P3.2=1时转移 LCALL DELAY5 ;延时5MSMSTOP2: S2,L3 ;P3.2=1时转移MOV C,S2 JNC MSTOP2 ;P3.2=0时转移INC NUM1MOV A,NUM1 CJNE A,*1,L2 ;判断按键计数是否为1 CLR TR0 ;定时器中断关闭L2: CJNE A,*4,L3 ;判断按键计数是否为4MOV NUM1,*0 SETB TR0 ;定时器中断翻开L3: MOV A,NUM1 JNZ FF ;A不为0时转移LJMP L5FF: S3,K2 ;P3.4=1时转移 LCALL DELAY5 ;延时5MSK1: S3,K2 ;P3.4=1时转移MOV C,S3 JNC K1 ;P3.4=0时转移MOV A,NUM1 CJNE A,*1,M1 ;判断按键计数是否为1 INC HOUR1 ;小时设置加1MOV A,HOUR1 CJNE A,*24,M1MOV HOUR1,*0 LCALL DISPLAY1 ;显示调整时间M1: LCALL DISPLAY1 ;显示调整时间MOV A,NUM1CJNE A,*2,M2 ;判断按键计数是否为2INC MIN1 ;分钟设置加1MOV A,MIN1CJNE A,*60,M2MOV MIN1,*0LCALL DISPLAY1 ;显示调整时间M2: LCALL DISPLAY1 ;显示调整时间MOV A,NUM1CJNE A,*3,K2 ;判断按键计数是否为3INC SEC1MOV A,SEC1CJNE A,*60,K2MOV SEC1,*0LCALL DISPLAY1 ;显示调整时间K2: LCALL DISPLAY1 ;显示调整时间 S4,L5 ;P3.5=1时转移 LCALL DELAY5 ;延时5MSK3: S4,L5 ;P3.5=1时转移 MOV C,S4JNC K3 ;P3.5=0时转移MOV A,NUM1CJNE A,*1,M3 ;判断按键计数是否为1DEC HOUR1MOV A,HOUR1CJNE A,*0,M3MOV HOUR1,*24LCALL DISPLAY1 ;显示调整时间M3: LCALL DISPLAY1 ;显示调整时间MOV A,NUM1CJNE A,*2,M4 ;判断按键计数是否为2DEC MIN1MOV A,MIN1CJNE A,*0,M4MOV MIN1,*60LCALL DISPLAY1 ;显示调整时间M4: LCALL DISPLAY1 ;显示调整时间MOV A,NUM1CJNE A,*3,L5 ;判断按键计数是否为3INC SEC1MOV A,SEC1CJNE A,*0,L5MOV SEC1,*60L5: LCALL DISPLAY1 ;显示调整时间RET ;* TIMEPRO PROGRAM *TIMEPRO: MOV R7,*50 ;蜂鸣器报警子程序 CLR SPEAKER ;启动蜂鸣器报警 LCALL DELAYN ;延时50MSSETB SPEAKERLCALL DELAYNCLR SPEAKERLCALL DELAYNSETB SPEAKER;* DISPLAY1 PROGRAM *DISPLAY1: ;显示子程序1 PUSH ACC ;保护现场 MOV A,HOUR1 ;将时间的十位和个位分别赋给显示变量 MOV B,*10 DIV AB MOV A1,A MOV B1,B MOV A,MIN1 MOV B,*10 DIV AB MOV C1,A MOV D1,B MOV A,SEC1 MOV B,*10 DIV AB MOV E1,A MOV F1,BMOV DPTR,*TABLE;指向7段编码表首地址 CLR DULA;关闭段选锁存器锁存端MOV A,A1 MOVC A,A+DPTR MOV P0,A;显示小时十位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0FEH;选择第1位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA;关闭段选锁存器锁存端MOV A,B1 MOVC A,A+DPTR MOV P0,A;显示小时个位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0FDH;选择第2位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA;关闭段选锁存器锁存端MOV A,C1 MOVC A,A+DPTR MOV P0,A;显示分钟十位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0FBH;选择第3位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA;关闭段选锁存器锁存端MOV A,D1 MOVC A,A+DPTR MOV P0,A;显示分钟个位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0F7H;选择第4位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA;关闭段选锁存器锁存端MOV A,E1 MOVC A,A+DPTR MOV P0,A;显示秒钟十位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0EFH;选择第5位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA;关闭段选锁存器锁存端MOV A,F1 MOVC A,A+DPTR MOV P0,A;显示秒钟个位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0DFH;选择第6位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5POP ACC ;恢复现场 RET;* DISPLAY2 PROGRAM *DISPLAY2: ;显示子程序2 PUSH ACC ;保护现场 MOV A,HOUR2 ;将时间的十位和个位分别赋给显示变量 MOV B,*10 DIV AB MOV A2,A MOV B2,BMOV A,MIN2 MOV B,*10 DIV AB MOV C2,A MOV D2,BMOV DPTR,*TABLE;指向7段编码表首地址 CLR DULA;关闭段选锁存器锁存端MOV A,A2 MOVC A,A+DPTR MOV P0,A;显示定时时间的小时十位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0FEH;选择第1位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA;关闭段选锁存器锁存端MOV A,B2 MOVC A,A+DPTR MOV P0,A;显示定时时间的小时个位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0FDH;选择第2位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA;关闭段选锁存器锁存端MOV A,C2 MOVC A,A+DPTR MOV P0,A;显示定时时间的分钟十位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0FBH;选择第3位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA;关闭段选锁存器锁存端MOV A,D2 MOVC A,A+DPTR MOV P0,A;显示定时时间的分钟个位SETB DULA;翻开段选锁存器锁存端 CLR DULACLR WELA;关闭位选锁存器锁存端 MOV P0,*0F7H;选择第4位数码管 SETB WELA;翻开位选锁存器锁存端 CLR WELA LCALL DELAY5POP ACC ;恢复现场RET;* DELAY PROGRAM *DELAYN: ;N ms延时子程序,R7为参数NDL00: MOV R5,*05H DL11: MOV R6,*0DFHDL22: DJNZ R6,DL22 DJNZ R5,DL11 DJNZ R7,DL00 RETDELAY5: MOV R4,*14H ;5ms延时子程序DL001: MOV R5,*0FFHDL111: DJNZ R5,DL111 DJNZ R4,DL001 RET;* TIME PROCESS *TIME: PUSH ACC ;定时中断子程序 PUSH PSW ;保护现场 MOV TH0,*0D8H ;初值 MOV TL0,*0EFHINC COUNT ;计时变量加1MOV A,COUNTCJNE A,*18,RET0 ;1秒到否MOV COUNT,*0INC SEC1MOV A,HOUR1 ;判断定时时间到否MOV B,HOUR2CJNE A,B,HTHTMOV A,MIN1MOV B,MIN2CJNE A,B,HTHTLCALL TIMEPRO ;调用蜂鸣器报警子程序HTHT:MOV A,SEC1CJNE A,*60,RET0 ;1分到否MOV SEC1,*0INC MIN1MOV A,MIN1CJNE A,*60,RET0 ;1小时到否MOV MIN1,*0INC HOUR1MOV A,HOUR1CJNE A,*24,RET0MOV HOUR1,*0RET0: POP PSW ;恢复现场 POP ACC RETITABLE: DB 3FH,06H,5BH,4FH,66H ;七段码表 DB 6DH,7DH,07H,7FH,6FHEND附录附录 2 2:系统原理图:系统原理图附录三 液晶显示一、一、 实验目的实验目的1了解液晶工作原理2熟悉 12232F 液晶的引脚功能、工作时序及工作方式3掌握如何根据时序图编写程序的方法。二、二、 实验内容实验内容用实验箱上提供的 12232F 液晶模块,编写程序,静态显示字样。三、三、 实验原理实验原理112232F 是一种图形点阵液晶显示器,它主要由行驱动器/ 列驱动器及 12232 全点阵液晶显示器组成.可完成图形显示,也可以显示 72 个(1616 点阵)汉字.与外部 CPU 接口可采用串行或并行方式控制。2外部接口信号如下表 4-1 所示:表 4-1:管脚号管脚名称LEVER管脚功能描述1GND0V电源地2VCC5.0V电源电压3VEE-液晶显示器驱动电压4RSH/LD/I=H,表示 DB7DB0 为显示数据D/I=L,表示 DB7DB0 为显示指令数据5R/WH/LR/W=H,E=H,数据被读到 DB7DB0R/W=L,E=HL, DB7DB0 的数据被写到 IR 或 DR6EH/L使能信号7DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15LED+5V背光源电压16LED-0V背光源电源地312232F 提供两套控制命令,根本指令和扩大指令如下:指令表 4-2:RE=1:根本指令指令 指 令 码功 能RSR/WD7D6 D5 D4 D3 D2 D1 D0去除显示0000000001将DDRAM填满 20H,并且设定DDRAM的地址计数器 (AC)到00H地址归位000000001*设定DDRAM的地址计数器(AC)到00H,并且将游标移到开头原点位置 ;这个指令不改变 DDRAM 的内容显示状态开/关0000001DCBD=1: 整体显示 ONC=1: 游标 ON B=1:游标位置 ON进入点设定00000001I/DS指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位游标或显示移位控制000001S/C R/L*设定游标的移动与显示的移位控制位;这个指令不改变 DDRAM 的内容 功能 设定00001DL*0RE*DL=1(必须设为 1)RE=1: 扩大指令操作RE=0: 根本指令操作 设定CGRAM 地址0001AC5AC4AC3AC2AC1AC0设定 DDRAM 地址到地址计数器 设定DDRAM 地址001AC6AC5AC4AC3AC2AC1AC0设定 CGRAM 地址到地址计数器读取忙标志和地址01BFAC6AC5AC4AC3AC2AC1AC0读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值写数据到RAM10数据将数据 D7D0 写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM)读出RAM的值11数据从内部 RAM 读取数据 D7D0(DDRAM/CGRAM/IRAM/GRAM)指令表 4-3:RE=0:扩大指令指令指 令 码功 能RSR/WD7D6 D5 D4 D3 D2 D1 D0待命模式0000000001进入待命模式,执行其他指令都棵终止待命模式卷动地址开关开启000000001SRSR=1:允许输入卷动地址SR=0: 允许输入IRAM地址反白选择00000001R1R0选择 4 行中的任一行作反白显示,并可决定反白与否睡眠模式0000001SL*SL=0:进入睡眠模式SL=1:脱离睡眠模式点距书面移位控制000001OA LRL1L0OA=1:选择单行移位OA=0:全部 4 行一起移位LR=1:点距右移LR=0:点距左移L1,L0:选择移位行扩大功能设定00001CL*1REGGPCL=1 (必须设为 1)RE=1: 扩大指令操作RE=0: 根本指令操作G=0:(必须设为 0)GP=0: (必须设为 0)设定IRAM地址或是卷动地 址0001AC5AC4AC3AC2AC1AC0SR=1: AC5AC0 为卷动地址SR=0: AC5AC0 为 ICON RAM 地址设定绘图RAM地址001AC6AC5AC4AC3AC2AC1AC0本版本不提供此功能