1、课程设计(论文)题 目 名 称 基于 89C51 电子时钟的设计 课 程 名 称 单片机原理及在电气与测控学科中的应用 学 生 姓 名 蔡贝贝 学 号 0841229081 系 、 专 业 电气工程系、08 级电气测控类 指 导 教 师 石赛美 2010 年 7 月 1 日1邵阳学院课程设计(论文)任务书年级专业 08 级电气测控类 学生姓名 蔡贝贝 学 号 0841229081题目名称 基于 89C51 的电子时钟的设计 设计时间2010 年 5 月 31 日6 月 30 日课程名称单片机原理及 在电气与测控学科中的应用课程编号 121200105 设计地点数字控制与 PLC 实验室一、课程
2、设计(论文)目的单片机课程设计,要求学生更多的完成软硬结合的动手实践方案,解决目前学生课程设计过程中普遍存在的缺乏动手能力的现象. 其目的和任务是训练学生综合运用已学课程“电子技术基础”、“单片机原理及应用”的基本知识,独立进行单片机应用技术和开发工作,掌握单片机程序设计、调试和应用电路设计、分析及调试检测。二、已知技术参数和条件1、8031 集成定时器2、89C51 系列单片机3、KEIL 软件4、T HKSCM-1 型 单 片 机 实 验 系 统三、 任务和要求设计一个电子时钟,能实现时、分、秒的显示和调节:1、要求设计出电气原理图2、要求设计出程序流程图3、要求设计出程序,并写出程序源代
3、码4、撰写设计说明书一份,格式要求符合学院的统一规定,结构要合符逻辑,表达要得体2注:1此表由指导教师填写,经系、教研室审批,指导教师、学生签字后生效;2此表 1 式 3 份,学生、指导教师、教研室各 1 份。四、参考资料和现有基础条件(包括实验室、主要仪器设备等)1、何立民. 单片机应用系统设计M.北京航空航天大学出版社, 19932、 THKSCM-1 型 单 片 机 实 验 系 统 实 验 指 导 书 、 KEIL 软 件 、 WAVE 软 件3、数字控制与 PLC 实验室“T HKSCM-1 型 单 片 机 实 验 系 统 ”五、进度安排2010 年 5 月 31 日-6 月 7 日:
4、收集和课程设计有关的资料,熟悉课题任务何要求2010 年 6 月 8 日-10 日:总体方案设计2010 年 6 月 11 日-14 日:硬件电路设计2010 年 6 月 15 日-20 日:软件设计2010 年 6 月 21 日-22 日:系统调试改进2010 年 6 月 23 日-28 日:整理书写设计说明书2010 年 6 月 29 日-30 日:答辩六、教研室审批意见教研室主任(签字): 年 月 日七|、主管教学主任意见主管主任(签字): 年 月 日3八、备注指导教师(签字): 学生(签字):课程设计(论文)评阅表学生姓名 蔡贝贝 学 号 0841229081 系 别 电气工程系 专业
5、班级 08 级电气测控类 题目名称 基于 89C51 电子时钟的设计 课程名称 单片机原理及在电气与测控学科中的应用 一、学生自我总结通过该课程设计,我全面系统的理解了编译原理程序构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。同时,使学过的计算机编译原理知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对文件系统的内部功能及内部实现的理解,达到了培养实践动手能力和程序开发能力的目的。学生签名: 年 月 日二、指导教师评定评分项目 平时成绩 论文 答辩 综合成绩权 重 30 40 30单项成绩4指导教师评语:指导教师(签名): 年 月 日注:1、本
6、表是学生课程设计(论文)成绩评定的依据,装订在设计说明书(或论文)的“任务书”页后面;2、表中的“评分项目”及“权重”根据各系的考核细则和评分标准确定:摘 要 单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机也被称为微控制器(Microcontroler ),是因为它最早被用在工业控制领域。单片机由芯片内仅有 CP
7、U 的专用处理器发展而来。最早的设计理念是通过将大量外围设备和 CPU 集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对提及要求严格的控制设备当中。本设计主要设计了一个基于 89C51 单片机的电子时钟。并在数码管上显示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用 Proteus 的 ISIS 软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。关键字:单片机;电子时钟;键盘控制。5目 录I 单片机的相关知识.61.1 单片机简介1.2 单片机的特点1.3 89C51 单片机介绍 .8II 电子时钟的相关知识 62.1
8、电子时钟简介 .62.2 电子时钟的原理 .62.3 电子时钟的基本特点 .6III 控制系统的硬件设计 103.1 单片机型号的选择 .103.2 数码管显示工作原理 .103.3 键盘电路设计 .113.4 整个电路原理图 .12IV 控制系统的软件设计 124.1 程序设计.124.2 程序流程图.154.3 仿真图.1864.4 仿真结果分析.19V 结束语 .19VI 附录 21参考文献 29I 单片机的相关知识 1.1 单片机简介 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器 CPU 随机存储器 RAM、只读存储器 ROM、多种 I/O 口和
9、中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。1.2 单片机的特点 (一) 采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。 (二 ) 单片机的存储器 ROM 和 RAM 时严格区分的。ROM 称为程序存储器,只存放程序,固定常数,及数据表格。RAM 则为数据存储器,用作工作区及存放用户数。 (三)单片机的 I/O 口通常时多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚
10、处于何种功能,可由指令来设置或由机器状态来区分。 1.3 89C51 单片机介绍 VCC:接电源。GND:接地。7P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。当 P1 口的管脚第一次写 1 时,被定义为高阻输入。 P0 能够用于外部程 序数据存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高。P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接收输出 4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高
11、,可用作 输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编程和校验时,P1 口作为第八位地址接收。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4 个 TTL 门电流,当 P2 口被写“1” 时,其管脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存 储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功
12、能寄存器 的内容。P2 口在FLASH 编程和校验时接收高八位地址信号和控制信号。XTAL218XTAL119ALE30 EA31 PSEN29RST9P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 3P0.7/AD7 32P1.01 P1.12 P1.23P1.34 P1.45 P1.56P1.67 P1.78P3.0/RXD 10P3.1/TXD 1P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15P2.7/A1
13、5 28P2.0/A8 21P2.1/A9 2P2.2/A10 23P2.3/A1 24P2.4/A12 25P2.5/A13 26P2.6/A14 27U4AT89C51图 1.1 89C51 单片机P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个TTL 门电流。当 P3 口写入 “1”后,它们被内部上拉为高电平,并用作输入。作为8输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为 AT89C51 的一些特殊功能口,如下表所示:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断
14、 0)P3.3 /INT1(外部中断 1)P3.4 T0(记时器 0 外部输入)P3.5 T1(记时器 1 外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE
15、脉冲。如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。此时,ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式 1 时,/EA 将内部锁定为RESET;当/EA 端保持高电平时,此间内部程序存储器。在 FLAS
16、H 编程期间,此引脚也用于施加 12V 编程电源(VPP)。9II 电子时钟的相关知识 2.1 电子时钟简介 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许多场合可以看到数字电子钟。在城市的主要营业场所、车站、码头等公共场所使用 LCD 数字电子钟已经成为一种时尚。2.2 电子时钟的原理 该电子时钟由 89C51,BUTTON,六段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十
17、四小时为一天。而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。2.3 电子时钟的基本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用 LED 显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的
18、灵活性好。10III 控制系统的硬件设计3.1 单片机型号的选择 通过对多种单片机性能的分析,最终认为 89C51 是最理想的电子时钟开发芯片。89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8 位微处理器,器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 89C51 是一种高效微控制器,而且它与MCS-51 兼容,且具有 4K 字节可编程闪烁存储器和 1000 写/擦循环,数据保留时间为 10 年等特点,是最好的选择。3.2 数
19、码管显示工作原理数码管是一种把多个 LED 显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个 LED 显示段的阳极接在一起,又称为公共端。共阴型就是把多个 LED 显示段的阴极接在一起,即为公共商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为 8 段,即 8 个 LED 显示段,这是为工程应用方便如设计的,分别为A、 B、 C、 D、E 、F、G 、DP ,其中 DP 是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。即,所有的A 段都会连在一起,其它的段也是如此,这是实
20、际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的 8 段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用 8 位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。 113.3 键盘电路设计 该设计只用了一个键盘,但实现的功能却是比较完善,减少了硬件资源的损耗,该键盘可以实现小时和分钟的调节以及控制是否进入省电模式。当按键按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接
21、按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。达到时间调节的目的。3.4 整个电路原理图 图 3.1 系统电路原理图1213IV 控制系统的软件设计 4.1 程序流程图系统的流程图如图 4.1 和图 4.2 所示:图 4.1 主程序流程图14图 4.2 中断处理流程图4.2 程序设计 本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序四大模块。在程序设计过程中,加强了部分软件抗干扰措施,下面仅对定时计数中断程序作简要介绍。完整程序见 附录15定时计数中断程序:MOV TMOD,#00H ;
22、写控制字MOV TH0,#0F0H ;写定时常数MOV TL0,#0CHSETB TR0 ;启动 T0SETB ET0 ;允许 T0 中断SETB EA ;开放 CPU 中断AJMP $4.3 仿真结果图 4.3 开始运行程序仿真图16图 4.4 运行一段时间后仿真图4.4 仿真结果分析电路图的设计过于单调,用的器件太少,实现调节时间的按钮太少,不能很好的实现时间的调节。在测试过程中,六位数码显示管只显示五位数字,有一位数字不亮,通过多次的修改程序并在 PROTEUS 软件环境中进行仿真,最终解决了这个问题,同时也透露出本人在单片机电路设计和程序设计方面的不足。不过最后的仿真效果非常好,实现了
23、预期的效果,能过通过多功能控制键调节时间和是否进入省电模式,是一个比较令人满意的设计。17V 结束语该课程设计的顺利完成,着实让我受益不浅: 一、 对实验原理有更深的理解 通过编译原理课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。 二、 激发了学习的积极性 通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本
24、实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操作系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。 18VI 附录ORG 0000H ;程序执行开始地址LJMP START ;跳到标号 START 执行ORG 0003H ;外中断 0 中断程序入口RETI ;外中断 0
25、 中断返回ORG 000BH ;定时器 T0 中断程序入口LJMP INTT0 ;跳至 INTTO 执行ORG 0013H ;外中断 1 中断程序入口RETI ;外中断 1 中断返回ORG 001BH ;定时器 T1 中断程序入口LJMP INTT1 ;跳至 INTT1 执行ORG 0023H ;串行中断程序入口地址RETI ;串行中断程序返回 START: MOV R0,#70H ;清 70H-7AH 共 11 个内存单元MOV R7,#0BH ;CLEARDISP: MOV R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清 20H(标志
26、用)MOV 7AH,#0AH ;放入“熄灭符“数据MOV TMOD,#11H ;设 T0、T1 为 16 位定时器MOV TL0,#0B0H ;50MS 定时初值(T0 计时用)MOV TH0,#3CH ;50MS 定时初值MOV TL1,#0B0H ;50MS 定时初值(T1 闪烁定时用)MOV TH1,#3CH ;50MS 定时初值SETB EA ;总中断开放SETB ET0 ;允许 T0 中断SETB TR0 ;开启 T0 定时器MOV R4,#14H ;1 秒定时用初值(50MS20)START1: LCALL DISPLAY ;调用显示子程序JNB P3.7,SETMM1 ;P3.7
27、 口为 0 时转时间调整程序19SJMP START1 ;P3.7 口为 1 时跳回 START1SETMM1: LJMP SETMM ;转到时间调整程序 SETMMINTT0: PUSH ACC ;累加器入栈保护PUSH PSW ;状态字入栈保护CLR ET0 ;关 T0 中断允许CLR TR0 ;关闭定时器 T0MOV A,#0B7H ;中断响应时间同步修正ADD A,TL0 ;低 8 位初值修正MOV TL0,A ;重装初值(低 8 位修正值) MOV A,#3CH ;高 8 位初值修正ADDC A,TH0 ;MOV TH0,A ;重装初值(高 8 位修正值) SETB TR0 ;开启定
28、时器 T0DJNZ R4, OUTT0 ;20 次中断未到中断退出ADDSS: MOV R4,#14H ;20 次中断到(1 秒)重赋初值MOV R0,#71H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加 1 程序(加 1 秒操作)MOV A,R3 ;秒数据放入 A(R3 为 2 位十进制数组合)CLR C ;清进位标志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于 60 秒时中断退出ACALL CLR0 ;大于或等于 60 秒时对秒计时单元清 0 MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加
29、 1 分钟MOV A,R3 ;分数据放入 ACLR C ;清进位标志 CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于 60 分时中断退出ACALL CLR0 ;大于或等于 60 分时分计时单元清 0 MOV R0,#79H ;指向小时计时单元(78H-79H)20ACALL ADD1 ;小时计时单元加 1 小时 MOV A,R3 ;时数据放入 ACLR C ;清进位标志CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于 24 小时中断退出ACALL CLR0 ;大于或等于 24 小时小时计时单元清 0OUTT0: MOV 72H,76H ;中
30、断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器SETB ET0 ;开放 T0 中断 RETI ;中断返回; 闪动调时程序 ;T1 中断服务程序,用作时间调整时调整单元闪烁指示INTT1: PUSH ACC ;中断现场保护PUSH PSW ;MOV TL1, #0B0H ;装定时器 T1 定时初值 MOV TH1, #3CH ;DJNZ R2,INTT1OUT ;0.3 秒未到退出中断(50MS 中断 6 次) MOV R2,#06H ;重装 0.3 秒定时
31、用初值CPL 02H ;0.3 秒定时到对闪烁标志取反 JB 02H,FLASH1 ;02H 位为 1 时显示单元“熄灭“ MOV 72H,76H ;02H 位为 0 时正常显示MOV 73H,77H ;MOV 74H,78H ;MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场POP ACC ;RETI ;中断退出21FLASH1: JB 01H,FLASH2 ;01H 位为 1 时,转小时熄灭控制MOV 72H,7AH ;01H 位为 0 时,“熄灭符“数据放入分MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据MOV 74H,78H ;MOV 75
32、H,79H ;AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H 位为 1 时,“熄灭符“数据放入小时MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示 MOV 74H,7AH ;MOV 75H,7AH ;AJMP INTT1OUT ;转中断退出; 加 1 子 程 序 ;ADD1: MOV A,R0 ;取当前计时单元数据到 ADEC R0 ;指向前一地址SWAP A ;A 中数据高四位与低四位交换ORL A,R0 ;前一地址中数据放入 A 中低四位 ADD A,#01H ;A 加 1 操作DA A ;十进制调整MOV R3,A ;移入
33、R3 寄存器ANL A,#0FH ;高四位变 0MOV R0,A ;放回前一地址单元MOV A,R3 ;取回 R3 中暂存数据INC R0 ;指向当前地址单元SWAP A ;A 中数据高四位与低四位交换ANL A,#0FH ;高四位变 0MOV R0,A ;数据放入当削地址单元中 RET ;子程序返回; 清零程序 ;对计时单元复零用CLR0: CLR A ;清累加器MOV R0,A ;清当前地址单元22DEC R0 ;指向前一地址MOV R0,A ;前一地址单元清 0RET ;子程序返回; 时钟调整程序 ;当调时按键按下时进入此程序SETMM: CLR ET0 ;关定时器 T0 中断CLR T
34、R0 ;关闭定时器 T0LCALL DL1S ;调用 1 秒延时程序JB P3.7,CLOSEDIS ;键按下时间小于 1 秒,关闭显示(省电) MOV R2,#06H ;进入调时状态,赋闪烁定时初值 SETB ET1 ;允许 T1 中断SETB TR1 ;开启定时器 T1SET2: JNB P3.7,SET1 ;P3.7 口为 0(键未释放),等待SETB 00H ;键释放,分调整闪烁标志置 1SET4: JB P3.7,SET3 ;等待键按下LCALL DL05S ;有键按下,延时 0.5 秒JNB P3.7,SETHH ;按下时间大于 0.5 秒转调小时状态MOV R0,#77H ;按下
35、时间小于 0.5 秒加 1 分钟操作LCALL ADD1 ;调用加 1 子程序MOV A,R3 ;取调整单元数据CLR C ;清进位标志CJNE A,#60H,HHH ;调整单元数据与 60 比较HHH: JC SET4 ;调整单元数据小于 60 转 SET4 循环LCALL CLR0 ;调整单元数据大于或等于 60 时清 0CLR C ;清进位标志AJMP SET4 ;跳转到 SET4 循环CLOSEDIS:SETB ET0 ;省电(LED 不显示)状态。开 T0 中断SETB TR0 ;开启 T0 定时器(开时钟)CLOSE: JB P3.7,CLOSE ;无按键按下,等待。LCALL D
36、ISPLAY ;有键按下,调显示子程序延时削抖JB P3.7,CLOSE ;是干扰返回 CLOSE 等待23WAITH: JNB P3.7,WAITH ;等待键释放LJMP START1 ;返回主程序(LED 数据显示亮)SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)SETHH1: JNB P3.7,SET5 ;等待键释放SETB 01H ;小时调整标志置 1SET6: JB P3.7,SET7 ;等待按键按下LCALL DL05S ;有键按下延时 0.5 秒JNB P3.7,SETOUT ;按下时间大于 0.5 秒退出时间调整MOV R0,#79H ;按下时间小于 0.5
37、秒加 1 小时操作LCALL ADD1 ;调加 1 子程序MOV A,R3 ;CLR C ;CJNE A,#24H,HOUU ;计时单元数据与 24 比较HOUU: JC SET6 ;小于 24 转 SET6 循环LCALL CLR0 ;大于或等于 24 时清 0 操作AJMP SET6 ;跳转到 SET6 循环SETOUT: JNB P3.7,SETOUT1;调时退出程序。等待键释放LCALL DISPLAY ;延时削抖JNB P3.7,SETOUT ;是抖动,返回 SETOUT 再等待CLR 01H ;清调小时标志CLR 00H ;清调分标志CLR 02H ;清闪烁标志CLR TR1 ;关
38、闭定时器 T1CLR ET1 ;关定时器 T1 中断SETB TR0 ;开启定时器 T0SETB ET0 ;开定时器 T0 中断(计时开始)LJMP START1 ;跳回主程序SET1: LCALL DISPLAY ;键释放等待时调用显示程序(调分)AJMP SET2 ;防止键按下时无时钟显示SET3: LCALL DISPLAY ;等待调分按键时时钟显示用AJMP SET424SET5: LCALL DISPLAY ;键释放等待时调用显示程序(调小时)AJMP SETHH1 ;防止键按下时无时钟显示SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用AJMP SET6SETO
39、UT1: LCALL DISPLAY ;退出时钟调整时键释放等待AJMP SETOUT ;防止键按下时无时钟显示; 显示程序 ; DISPLAY: MOV R1,#70H ;指向显示数据首址MOV R5,#0FEH ;扫描控制字初值PLAY: MOV A,R5 ;扫描字放入 AMOV P3,A ;从 P3 口输出MOV A,R1 ;取显示数据到 AMOV DPTR,#TAB ;取段码表地址MOVC A,A+DPTR ;查显示数据对应段码MOV P1,A ;段码放入 P1 口LCALL DL1M ;显示 1MSINC R1 ;指向下一地址MOV A,R5 ;扫描控制字放入 AJNB ACC.5,
40、ENDOU ;ACC.5=0 时一次显示结束RL A ;A 中数据循环左移MOV R5,A ;放回 R5 内AJMP PLAY ;跳回 PLAY 循环ENDOUT: SETB P3. ;一次显示结束,P3 口复位MOV P1,#0FF ;P1 口复位RET ;子程序返回TAB: DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90H,0FFH ;共阳段码表 ; 延时程序 ;1MS 延时程序,LED 显示程序用DL1MS: MOV R6,#14HDL1: MOV R7,#19H25DL2: DJNZ R7,DL2DJNZ R6,DL1RET;20MS
41、延时程序,采用调用显示子程序以改善 LED 的显示闪烁现象DS20MS: ACALL DISPLAYACALL DISPLAYACALL DISPLAYRET20MS 延时程序,用作按键时间的长短判断DL1S: LCALL DL05SLCALL DL05SRETDL05S: MOV R3,#20H ;8 毫秒*32=0.196 秒DL05S1: LCALL DISPLAYDJNZ R3,DL05S1RETEND ;程序结束26参考文献(1)李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社1998(2)THKSCM-1 型 单 片 机 实 验 系 统 实 验 指 导 书 、 KEIL 软 件 、 WAVE 软 件(3)数字控制与 PLC 实验室“THKSCM-1 型单片机实验系统”(4)李光才. 单片机课程设计 实例指导. 北京 北京航空航天大学出版社 2004