单片机的定时闹钟设计
单片机的定时闹钟设计[20200128194031]
摘要
本设计是简单定时闹钟系统,不仅能实现系统要求的功能:(1)能显示时时-分分-秒秒,(2)能设定和修改定时时间,(3)定时时间到后能发出报警声;而且还有附加功能,即还能设定和修改当前所显示的时间。
单片机具有集成度高、功能强、通用性好、特别是它能耗低、价格便宜、可靠性高、抗干扰能力强和使用方便等独特的优点,所以单片机现在广泛的应用到家用电器、机电产品、儿童玩具、机器人、办公自动化产品等领域。为了进一步的熟悉并掌握单片机的应用及开发,认真的做好此次课程设计非常必要。
选用单片机最小系统应用程序,实现闹钟功能,完成设计所需求的软件环境。测试程序的可行性并用Proteus进行仿真。
通过这次设计让我更深入了解单片机基本电路、如何控制和定时器和中断编程的基本方法,从而锻炼了我学习、设计和开发软、硬件的能力。
Summary
The design is simple the timing alarm system, not only to achieve the functionality of the system requirements: (1) sub-points - from time to time - seconds seconds, (2) to set and modify the regular time, (3) after regular time to alarm sound;, but also additional features that can set and modify the current display time.
Microcontroller with high integration, function, versatility, especially its low energy consumption, and the price is cheap, high reliability, strong anti-interference ability and unique advantages such as ease of use, so the microcontroller is now widely applied to household appliances, electromechanical products, childrens toys, robots, office automation products, and other fields. To further familiar with and master the application and development of microcontroller, seriously good the necessary curriculum design.
The chosen microcontroller minimum system applications, the alarm function, complete software environment design needs.test the feasibility of the program and Proteus simulation.
Through this design makes me a better understanding of microcontroller basic circuit, how to control and timer and interrupt programming exercise I learn, design and development of software and hardware capabilities.
目录
摘要 4
一.概述 5
(一) 单片机简介 5
(二) 本设计简介 6
二.系统总体方案及硬件设计 6
(一) 本设计总体方案 6
(二) AT89C51单片机简介 6
(三) 数码管显示电路 9
(四) 本设计输入输出电路 10
三、 软件设计 11
(一) 系统软件设计说明 11
(二) LED的编程理念 11
(三) 程序流程图 12
四、 Proteus软件仿真 12
(一) 仿真步骤 12
(二) 仿真结果 13
五、 课程设计体会与致谢 16
参考文献 16
附1:源程序代码 17
附2:原理图 27
一.概述
(一) 单片机简介
u 单片机基本概念
单片微型计算机简称单片机,是典型的嵌入式微控制器 (Microcontroller Unit),
单片机芯片
常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片 ,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。它最早是被用在工业控制领域。
u 单片机产生与发展
单片机诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8031,此后在8031上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品 大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机取代16位单片机的高端地位,进入主流市场。
8位单片机从1976年开始至今,其技术已有了巨大的发展,目前仍是单片机的主流机型。其发展阶段大致分为单片机探索阶段、单片机完善阶段、MCU形成阶段和MCU完善阶段。
u 单片机的发展方向
(1)主流机型发展趋势
(2)全盘CMOS化趋势
(3)RISC体系结构的大发展
(4)大力发展专用性单片机
(5)单片机中的软件嵌入
u 单片机的应用领域
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:智能仪器、工业控制、家用电器、网络和通信、医用设备领域、模块化系统、汽车电子。
u 单片机分类
(1)按应用领域
(2)按通用性
(3)按总线结构分为总线与非总线型
(4)按位数分类
(二) 本设计简介
u 课程设计的要求
1)能显示:时时分分秒秒
2)能够设定定时时间、修改定时时间
3)定时时间到能发出报警声
二.系统总体方案及硬件设计
(一) 本设计总体方案
本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。
本设计采用AT89C51作为核心元件,12MHZ晶振,由P0口输出所要显示的字形段码,由P2口输出字位信号。在其基础上扩展外围芯片与电路,附加时钟电路及LED电路。LED采用共阴极接法,低电平有效选中相应LED。
电路由下列部分组成:控制电路、时钟电路、复位电路、LED显示,警报电路。
(二) AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,和128B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51为用户提供了许多高性价比应用场合,可灵活应用于各种控制领域。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
主要特性:
·4K字节可编程闪烁存储器
·与MCS-51 兼容
·全静态工作:0Hz-24Hz
·寿命:1000写/擦循环
·数据保留时间:10年
·32可编程I/O线
·三级程序存储器锁定
·128×8位内部RAM
·两个16位定时器/计数器
·5个中断源
·低功耗的闲置和掉电模式
·可编程串行通道
·片内振荡器和时钟电路
引脚使用说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表2-1所示:
表2-1
管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
ST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度
图2-1
(三) 数码管显示电路
单片机中通常使用7段LED,LED即发光二极管显示器。LED显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,响应速度快,配置灵活,与单片机接口方便而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符类型。
LED七段数码显示器由8个发光二极管组成显示字符,根据内部发光二极管的连接形式不同,LED有共阴极和共阳极两种,本系统采用共阴极。
LED显示
当选用共阴极的LED时,所有发光二极管阴极连在一起接地,当某个发光二极管的阳极加入高电平时,对应的二极管点亮。因此要显示某字形就应使此字形的相应段的二极管点亮,实际上就是送一个用不同电平组合代表的数据字来控制LED的显示,此数据为字符的段码或称为字型码。字型码与LED显示器各段的关系如表2-2所示
表2-2
D0 D1 D2 D3 D4 D5 D6 D7
a b c d e f g dp
字符0、1、2……F的段码如表2-3所示
表2-3
字符 段码(共阴)
0 3FH
1 06H
2 5BH
3 4FH
4 66H
5 6DH
6 7DH
7 07H
8 7FH
9 6FH
A 77H
B 7CH
C 39H
D 5EH
E 79H
F 71H
- 40H
. 80H
熄灭 00H
下图2-2是本系统采用的共阴极LED七段数码显示器:
图2-2
(四) 本设计输入输出电路
该系统输入电路采用的是P1接口以及4个上拉电阻,其阻值为10千欧。
如下图2-3:
图2-3
三、 软件设计
(一) 系统软件设计说明
该系统软件程序主要有主程序模块,定时中断服务程序,中断等待服务程序,键盘服务程序,显示子程序服务程序等六大模块组成。系统的输出电路采用的是P0口和P2口,喇叭口采用P3.7口。
在AT89C51外围的一个17管脚即P3.7管口上加扬声器,通过软件与硬件的结合可实现定时报警功能。
图中按键从上往下设定为S1,S2,S3,S4,S1与p1.4相连,S2与p1.3相连,S3与p1.2相连,S4与p1.1相连。当需要设定当前时间时,按一下S4键,进入时间设定状态,按一下S2,分钟加1;按一下S3,小时加1。如此反复来设定当前时间。调好时间后按S1退出当前时间设定状态;当要设定定时时间时,按下S3,进入定时时间设定状态,按一下S2,小时加1;按一下S4,分钟加1。如此反复来设定要设定的定时时间。设好后,按下S1退出定时时间设定状态。
(二) LED的编程理念
本设计使用LED数码管显示,LED显示器具有耗电少、成本低、配置简单灵活、安装方便、耐震动等优点,因而应用广泛。该方案控制最简单,但是只能显示有限的符号和数字,对于设计中复杂的显示功能显然不能胜任。虽然点阵液晶可以显示多种字符,拥有友好的人机界面及强大的显示功能。特别适用于智能控制的人性化显示。但是考虑到本设计的要求,使用数码管显示就足以达到要求了。七段LED由七个发光二极管按日字排开,所有发光二极管的阴极连在一块称共阴极接法。当采用芯片驱动时不需要加限流电阻,其他情况下一般应外接限流电阻。动态显示电路有显示块,字形码封锁驱动器,字位锁存驱动器三部分组成。
(三) 程序流程图
本设计程序流程图如3-1所示:
图3-1
四、 Proteus软件仿真
(一) 仿真步骤
在Proteus的元件库中找到AT89C51以及相应的元件,按照说明把各部件连接起来组成一个定时闹钟的硬件系统。
把在调试环境下生成的.HEX文件装入到AT89C51里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现。
验证系统能否实现所要求的功能,并检验错误。
(二) 仿真结果
(1)设定当前时间当需要设定当前时间时,按一下S4键,进入时间设定状态,按一下S2,分钟加1;按一下S3,小时加1。如此反复来设定当前时间。调好时间后按S1退出当前时间设定状态。
开始仿真时,显示如图4-1所示:
图4-1
图中按键依次设定为S1,S2,S3,S4,S1与p1.4相连,S2与p1.3相连,S3与p1.2相连,S4与p1.1相连。
如图4-2:设定当前的时间是02:02:54。
图4-2
(2)设定定时时间
当要设定定时时间时,按S3,进入定时时间设定状态,按一下S2,小时加1;按一下S4,分钟加1。如此反复设定要设定的定时时间。按下S1则表示退出定时时间设定状态。开始仿真时,直接按S3进行闹钟设定,假设设定定时时间为07:06。
如图4-3所示图:设定定时时间为07:06
图4-3
图4-4是达到设定时间的仿真图:
图4-4
与图4-3不同的是:
(1)当到达时间07:05:59时,“0706”这几个字汇不停的闪烁,且字型管脚全为高电平,如图4-5所示.
图4-5
(2)扬声器发出报警声,且扬声器两端同时变为高电平,而在图4-8中扬声器一端为高电平,另一端为低电平。
图4-6 图4-3中扬声器状态
图4-7 图4-4中扬声器状态
五、 课程设计体会与致谢
首先,感谢我的指导老师周步新老师,从课题选择、开题,到系统开发、论文写作,整个过程,周老师都倾注了大量的心血。正是周老师科学、严谨的指导下,我的研究课题才能顺利进行,这篇研究论文也才得以顺利完成。虽然我在写论文是也有多种问题,可是周老师还是给予我很多的宽容、理解。再次向我的指导老师周步新老师表示深深的敬意和感谢!
单片机是一门应用性很强的学科,课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程,为自己今后从事与单片机控制系统有关的工作打下了基础。
"反复修改,不断改进"是程序设计的必经之路。 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
总之,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写设计报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,看到自己几周的小成果,感觉一切的辛苦和艰难都是值得的。
参考文献
[1]余发山著.单片机原理及应用技术江苏:中国矿业大学出版社. 2003
[2]阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989
[3]廖常初.现场总线概述[J].电工技术,1999.
[4]康华光.数字电子技术.??北京: 高等教育出版社,2003
[5]吴金戌.8051单片机实践与应用. 北京:? 清华大学出版社,2003
[6]楼然苗.51系列单片机设计实例. 北京:? 北京航空航天出版社,2004
[7]黄仁欣.单片机原理及应用技术.? 北京: 清华大学出版社, 2005
[8] 何立民. 单片机高级教程. 第1版.北京:北京航空航天大学出版社,2001
[9]李广第. 单片机基础. 第1版.北京:北京航空航天大学出版社,1999
[10]徐惠民、安德宁. 单片微型计算机原理接口与应用. 第1版. 北京:北京邮电大学出版社,1996
附1:源程序代码
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIME
;×××××主程序部分:×××××
ORG 0100H
MAIN:MOV SP,#50H
MOV 20H,#00H ;秒钟 BIN
MOV 21H,#00H ;分钟 BIN
MOV 22H,#00H ;小时 BIN
MOV 23H,#01H
MOV 24H,#01H
MOV 25H,#00H
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
MOV 36H,#01H
MOV 37H,#00H
MOV 38H,#01H
MOV 39H,#00H
MOV TMOD,#01H ;16位计数器
MOV TH0,#03CH ;赋计数初值
MOV TL0,#0B0H
MOV IE,#10000111B
SETB TR0 ;T0启动计数
MOV R2,#14H
MOV P2,#0FFH
LOOP: LCALL TIMEPRO
LCALL DISPLAY1
JB P1.1,M1
LCALL SETTIME ;调用设定时间程序
LJMP LOOP
M1:JB P1.2,M2
LCALL SETATIME ;调用设定时间程序
LJMP LOOP
M2:JB P1.4,M4
LCALL LOOKATIME ;调用设定闹钟时间程序
M4:LJMP LOOP
DELAY:MOV R4,#030H ;延时时间
DL00:MOV R5,#0FFH
DL11:MOV R6,#9H
DL12:DJNZ R6,DL12
DJNZ R5,DL11
DJNZ R4,DL00
RET
;×××××设定时间程序:×××××
SETTIME:
L0:LCALL DISPLAY1 ;调用时间允许程序
MM1: JB P1.2,L1
MOV C,P1.2
JC MM1
LCALL DELAY1 ;调用延时
JC MM1
MSTOP1: MOV C,P1.2
JNC MSTOP1 ;判断P1.2是否释放?释放则继续
LCALL DELAY1 ;调用延时
MOV C,P1.2
JNC MSTOP1
INC 22H ;小时增加1
MOV A,22H
CJNE A,#18H,GO12 ;判断小时是否到24时?未到继续循环
MOV 22H,#00H ;小时复位
MOV 34H,#00H
MOV 35H,#00H
LJMP L0
L1:JB P1.3,L2
MOV C,P1.3
JC L1
LCALL DELAY1 ;延时
JC L1
MSTOP2: MOV C,P1.3
JNC MSTOP2 ;判断P1.3是否释放?释放则继续
LCALL DELAY1 ;调用延时
MOV C,P1.3
JNC MSTOP2
INC 21H ;分钟增加一
MOV A,21H
CJNE A,#3CH,GO11
MOV 21H,#00H ;分钟复位
MOV 32H,#00H
MOV 33H,#00H
LJMP L0
GO11:MOV B,#0AH ;将A中的内容分成高低两部分
DIV AB
MOV 32H,B
MOV 33H,A
LJMP L0
GO12: MOV B,#0AH
DIV AB
MOV 34H,B
MOV 35H,A
LJMP L0
L2:JB P1.4,L0
MOV C,P1.4
JC L2
LCALL DELAY1 ;调用延时
MOV C,P1.4
JC L2
STOP1: MOV C,P1.4 ;判断按键P1.4是否释放?
JNC STOP1
LCALL DELAY1 ;调用延时
MOV C,P1.4
JNC STOP1
LJMP LOOP
;×××××设置闹钟时间×××××
SETATIME:LCALL DISPLAY2 ;调用时间运行
N0:LCALL DISPLAY2
MM2: JB P1.3,N1 ;判断P1.3是否按下?
MOV C,P1.3
JC MM2
LCALL DELAY1
JC MM2
MSTOP3: MOV C,P1.3 ;判断P1.3是否释放?
JNC MSTOP3
LCALL DELAY1
MOV C,P1.3
JNC MSTOP3
INC 24H ;设定小时增加1
MOV A,24H
CJNE A,#24,GO22
MOV 24H,#00H ;时钟复位
MOV 38H,#00H
MOV 39H,#00H
LJMP N0
N1:JB P1.1,N2 ;判断P1.1是否按下?
MOV C,P1.1
JC N1
LCALL DELAY1
JC N1
MSTOP4: MOV C,P1.1 ;判断P1.1是否释放?
JNC MSTOP4
LCALL DELAY1
MOV C,P1.1
JNC MSTOP4
INC 23H ;设定闹钟分钟增加1
MOV A,23H
CJNE A,#60,GO21 ;判断A是否到60分?
MOV 23H,#00H ;分钟复位
MOV 36H,#00H
MOV 37H,#00H
LJMP N0
GO21:MOV B,#0AH ;将A中的内容分成高低两部分
DIV AB
MOV 36H,B
MOV 37H,A
LJMP N0
GO22: MOV B,#0AH
DIV AB
MOV 38H,B
MOV 39H,A
LJMP N0
N2:JB P1.4 ,N0 ;判断P1.4是否按下?
MOV C,P1.4
JC N2
LCALL DELAY1
MOV C,P1.4
JC N2
STOP2: MOV C,P1.4 ;判断P1.4是否释放?
JNC STOP2
LCALL DELAY1
MOV C,P1.4
JNC STOP2
LJMP LOOP
TIMEPRO:MOV A,21H
MOV B,23H
CJNE A,B,BK ;判断分钟是否运行到设定的闹钟的分钟?
MOV A,22H
MOV B,24H
CJNE A,B,BK ;判断时钟是否运行到设定的闹钟的时钟?
SETB 25H.0
MOV C,25H.0
JC XX
XX: LCALL TIMEOUT ;调用时间闹钟响应程序
BK:RET
TIMEOUT:
X1:LCALL BZ ;调用喇叭响应程序
LCALL DISPLAY2
CLR 25H.0
JB P1.4, X1 ;判断P1.4是否按下?
LCALL DELAY
CLR 25H.0
LJMP DISPLAY1
BZ: CLR P3.7 ;喇叭响应程序
MOV R7,#250 ;响应延时时间
T2: MOV R6,#124
T3: DJNZ R6,T3
DJNZ R7,T2
SETB P3.7
RET
LOOKATIME:LCALL DISPLAY2 ;调用时间运行程序
MM: JB P1.4,LOOKATIME ;判断按键P1.4是否按下
MOV C,P1.4
JC MM
LCALL DELAY1
MOV C,P1.4
JC MM
STOP3: MOV C,P1.4
JNC STOP3
LCALL DELAY1
MOV C,P1.4
JNC STOP3
LJMP LOOP
DELAY1: MOV R4,#14H ;时间延时
DL001: MOV R5,#0FFH
DL111: DJNZ R5,DL111
DJNZ R4,DL001
RET
;×××××时间运行程序×××××
TIME: PUSH ACC ;现场保护
PUSH PSW
MOV TH0,#03CH ;赋初值
MOV TL0,#0B0H
DJNZ R2,RET0
MOV R2,#14H
MOV A,20H
CLR C
INC A ;秒钟自加1
CJNE A,#3CH,GO1 ;判断秒钟是否到60秒?
MOV 20H,#0 ;到60秒复位
MOV 30H,#0
MOV 31H,#0
MOV A,21H
INC A ;分钟自加1
CJNE A,#3CH,GO2 ;判断分钟是否到60分?
MOV 21H,#0H ;到60分复位
MOV 32H,#0
MOV 33H,#0
MOV A,22H
INC A ;时钟自加1
CJNE A,#18H,GO3 ;判断时钟是否到24时?
MOV 22H,#00H ;到24时复位
MOV 34H,#0
MOV 35H,#0
AJMP RET0
GO1: MOV 20H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
AJMP RET0
GO2: MOV 21H,A
MOV B,#0AH
DIV AB
MOV 33H,A
MOV 32H,B
AJMP RET0
GO3: MOV 22H,A
MOV B,#0AH
DIV AB
MOV 35H,A
MOV 34H,B
AJMP RET0
RET0: POP PSW ;恢复现场
POP ACC
RETI
;×××××运行部分×××××
DISPLAY1: MOV R0,#30H
MOV R3,#0FEH
MOV A,R3
PLAY1: MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1 ;表首地址送DPTR
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1
MOV P2,#0FFH ;送高电平到P2
MOV A,R3
RL A ;
JNB ACC.6,LD1
INC R0
MOV R3,A
LJMP PLAY1 ;调用查表程序
LD1: RET
DISPLAY2: PUSH ACC ;现场保护
PUSH PSW
MOV R0,#36H
MOV R3,#0FBH
MOV A,R3
PLAY2: MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1 ;表首地址送DPTR
MOVC A,@A+DPTR ;查ASCII特码
MOV P0,A ;查表结果送A
LCALL DL1
MOV P2,#0FFH ;送高电平到P2
MOV A,R3
RL A
JNB ACC.6,LD2
INC R0
MOV R3,A
LJMP PLAY2
LD2: POP PSW ;恢复现场
POP ACC
RET
;×××××延时时间×××××
DL1: MOV R7,#02H ;延时时间
DL: MOV R6,#0200H
DL6: DJNZ R6,$
DJNZ R7,DL
RET
DSEG1:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END附2:原理图
*查看完整论文请+Q: 351916072
关键字:
摘要
本设计是简单定时闹钟系统,不仅能实现系统要求的功能:(1)能显示时时-分分-秒秒,(2)能设定和修改定时时间,(3)定时时间到后能发出报警声;而且还有附加功能,即还能设定和修改当前所显示的时间。
单片机具有集成度高、功能强、通用性好、特别是它能耗低、价格便宜、可靠性高、抗干扰能力强和使用方便等独特的优点,所以单片机现在广泛的应用到家用电器、机电产品、儿童玩具、机器人、办公自动化产品等领域。为了进一步的熟悉并掌握单片机的应用及开发,认真的做好此次课程设计非常必要。
选用单片机最小系统应用程序,实现闹钟功能,完成设计所需求的软件环境。测试程序的可行性并用Proteus进行仿真。
通过这次设计让我更深入了解单片机基本电路、如何控制和定时器和中断编程的基本方法,从而锻炼了我学习、设计和开发软、硬件的能力。
Summary
The design is simple the timing alarm system, not only to achieve the functionality of the system requirements: (1) sub-points - from time to time - seconds seconds, (2) to set and modify the regular time, (3) after regular time to alarm sound;, but also additional features that can set and modify the current display time.
Microcontroller with high integration, function, versatility, especially its low energy consumption, and the price is cheap, high reliability, strong anti-interference ability and unique advantages such as ease of use, so the microcontroller is now widely applied to household appliances, electromechanical products, childrens toys, robots, office automation products, and other fields. To further familiar with and master the application and development of microcontroller, seriously good the necessary curriculum design.
The chosen microcontroller minimum system applications, the alarm function, complete software environment design needs.test the feasibility of the program and Proteus simulation.
Through this design makes me a better understanding of microcontroller basic circuit, how to control and timer and interrupt programming exercise I learn, design and development of software and hardware capabilities.
目录
摘要 4
一.概述 5
(一) 单片机简介 5
(二) 本设计简介 6
二.系统总体方案及硬件设计 6
(一) 本设计总体方案 6
(二) AT89C51单片机简介 6
(三) 数码管显示电路 9
(四) 本设计输入输出电路 10
三、 软件设计 11
(一) 系统软件设计说明 11
(二) LED的编程理念 11
(三) 程序流程图 12
四、 Proteus软件仿真 12
(一) 仿真步骤 12
(二) 仿真结果 13
五、 课程设计体会与致谢 16
参考文献 16
附1:源程序代码 17
附2:原理图 27
一.概述
(一) 单片机简介
u 单片机基本概念
单片微型计算机简称单片机
单片机芯片
常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器
u 单片机产生与发展
单片机
8位单片机从1976年开始至今,其技术已有了巨大的发展,目前仍是单片机的主流机型。其发展阶段大致分为单片机探索阶段、单片机完善阶段、MCU形成阶段和MCU完善阶段。
u 单片机的发展方向
(1)主流机型发展趋势
(2)全盘CMOS化趋势
(3)RISC体系结构的大发展
(4)大力发展专用性单片机
(5)单片机中的软件嵌入
u 单片机的应用领域
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:智能仪器、工业控制、家用电器、网络和通信、医用设备领域、模块化系统、汽车电子。
u 单片机分类
(1)按应用领域
(2)按通用性
(3)按总线结构分为总线与非总线型
(4)按位数分类
(二) 本设计简介
u 课程设计的要求
1)能显示:时时分分秒秒
2)能够设定定时时间、修改定时时间
3)定时时间到能发出报警声
二.系统总体方案及硬件设计
(一) 本设计总体方案
本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。
本设计采用AT89C51作为核心元件,12MHZ晶振,由P0口输出所要显示的字形段码,由P2口输出字位信号。在其基础上扩展外围芯片与电路,附加时钟电路及LED电路。LED采用共阴极接法,低电平有效选中相应LED。
电路由下列部分组成:控制电路、时钟电路、复位电路、LED显示,警报电路。
(二) AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,和128B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51为用户提供了许多高性价比应用场合,可灵活应用于各种控制领域。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
主要特性:
·4K字节可编程闪烁存储器
·与MCS-51 兼容
·全静态工作:0Hz-24Hz
·寿命:1000写/擦循环
·数据保留时间:10年
·32可编程I/O线
·三级程序存储器锁定
·128×8位内部RAM
·两个16位定时器/计数器
·5个中断源
·低功耗的闲置和掉电模式
·可编程串行通道
·片内振荡器和时钟电路
引脚使用说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表2-1所示:
表2-1
管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
ST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度
图2-1
(三) 数码管显示电路
单片机中通常使用7段LED,LED即发光二极管显示器。LED显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,响应速度快,配置灵活,与单片机接口方便而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符类型。
LED七段数码显示器由8个发光二极管组成显示字符,根据内部发光二极管的连接形式不同,LED有共阴极和共阳极两种,本系统采用共阴极。
LED显示
当选用共阴极的LED时,所有发光二极管阴极连在一起接地,当某个发光二极管的阳极加入高电平时,对应的二极管点亮。因此要显示某字形就应使此字形的相应段的二极管点亮,实际上就是送一个用不同电平组合代表的数据字来控制LED的显示,此数据为字符的段码或称为字型码。字型码与LED显示器各段的关系如表2-2所示
表2-2
D0 D1 D2 D3 D4 D5 D6 D7
a b c d e f g dp
字符0、1、2……F的段码如表2-3所示
表2-3
字符 段码(共阴)
0 3FH
1 06H
2 5BH
3 4FH
4 66H
5 6DH
6 7DH
7 07H
8 7FH
9 6FH
A 77H
B 7CH
C 39H
D 5EH
E 79H
F 71H
- 40H
. 80H
熄灭 00H
下图2-2是本系统采用的共阴极LED七段数码显示器:
图2-2
(四) 本设计输入输出电路
该系统输入电路采用的是P1接口以及4个上拉电阻,其阻值为10千欧。
如下图2-3:
图2-3
三、 软件设计
(一) 系统软件设计说明
该系统软件程序主要有主程序模块,定时中断服务程序,中断等待服务程序,键盘服务程序,显示子程序服务程序等六大模块组成。系统的输出电路采用的是P0口和P2口,喇叭口采用P3.7口。
在AT89C51外围的一个17管脚即P3.7管口上加扬声器,通过软件与硬件的结合可实现定时报警功能。
图中按键从上往下设定为S1,S2,S3,S4,S1与p1.4相连,S2与p1.3相连,S3与p1.2相连,S4与p1.1相连。当需要设定当前时间时,按一下S4键,进入时间设定状态,按一下S2,分钟加1;按一下S3,小时加1。如此反复来设定当前时间。调好时间后按S1退出当前时间设定状态;当要设定定时时间时,按下S3,进入定时时间设定状态,按一下S2,小时加1;按一下S4,分钟加1。如此反复来设定要设定的定时时间。设好后,按下S1退出定时时间设定状态。
(二) LED的编程理念
本设计使用LED数码管显示,LED显示器具有耗电少、成本低、配置简单灵活、安装方便、耐震动等优点,因而应用广泛。该方案控制最简单,但是只能显示有限的符号和数字,对于设计中复杂的显示功能显然不能胜任。虽然点阵液晶可以显示多种字符,拥有友好的人机界面及强大的显示功能。特别适用于智能控制的人性化显示。但是考虑到本设计的要求,使用数码管显示就足以达到要求了。七段LED由七个发光二极管按日字排开,所有发光二极管的阴极连在一块称共阴极接法。当采用芯片驱动时不需要加限流电阻,其他情况下一般应外接限流电阻。动态显示电路有显示块,字形码封锁驱动器,字位锁存驱动器三部分组成。
(三) 程序流程图
本设计程序流程图如3-1所示:
图3-1
四、 Proteus软件仿真
(一) 仿真步骤
在Proteus的元件库中找到AT89C51以及相应的元件,按照说明把各部件连接起来组成一个定时闹钟的硬件系统。
把在调试环境下生成的.HEX文件装入到AT89C51里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现。
验证系统能否实现所要求的功能,并检验错误。
(二) 仿真结果
(1)设定当前时间当需要设定当前时间时,按一下S4键,进入时间设定状态,按一下S2,分钟加1;按一下S3,小时加1。如此反复来设定当前时间。调好时间后按S1退出当前时间设定状态。
开始仿真时,显示如图4-1所示:
图4-1
图中按键依次设定为S1,S2,S3,S4,S1与p1.4相连,S2与p1.3相连,S3与p1.2相连,S4与p1.1相连。
如图4-2:设定当前的时间是02:02:54。
图4-2
(2)设定定时时间
当要设定定时时间时,按S3,进入定时时间设定状态,按一下S2,小时加1;按一下S4,分钟加1。如此反复设定要设定的定时时间。按下S1则表示退出定时时间设定状态。开始仿真时,直接按S3进行闹钟设定,假设设定定时时间为07:06。
如图4-3所示图:设定定时时间为07:06
图4-3
图4-4是达到设定时间的仿真图:
图4-4
与图4-3不同的是:
(1)当到达时间07:05:59时,“0706”这几个字汇不停的闪烁,且字型管脚全为高电平,如图4-5所示.
图4-5
(2)扬声器发出报警声,且扬声器两端同时变为高电平,而在图4-8中扬声器一端为高电平,另一端为低电平。
图4-6 图4-3中扬声器状态
图4-7 图4-4中扬声器状态
五、 课程设计体会与致谢
首先,感谢我的指导老师周步新老师,从课题选择、开题,到系统开发、论文写作,整个过程,周老师都倾注了大量的心血。正是周老师科学、严谨的指导下,我的研究课题才能顺利进行,这篇研究论文也才得以顺利完成。虽然我在写论文是也有多种问题,可是周老师还是给予我很多的宽容、理解。再次向我的指导老师周步新老师表示深深的敬意和感谢!
单片机是一门应用性很强的学科,课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程,为自己今后从事与单片机控制系统有关的工作打下了基础。
"反复修改,不断改进"是程序设计的必经之路。 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
总之,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写设计报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,看到自己几周的小成果,感觉一切的辛苦和艰难都是值得的。
参考文献
[1]余发山著.单片机原理及应用技术江苏:中国矿业大学出版社. 2003
[2]阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989
[3]廖常初.现场总线概述[J].电工技术,1999.
[4]康华光.数字电子技术.??北京: 高等教育出版社,2003
[5]吴金戌.8051单片机实践与应用. 北京:? 清华大学出版社,2003
[6]楼然苗.51系列单片机设计实例. 北京:? 北京航空航天出版社,2004
[7]黄仁欣.单片机原理及应用技术.? 北京: 清华大学出版社, 2005
[8] 何立民. 单片机高级教程. 第1版.北京:北京航空航天大学出版社,2001
[9]李广第. 单片机基础. 第1版.北京:北京航空航天大学出版社,1999
[10]徐惠民、安德宁. 单片微型计算机原理接口与应用. 第1版. 北京:北京邮电大学出版社,1996
附1:源程序代码
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIME
;×××××主程序部分:×××××
ORG 0100H
MAIN:MOV SP,#50H
MOV 20H,#00H ;秒钟 BIN
MOV 21H,#00H ;分钟 BIN
MOV 22H,#00H ;小时 BIN
MOV 23H,#01H
MOV 24H,#01H
MOV 25H,#00H
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
MOV 36H,#01H
MOV 37H,#00H
MOV 38H,#01H
MOV 39H,#00H
MOV TMOD,#01H ;16位计数器
MOV TH0,#03CH ;赋计数初值
MOV TL0,#0B0H
MOV IE,#10000111B
SETB TR0 ;T0启动计数
MOV R2,#14H
MOV P2,#0FFH
LOOP: LCALL TIMEPRO
LCALL DISPLAY1
JB P1.1,M1
LCALL SETTIME ;调用设定时间程序
LJMP LOOP
M1:JB P1.2,M2
LCALL SETATIME ;调用设定时间程序
LJMP LOOP
M2:JB P1.4,M4
LCALL LOOKATIME ;调用设定闹钟时间程序
M4:LJMP LOOP
DELAY:MOV R4,#030H ;延时时间
DL00:MOV R5,#0FFH
DL11:MOV R6,#9H
DL12:DJNZ R6,DL12
DJNZ R5,DL11
DJNZ R4,DL00
RET
;×××××设定时间程序:×××××
SETTIME:
L0:LCALL DISPLAY1 ;调用时间允许程序
MM1: JB P1.2,L1
MOV C,P1.2
JC MM1
LCALL DELAY1 ;调用延时
JC MM1
MSTOP1: MOV C,P1.2
JNC MSTOP1 ;判断P1.2是否释放?释放则继续
LCALL DELAY1 ;调用延时
MOV C,P1.2
JNC MSTOP1
INC 22H ;小时增加1
MOV A,22H
CJNE A,#18H,GO12 ;判断小时是否到24时?未到继续循环
MOV 22H,#00H ;小时复位
MOV 34H,#00H
MOV 35H,#00H
LJMP L0
L1:JB P1.3,L2
MOV C,P1.3
JC L1
LCALL DELAY1 ;延时
JC L1
MSTOP2: MOV C,P1.3
JNC MSTOP2 ;判断P1.3是否释放?释放则继续
LCALL DELAY1 ;调用延时
MOV C,P1.3
JNC MSTOP2
INC 21H ;分钟增加一
MOV A,21H
CJNE A,#3CH,GO11
MOV 21H,#00H ;分钟复位
MOV 32H,#00H
MOV 33H,#00H
LJMP L0
GO11:MOV B,#0AH ;将A中的内容分成高低两部分
DIV AB
MOV 32H,B
MOV 33H,A
LJMP L0
GO12: MOV B,#0AH
DIV AB
MOV 34H,B
MOV 35H,A
LJMP L0
L2:JB P1.4,L0
MOV C,P1.4
JC L2
LCALL DELAY1 ;调用延时
MOV C,P1.4
JC L2
STOP1: MOV C,P1.4 ;判断按键P1.4是否释放?
JNC STOP1
LCALL DELAY1 ;调用延时
MOV C,P1.4
JNC STOP1
LJMP LOOP
;×××××设置闹钟时间×××××
SETATIME:LCALL DISPLAY2 ;调用时间运行
N0:LCALL DISPLAY2
MM2: JB P1.3,N1 ;判断P1.3是否按下?
MOV C,P1.3
JC MM2
LCALL DELAY1
JC MM2
MSTOP3: MOV C,P1.3 ;判断P1.3是否释放?
JNC MSTOP3
LCALL DELAY1
MOV C,P1.3
JNC MSTOP3
INC 24H ;设定小时增加1
MOV A,24H
CJNE A,#24,GO22
MOV 24H,#00H ;时钟复位
MOV 38H,#00H
MOV 39H,#00H
LJMP N0
N1:JB P1.1,N2 ;判断P1.1是否按下?
MOV C,P1.1
JC N1
LCALL DELAY1
JC N1
MSTOP4: MOV C,P1.1 ;判断P1.1是否释放?
JNC MSTOP4
LCALL DELAY1
MOV C,P1.1
JNC MSTOP4
INC 23H ;设定闹钟分钟增加1
MOV A,23H
CJNE A,#60,GO21 ;判断A是否到60分?
MOV 23H,#00H ;分钟复位
MOV 36H,#00H
MOV 37H,#00H
LJMP N0
GO21:MOV B,#0AH ;将A中的内容分成高低两部分
DIV AB
MOV 36H,B
MOV 37H,A
LJMP N0
GO22: MOV B,#0AH
DIV AB
MOV 38H,B
MOV 39H,A
LJMP N0
N2:JB P1.4 ,N0 ;判断P1.4是否按下?
MOV C,P1.4
JC N2
LCALL DELAY1
MOV C,P1.4
JC N2
STOP2: MOV C,P1.4 ;判断P1.4是否释放?
JNC STOP2
LCALL DELAY1
MOV C,P1.4
JNC STOP2
LJMP LOOP
TIMEPRO:MOV A,21H
MOV B,23H
CJNE A,B,BK ;判断分钟是否运行到设定的闹钟的分钟?
MOV A,22H
MOV B,24H
CJNE A,B,BK ;判断时钟是否运行到设定的闹钟的时钟?
SETB 25H.0
MOV C,25H.0
JC XX
XX: LCALL TIMEOUT ;调用时间闹钟响应程序
BK:RET
TIMEOUT:
X1:LCALL BZ ;调用喇叭响应程序
LCALL DISPLAY2
CLR 25H.0
JB P1.4, X1 ;判断P1.4是否按下?
LCALL DELAY
CLR 25H.0
LJMP DISPLAY1
BZ: CLR P3.7 ;喇叭响应程序
MOV R7,#250 ;响应延时时间
T2: MOV R6,#124
T3: DJNZ R6,T3
DJNZ R7,T2
SETB P3.7
RET
LOOKATIME:LCALL DISPLAY2 ;调用时间运行程序
MM: JB P1.4,LOOKATIME ;判断按键P1.4是否按下
MOV C,P1.4
JC MM
LCALL DELAY1
MOV C,P1.4
JC MM
STOP3: MOV C,P1.4
JNC STOP3
LCALL DELAY1
MOV C,P1.4
JNC STOP3
LJMP LOOP
DELAY1: MOV R4,#14H ;时间延时
DL001: MOV R5,#0FFH
DL111: DJNZ R5,DL111
DJNZ R4,DL001
RET
;×××××时间运行程序×××××
TIME: PUSH ACC ;现场保护
PUSH PSW
MOV TH0,#03CH ;赋初值
MOV TL0,#0B0H
DJNZ R2,RET0
MOV R2,#14H
MOV A,20H
CLR C
INC A ;秒钟自加1
CJNE A,#3CH,GO1 ;判断秒钟是否到60秒?
MOV 20H,#0 ;到60秒复位
MOV 30H,#0
MOV 31H,#0
MOV A,21H
INC A ;分钟自加1
CJNE A,#3CH,GO2 ;判断分钟是否到60分?
MOV 21H,#0H ;到60分复位
MOV 32H,#0
MOV 33H,#0
MOV A,22H
INC A ;时钟自加1
CJNE A,#18H,GO3 ;判断时钟是否到24时?
MOV 22H,#00H ;到24时复位
MOV 34H,#0
MOV 35H,#0
AJMP RET0
GO1: MOV 20H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
AJMP RET0
GO2: MOV 21H,A
MOV B,#0AH
DIV AB
MOV 33H,A
MOV 32H,B
AJMP RET0
GO3: MOV 22H,A
MOV B,#0AH
DIV AB
MOV 35H,A
MOV 34H,B
AJMP RET0
RET0: POP PSW ;恢复现场
POP ACC
RETI
;×××××运行部分×××××
DISPLAY1: MOV R0,#30H
MOV R3,#0FEH
MOV A,R3
PLAY1: MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1 ;表首地址送DPTR
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1
MOV P2,#0FFH ;送高电平到P2
MOV A,R3
RL A ;
JNB ACC.6,LD1
INC R0
MOV R3,A
LJMP PLAY1 ;调用查表程序
LD1: RET
DISPLAY2: PUSH ACC ;现场保护
PUSH PSW
MOV R0,#36H
MOV R3,#0FBH
MOV A,R3
PLAY2: MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1 ;表首地址送DPTR
MOVC A,@A+DPTR ;查ASCII特码
MOV P0,A ;查表结果送A
LCALL DL1
MOV P2,#0FFH ;送高电平到P2
MOV A,R3
RL A
JNB ACC.6,LD2
INC R0
MOV R3,A
LJMP PLAY2
LD2: POP PSW ;恢复现场
POP ACC
RET
;×××××延时时间×××××
DL1: MOV R7,#02H ;延时时间
DL: MOV R6,#0200H
DL6: DJNZ R6,$
DJNZ R7,DL
RET
DSEG1:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END附2:原理图
*查看完整论文请+Q: 351916072
关键字:
版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jxgc/zdh/4531.html