基于89C52单片机的电子时钟设计_毕业设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东华理工大学长江学院
毕业设计
题目基于89C52单片机的电子时钟设计
英文题目Electronic Clock Design Based on 89C52
学生姓名陈志仁
学号09325202
专业电子信息工程
系别机械与电子工程系
指导教师黄河职称讲师
二零一三年六月
摘要
至今,微处置器的进展已有40连年的历史,起初由美国Intel公司首推的4为微处置器Intel4004,实现将单片处置器和运算器等元件集成在一片电路芯片上。
尔后微处置器的迅猛进展,微处置器内集成的元件也愈来愈多,其中包括增加了存储器、I/O接口电路、按时/计数器、串行通信口、中断操纵、系统总线和系统时钟等,大大增强了微处置器的性能,并针对特定的领域制作出最大效率的微处置器。
不同功能的微处置器称为微操纵器,也被咱们简称为单片机。
本文要紧介绍以单片机ST89C52和DS12C887时钟芯片为核心的电子时钟显示,LCD1602为液晶显示器件,此电子时钟显示具有年月日等大体时刻显示,和秒表计时处置、闹钟按时、蜂鸣、温度的设计。
单片机通过对时钟、温度等数据处置后传送至LCD 显示输出,也可通过按键对时刻进行调剂。
通过单片机外围接口的扩展实现温度搜集等功能。
关键词:电子时钟;AT89C52;计时;温度
ABSTRACT
This project mainly introduces that the electronic clock which based on microcontroller ST89C52 Liquid crystal display devices's electronic clock display has the date and time timing processing, alarm clock timing and the design of buzzer, through the clock, temperature and other data processing and transmits signals to the LCD display output, also by adjusting button for the expansion of single-chip peripheral interface to achieve temperature acquisition functions.
Key words: electronic clock;ST89C52;timing ;temperature
第一章绪论
系统设计的背景和意义
电子时钟设计的背景
随着微电子技术的迅猛进展,电子产品技术也取得了专门大的提高,单片机技术也一样水涨船高。
单片机是把一个运算机系统集成到一个芯片上,它的产生是近代运算机技术进展史上一个重要的里程碑,它标志这运算机正式形成了通用运算机系统和嵌入式运算机系统两大分支。
以单片机为核心的智能化产品将运算机技术、信息处置技术和电子测量与操纵技术结合在一路,把智能给予各类机械装置,对传统的产品结构和应用方式产生了本质性的变革。
由于其微小的体积和低本钱的投入已普遍涉及现代人类生活中所用的电子和机械产品中,其中电话、、计算器、家用电器、电子玩具、电脑和鼠标等电脑配件中都集成有至少1部单片机。
电子时钟设计的意义
从古时的日晷、沙漏计时到近代的机械计时,再延续到现代的通过数字电路实现计时,其按时的准确性和精度都不是超级的理想,随着单片机的体积小、易操纵、功能强、价钱低廉、稳固靠得住、集成度高等优势,注定了它的普遍普及。
在智能家居、工业操纵、通信、航天等领域有着极大的作用。
电子时钟集成的单片机,极大的提高了电子时钟显示的准确性和快捷性,最大化的方便了人们。
另外由于单片机的精准性大到工业进程中的大型操纵系统,小到早已遍及全世界的儿童玩具和智能家居操纵,无时无刻的阻碍和方便人类的生活。
一样的因为单片机的功能强、体积小、质量轻、灵活好用、性价比高等优良的性能,使得它能够更好地融入到更多更全面的系统中,能够组成许多功能不同的微电子产品。
依照这种实际情形,设计了只采纳一个单片机制作的多功能电子时钟,具有了最大体的时刻日期显示功能,按时闹铃功能和温度显示功能,和秒表功能,还能够针对家电等电气产品的自动操纵对其进行相应的扩展,一样能够幸免操作繁琐的操纵器而产生的失误,准确实现“一对多”的操纵;温度传感器的添加,使得此电子时钟能够准确,快捷的进行温度显示,为人们的生活工作提供的极大的便利。
对此设计还能够进一步的扩展利用,也可在此设计添加湿度传感器,进而实时进行湿度的显示。
电子时钟设计的应用
电子钟已成为人们日常生活中不可或缺的生活品,普遍是广场,旅店等公共场合的必需设施,给人们的衣食住行带来极大的方便。
由于单片机集成系统技术的迅猛进展,使电子时钟具有走时准确、性能稳固、携带方便、性价比高等优势能够组成许多功能不同的微电子产品。
方案论证
电子时钟电路的种类繁多,有通过数字电路和单片机集成等等,针对各类各样的情形或不同领域所需要的电子时钟的要求也不尽相同,在生活上需要的电子时钟精度就没有多大的要求,而在工业操纵和航天等一些需要精准的时刻便需要高精准的电子时钟,本设计的题目是基于89C52单片机的电子时钟设计,此设计的需要正常显示的是年、月、日、礼拜、时、分、秒。
本设计需要硬件系统和软件系统的结合。
方案1——基于STC89C52单片机的电子时钟的设计
此方案是直接利用STC89C52单片机的集成电路来进行电子时钟的设计。
相较于经常使用的51单片机STC89C52增加了一些功能,核心CPU为8位利用灵巧和可编程Flash 存储器,成了嵌入式系统的应用变得加倍的灵活多样,解决方案也变得有效。
第一采纳单片机的集成电路来进行计时,便需要此单片机的按时器/计数器每隔一按时刻产生的一个中断信号,当中断次数抵达一按时会产生一个秒信号,当秒信号累加到了必然值便进行分的累加,依次类推,以后即是时、日、礼拜、月、年的进位。
如此也就实现了利用单片机集成电路的电子时钟的设计。
第二通过单片机的集成电路来实现电子时钟的设计,不需要再加入其它的芯片,实现了资源的充分,可是用此方案所设计的电子时钟精度不够,且掉电后数据易丢失,编程复杂。
方案2——基于DS12C887的电子时钟的设计
此种方案是在以单片机为核心装置的基础上,加上一个相关的时钟芯片,此类芯片有许多,比如MC146818,DS12887等等。
它们尽管能够知足单片机系统对时钟的相关要求,可是此类芯片连接单片机较为复杂,数据总线和地址总线的占用颇多,且芯片的体积相较其它较大,在现在寸土寸金的时期此种芯片已变得愈来愈不适合,由于最近几年来愈来愈多串行接口的芯片的普遍应用,也产生了一些串行接口的时钟芯片,其中
DS12C887即是其中的一种它的综合性能相较MC146818,DS12887等较好且价钱公道的串行接口时钟芯片。
通过52单片机的核心操纵和DS12C887时钟芯片的辅助,实现单片机的同步信号,加上一些大体必要电路进行集成来组成整个电子时钟设计的完成,其中外加的电路有显示电路、键盘电路、闹铃电路。
若是想在此系统进行扩展还可在电路上增设相应的电路。
由于在系统设计时,需要考虑诸多因素:功耗、精准度、软件编程的简便,芯片的体积、芯片本钱等。
结合上述的各类阻碍DS12C887芯片为最正确选择,故方案2被采纳。
第二章电子时钟的硬件设计
单片机的选择
单片微型运算机简称为单片机,是典型的嵌入式微操纵器。
通常,单片机由单块集成电路芯片组成,内部包括有运算机的大体功能部件:存储器、中央处置器(CPU)和I/O接口电路等。
因此,单片机只需要配合适当的软件及外部设备,即可成为一个单片机操纵系统。
单片机经历SCM、MCU、SoC三大时期的进展,使得单片机具有了多功能、高性能、低电压、低价钱、低功耗、大存储容量、强I/O功能及较好的兼容性等优势。
一、多功能
单片机中尽可能地把诸多模块都集成在一块芯片上,使得单片机能够实现的功能加倍繁多。
其中把ADC、DAC和多路模拟开关和采样/维持器乃至LED等显示驱动器集成在单片机芯片中,也确实是外围器件的内置化。
二、高性能
为了提高执行速度和执行效率,单片机开始利用RISC结构、流水线和DSP的设计技术,使单片机的性能有了显著的提高。
由于系统资源和系统复杂程度的增加,开始利用高级语言来开发单片机的程序。
利用高级语言明显降低开发难度和缩短了开发的周期,软件的可读性和可移植性也取得了大大的提升,便于改良和扩充功能。
3、低电压和低功耗
因单片机利用的场合空间有限,对其体积的要求严格,这也决定了单片机具有低电压和低功耗的特性超级重要。
目前单片机制造工艺普遍应用CHMOS工艺,其中HMOS工艺为互补金属氧化物具有高速度、高密度的特点,再加上CMOS工艺具有了低功耗的优良特性。
由于CHMOS工艺的大量采纳,很多单片性能够在更低的电压下工作(或),功
耗已经降低到uA级。
这些特性使得单片机系统能够在更小电源的支持下工作更长的时刻。
目前,国内生产单片机的种类繁多,在此,咱们采纳为89C52单片机为主操纵器。
89C52内置8位中央处置器、256字节内部数据存储器RAM、8k片内部程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位按时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
另外,89C52还可工作于低功耗模式,可通过两种选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM按时器、串行口和中断系统维持其功能。
掉电模式下,保留RAM数据,时钟振荡停止,同时停止芯片内其它功能。
89C52具有PDIP(40pin)和PLCC(44pin)两种封装形式。
单片机的大体简介
单片机有两种大体结构:一种是在通用微型运算机中普遍采纳的,数据存储器和程序存储器共用一个存储器空间的结构,称为“冯·诺依曼”(Von Neumann)结构。
另一种称为“哈佛”(Harvard)结构是将数据存储器和程序存储器完全分开,采纳不同的访问指令进行访问,目前的单片机多采纳“哈佛”结构。
89C52单片机要紧功能特性
89C52单片机各引脚功能
1.主电源引脚有VCC、VSS。
VCC(40脚):接+5V电源,为程序运行和校检时提供所需的电能。
VSS(20脚):为接地端。
2.外界晶体引脚有XTAL一、XTAL2。
XTAL1(18脚):片内它属于一个反向振荡放大器输入端,此放大器组成了片内振荡器,能够提供单片机相应的时钟操纵信号。
XTAL2(19脚)在单片机内部,接至上述振荡器的反向输出端。
当利用内部时钟时,两引线端用于外接石英晶体和微调电容;当利用外部时钟时,用于接外部时钟信号,外部时钟由XTAL1引入,XTAL2处于悬空状态。
3.操纵类引脚包括RESET(即为RST/VPD)、ALE、PSEN、EA,能够提供操纵信号,有些具有复用功能。
RSR/ VPD(9脚):VPD是单片机内部备用电源,为单片机的上电复位和掉电爱惜端。
振荡器工作时,在此引脚加上两个机械周期的高电平将使单片机进行复位(REST)操作。
复位后应使此引脚电平维持为不超过的低电平,以保证单片机正常运行。
当电源端显现故障、小于低电平设定值或掉电,此引脚可接入备用电源(VPD)以维持内部RAM中的数据不显现异样。
ALE/PROG(30脚):地址锁存许诺信号,以平均每机械周期两次有效的信号输出。
在访问片外存储器或I/O时,用于锁存低八位地址,以实现低八位地址与数据的隔离。
在不访问外部RAM和ROM时,ALE能够 1/6的振荡频率固定速度输出,可作为对外输出的时钟或用作外部按时脉冲。
注意:在访问外部RAM期间,ALE脉冲会跳过两个机械周期此信号有效3次,此种状态下便不适合作为时钟输出。
PSEN(29脚):片外程序存储器读选通信号,低电平有效。
在从片外程序存储器取指期间,在每一个机械周期中,当有效时,程序存储器的内容被送上 P0口(数据总线)。
EA /VPP(31脚):片外程序存储器访问许诺操纵信号,此操纵信号低电平为有效。
EA=1(高电平),选择片内程序存储器;EA=0(低电平),那么程序存储器全数在片外而不管片内是不是有程序存储器
4.四个输入/输出引脚包括P0口、P1口、P2口和P3口。
P0(39脚-32脚)—8位、漏极开路的双向I/O口。
当利用片外存储器时,复用作低八位地址和数据总线分时复用。
P1(1脚-8脚)—8位、准双向I/O 口。
P2(21脚-28脚)—8位、准双向I/O口。
当利用片外存储器时,复用作输出高 8位地址。
P3(10脚-17脚)—8位、准双向I/O口,具有内部上拉电路。
P3口功能表:
P3口各引脚的第二功能
P3口的位第二功能简要说明
RXD 串行数据接收口
TXD 串行数据发射口
INT
外部中断0输入
外部中断1输入
INT
1
T
计数器0计数输入
T
计数器1计数输入
1
WR 外部RAM写信号
RD 外部RAM读信号89C52单片机内部结构图:
第三章电子时钟的软件设计
程序整体设计
程序整体流程图:
图主程序流程图
DS12C887利用说明及流程图
主程序运行后,第一DS12C887将会进行初始化的设置,若是串行口中具有相应的数据,然后需要获取时钟信息就必需挪用相应的程序来从时钟芯片中获取,最后时钟信
息的显示也需要挪用相应的程序,依次返复进行。
这段程序包括对DS12C887某个单元读写内容和对DS12C887设按时刻。
DS12C887的流程图如下图。
图DS12C887的流程图
1602液晶显示屏操作说明及流程图
液晶显示屏的显示主若是通过从芯片中加载程序,别离对秒、分、时、礼拜、日、月、年、温度进行相应的显示,而且对可对时刻进行加减操作,可通过键盘进行操作更新时刻的显示。
1602LCD的流程图如下图。
图1602LCD的流程图
键盘操纵说明及流程图
当功能键按下时,秒位置闪烁。
每次按下功能键按下时,别离在秒、分、时、礼拜、日、月、年处闪烁。
当功能键再次按下时,加一或减一键有效并在相应位置加一或减一。
如选定秒位,按下增大键,调整显示位秒的增加,当秒增加至满60后,自动清零,同时调剂一次送至下一名显示,显示位置从头回到调剂处;当按下减小键时,调整显示位秒的减小,当秒减至0后,自动跳转为59,同时调剂一次送至下一名显示,显示位置从头回到调剂处;年月日时分的调剂原理相同。
键盘加一减一流程图如图3-4所示。
图3-4 键盘加一减一流程图
主程序
主程序要紧对按键进行扫描,和判定按时和闹铃时刻是不是已到,假设到那么挪用相关程序,该段程序如下:
延时程序
动态扫描时液晶显示需要用到延时程序,此设计利用的是延时程序,此程序需要反复挪用程序如下:
DELAY:
MOV R4,#0FH
DE1:MOV R5,#0FFH
DJNZ R5,$
DJNZ R4,DE1
RET
此类延时程序所延时的程序计算为:由于DJNZ指令执行时刻为2个机械周期。
假设单片机的工作频率为12MHz,那么一个机械周期是1μs。
上述延时执行的时刻
0FFH×2μs=512μs,也是循环一次完成的时刻,因其循环0FH次,因此其循环完成总的时刻约为512μs×0FH=。
此类延时程序算法与此相同。
时钟芯片程序
下面给出的即是调历时钟芯片DS12C887的初始化和获取内部事件的汇编程序:ORG 0000H
AJMP START
START:
ACALL SETTIME ;设置初始时刻
LOOP: ACALL GETTIME ;循环读取当前时刻
AJMP LOOP;
SETTIME:
MOV DPTR,#7D0AH ;DS12C887的A寄放器
MOV A,#20H
MOVX @DPTR,A ;打开DS12C887的内部晶振并使RTC(实不时钟)记录时刻
INC DPTR ;DS12C887的B寄放器
MOV A,#08H
MOVX @DPTR,A ;设十进制BCD码,24小时制,不按时
MOV DPTR,#7D0DH ;DS12C887的D寄放器
MOVX A,@DPTR ;若是D寄放器的第7位为0,表示电池耗尽
JNB ,ERROR
MOV DPTR,#7D00H ;DS12C887的秒单元
MOV A,#00H
MOVX @DPTR,A ;写入秒
MOV DPTR,#7D02H ;DS12C887分单元
MOV A,#21H
MOVX @DPTR,A ;写入分
MOV DPTR,#7D04H ;DS12C887时单元
MOV A,#03H
MOVX @DPTR,A ;写入时
MOV DPTR,#7D06H ;DS12C887礼拜单元
MOV A,#03H
MOVX @DPTR,A ;写入礼拜
MOV DPTR,#7D07H ;DS12C887日单元
MOV A,#20H
MOVX @DPTR,A ;写入日
MOV DPTR,#7D08H ;DS12C887月单元
MOV A,#07H
MOVX @DPTR,A ;写入月
MOV DPTR,#7D09H ;DS12C887年单元
MOV A,#05H
MOVX @DPTR,A ;写入年时刻
ERROR: RET
GETTIME:
MOV DPTR,#7D0AH
MOVX A,@DPTR
JB ,GETTIME ;REGISTER A的UIP位=0时才能够读数据
MOV DPTR,#7D00H
MOVX A,@DPTR
MOV R2,A ;SECONDS
ACALL DISPLAY
MOV DPTR,#7D02H
MOVX A,@DPTR
MOV R1,A
ACALL DISPLAY ;MINUTES
MOV DPTR,#7D04H
MOVX A,@DPTR
MOV R0,A ;HOURS
ACALL DISPLAY
ACALL DELAY
RET
DISPLAY:
MOV DPTR,#TAB
MOV SCON,#00H
MOV R3,A
ANL A,#0FH
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,R3
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
RET
DELAY:
MOV R4,#0FH
DE1:MOV R5,#0FFH
DJNZ R5,$
DJNZ R4,DE1
RET
TAB: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,11H,0C1H,63H,85H,61H,71H END
日期的显示,秒表的显示,倒计时的显示,调闹铃,调按时的显示,闪烁的显示程序与以上的的扫描相似,有的以子程序的方式显现,通过子程序挪用语句ACALL挪用;有点直接嵌套在相应的程序里面,顺序执行,或用调转语句AJMP挪用。
液晶时钟显示挪用程序
四个按键操纵液晶时钟的显示,为调时选择键,按第1次为秒钟调整,按第2次为分钟调整,按第3次为时钟调整;为加1键;为减1键;为确认键。
RS BIT
RW BIT
E BIT
LCD EQU P0
H_BIT EQU 20H
M_BIT EQU 21H
S_BIT EQU 22H
HH EQU 23H
MM EQU 24H
SS EQU 25H
HH_BIT EQU 26H
MM_BIT EQU 27H
SS_BIT EQU 28H
;================
ORG 00H
AJMP MAIN
ORG 0BH
AJMP TIME0
ORG 30H
;========主程序=======================
MAIN:
MOV SP,#60H
MOV P1,#00H
MOV R5,#00H
MOV H_BIT,#00H
MOV M_BIT,#00H
MOV S_BIT,#00H
MOV HH_BIT,#00H
MOV MM_BIT,#00H
MOV SS_BIT,#00H
MOV HH,#00H
MOV MM,#00H
MOV SS,#00H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV LCD,#01H
LCALL LCDWC
;===================================== LOOP:
LCALL EY
LCALL KEY
LCALL EYY
LJMP LOOP
;=========显示子程序================= EY:
LCALL LOOP1
LCALL LCDSET
MOV DPTR,#TAB1
MOV A,H_BIT
LCALL DISP
MOV A,HH_BIT
LCALL DISP
MOV A,#58
MOV LCD,A
LCALL WRR
MOV A,M_BIT
LCALL DISP
MOV A,MM_BIT
LCALL DISP
MOV A,#58
MOV LCD,A
LCALL WRR
MOV A,S_BIT
LCALL DISP
MOV A,SS_BIT
LCALL DISP
RET
;=======BCD码转换子程序=============== LOOP1:
MOV A,SS
MOV B,#10
DIV AB
MOV S_BIT,A
MOV SS_BIT,B
MOV A,MM
MOV B,#10
DIV AB
MOV M_BIT,A
MOV MM_BIT,B
MOV A,HH
MOV B,#10
DIV AB
MOV H_BIT,A
MOV HH_BIT,B
RET
;==========中断子程序================= TIME0:
PUSH ACC
PUSH PSW
MOV TH0,#3CH
MOV TL0,#0B0H
INC R5
CJNE R5,#20,LOOP2
MOV R5,#00H
INC SS
MOV A,SS
CJNE A,#60,LOOP2
MOV SS,#00H
INC MM
MOV A,MM
CJNE A,#60,LOOP2
MOV MM,#00H
INC HH
MOV A,HH
CJNE A,#24,LOOP2
MOV HH,#00H
LOOP2:
POP PSW
POP ACC
RETI
;=====按键检测子程序==================== KEY:
clr ea
JNB ,SS_KEY
KEY1:
setb ea
RET
;========秒钟调整子程序================ SS_KEY:
LCALL EY1
LCALL DIS1
JNB ,SS_KEY
SSA:
LCALL EY1
JNB ,S_ADDKEY
JNB ,S_DECKEY
LCALL DIS1
JNB ,MM_KEY
JNB ,KEY3
LJMP SSA
KEY3:
LJMP KEY1
;=========秒加1========================== S_ADDKEY:
lcall ey1
LCALL DIS1
JNB ,S_ADDKEY
INC SS
MOV A,SS
CJNE A,#60,SS_KEY1
MOV SS,#00H
SS_KEY1:
LJMP SSA
;=========秒减1=========================
LCALL DIS1
JNB ,S_DECKEY
MOV A,SS
CJNE A,#00,SS_KEY2
MOV SS,#60
SS_KEY2:
DEC SS
LJMP SS_KEY1
;=========分钟调整子程序=============== MM_KEY:
LCALL EY2
LCALL DIS1
JNB ,MM_KEY
MMA:
LCALL EY2
JNB ,M_ADDKEY
JNB ,M_DECKEY
LCALL DIS1
JNB ,HH_KEY
JNB ,KEY4
LJMP MMA
KEY4:
LJMP KEY1
;============分加1====================
LCALL DIS1
JNB ,M_ADDKEY
INC MM
MOV A,MM
CJNE A,#60,MM_KEY1
MOV MM,#00H
MM_KEY1:
LJMP MMA
;===========分减1==================== M_DECKEY:
lcall ey2
LCALL DIS1
JNB ,M_DECKEY
MOV A,MM
CJNE A,#00,MM_KEY2
MOV MM,#60
MM_KEY2:
DEC MM
LJMP MM_KEY1
;=======时钟调整子程序============== HH_KEY:
LCALL EY3
LCALL DIS1
JNB ,HH_KEY
LCALL EY3
JNB ,H_ADDKEY
JNB ,H_DECKEY
LCALL DIS1
JNB ,SSB
JNB ,KEY5
LJMP HHA
KEY5:
LJMP KEY1
;==========时加1================== H_ADDKEY:
lcall ey3
LCALL DIS1
JNB ,H_ADDKEY
INC HH
MOV A,HH
CJNE A,#24,HH_KEY1
MOV HH,#00H
HH_KEY1:
LJMP HHA
;==========时减1================= H_DECKEY:
lcall ey3
LCALL DIS1
JNB ,H_DECKEY
CJNE A,#00,HH_KEY2
MOV HH,#24
HH_KEY2:
DEC HH
LJMP HH_KEY1
SSB:
LJMP SS_KEY
DISP:
MOVC A,@A+DPTR
MOV LCD,A
LCALL WRR
RET
;======================== LCDSET:
MOV LCD,#38H
LCALL LCDWC
MOV LCD,#06H
LCALL LCDWC
MOV LCD,#0CH
LCALL LCDWC
MOV LCD,#0C4H
LCALL LCDWC
RET
;============================ LCDWC:
CLR RW
CLR E
LCALL LCDBF
SETB E
RET
;=========================== WRR:
SETB RS
CLR RW
CLR E
LCALL LCDBF
SETB E
RET
;================================ LCDBF:
MOV LCD,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB ,LCDBF
RET
;================================ EYY:
MOV DPTR,#TAB2
MOV R2,#16
MOV R1,#00H
EYY1:
MOV A,R1
LCALL DISP
INC R1
DJNZ R2,EYY1
RET
;========================== EY1:
MOV LCD,#0C4H
LCALL LCDWC
MOV R4,#02
EY11:
LCALL HIND
DJNZ R4,EY11
LCALL LOOP1
MOV A,S_BIT
LCALL DISP
MOV A,SS_BIT
LCALL DISP
RET
;==========================
LCALL LCDWC
LCALL HIND
LCALL LOOP1
MOV A,M_BIT
LCALL DISP
MOV A,MM_BIT
LCALL DISP
LCALL HIND
RET
;=======================
EY3:
MOV LCD,#0C4H
LCALL LCDWC
LCALL LOOP1
MOV A,H_BIT
LCALL DISP
MOV A,HH_BIT
LCALL DISP
MOV R4,#02
EY33:
LCALL HIND
DJNZ R4,EY33
RET
;==============================
MOV R3,#3
HIND1:
MOV A,#' '
MOV LCD,A
LCALL WRR
DJNZ R3,HIND1
RET
;==========延时程序=============
DIS1:
MOV R6,#20
DJNZ R6,$
RET
;=======段码表=====================
TAB1:
DB 30H,31h,32H,33H,34H,35H,36H,37H,38H,39H TAB2: DB "ZhiRenChen Design "
end
温度显示挪用程序
TEMPER_L EQU 36H
TEMPER_H EQU 35H
TEMPER_NUM EQU 60H
FLAG1 BIT 00H
DQ BIT
RS EQU ;RS <---->
RW EQU ;R/W <--->
E EQU ;E <----->
LCD_DB EQU P1
AAA:MOV SP,#70H
LCALL GET_TEMPER
LCALL TEMPER_COV
LCALL DISPLAY;挪用显示子程序
LJMP AAA
NOP
;------------------读出转换后的温度值
GET_TEMPER:
SETB DQ ; 按时入口
BCD:LCALL INIT_1820
JB FLAG1,S22
LJMP CC ; 假设DS18B20不存在那么返回
S22:LCALL DELAY1
MOV A,#0CCH ; 跳过ROM匹配------0CC
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
NOP
LCALL DELAY
LCALL DELAY
CBA:LCALL INIT_1820
JB FLAG1,ABC
LJMP CBA
ABC:LCALL DELAY1
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200 ;READ_1820
RET
;------------------读DS18B20的程序,从DS18B20中读出一个字节的数据READ_1820:
MOV R2,#8
RE1:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE1
RET
;-------------------写DS18B20的程序
WRITE_1820:
MOV R2,#8
CLR C
WR1:
CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;-------------------读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_18200:
MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) RE00:
MOV R2,#8
RE01:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;-------------------将从DS18B20中读出的温度数据进行转换TEMPER_COV:
MOV A,#0F0H
ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值SWAP A
MOV TEMPER_NUM,A
MOV A,TEMPER_L
JNB ,TEMPER_COV1 ; 四舍五入去温度值
INC TEMPER_NUM
TEMPER_COV1:
MOV A,TEMPER_H
ANL A,#07H
SWAP A
ORL A,TEMPER_NUM
MOV TEMPER_NUM,A ; 保留变换后的温度数据
LCALL BIN_BCD
RET
;-------------------将16进制的温度数据转换成紧缩BCD码
BIN_BCD:
MOV DPTR,#TEMP_TAB
MOV A,TEMPER_NUM
MOVC A,@A+DPTR
MOV TEMPER_NUM,A
RET
TEMP_TAB:
DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 08H,09H,10H,11H,12H,13H,14H,15H
DB 16H,17H,18H,19H,20H,21H,22H,23H
DB 24H,25H,26H,27H,28H,29H,30H,31H
DB 32H,33H,34H,35H,36H,37H,38H,39H
DB 40H,41H,42H,43H,44H,45H,46H,47H
DB 48H,49H,50H,51H,52H,53H,54H,55H
DB 56H,57H,58H,59H,60H,61H,62H,63H
DB 64H,65H,66H,67H,68H,69H,70H,71H
DB 72H,73H,74H,75H,76H,77H,78H,79H
DB 80H,81H,82H,83H,84H,85H,86H,87H
DB 88H,89H,90H,91H,92H,93H,94H,95H
DB 96H,97H,98H,99H
;-------------------DS18B20初始化程序
INIT_1820:
SETB DQ
NOP
CLR DQ
MOV R0,#80H
TSR1:
DJNZ R0,TSR1 ; 延时
SETB DQ
MOV R0,#25H ;96US-25H
TSR2:
DJNZ R0,TSR2
JNB DQ,TSR3
LJMP TSR4 ; 延时
TSR3:
SETB FLAG1 ; 置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH ;200US
TSR6:
DJNZ R0,TSR6 ; 延时
TSR7:
SETB DQ
RET
;------------------从头写DS18B20暂存存储器设定值
RE_CONFIG:
JB FLAG1,RE_CONFIG1 ; 假设DS18B20存在,转RE_CONFIG1 RET
RE_CONFIG1:
MOV A,#0CCH ; 发SKIP ROM命令
LCALL WRITE_1820
MOV A,#4EH ; 发写暂存存储器命令
LCALL WRITE_1820
MOV A,#00H ; TH(报警上限)中写入00H
LCALL WRITE_1820
MOV A,#00H ; TL(报警下限)中写入00H
LCALL WRITE_1820
MOV A,#7FH ; 选择12位温度分辨率
LCALL WRITE_1820
RET
;------------------延时子程序
DELAY:MOV R7,#00H
MIN:DJNZ R7,YS500
RET
YS500:LCALL YS500US
LJMP MIN
YS500US:MOV R6,#00H
DJNZ R6,$
RET
DELAY1:MOV R7,#20H
DJNZ R7,$
RET
;显示子程序
display:
ACALL LCD_INT
MOV P1,#01H ;清屏
ACALL ENABLE
MOV P1,#81H
LCALL ENABLE
MOV P1,#'T'
LCALL WRITER
MOV P1,#'='
LCALL WRITER
CLR C
LJMP DISP3
RET
;说明:利用前,必需先对液晶显示模块进行初始化。
然后,先把; 显示地址(位置)送到液晶模块的数据口,再挪用"ENABLE" ; 子程序把那个地址送入模块中。
以后,把要显示的字符的; ASCII码送到液晶模块的数据口,再挪用"WRITER"子程序; 把那个数据送入模块中让它显示出来。
;
;======液晶模块初始化,一样放在程序开头=======
LCD_INT: MOV LCD_DB,#01H ;清屏
ACALL ENABLE
MOV LCD_DB,#38H ;工作方式设置
ACALL ENABLE
MOV LCD_DB,#0CH ;显示状态设置
ACALL ENABLE
MOV LCD_DB,#06H ;输入方式设置
ACALL ENABLE
RET
;==============初始化终止=====================
;
;************************************************************************** ***
DISP3:
MOV A,TEMPER_NUM
ANL A,#0F0H
SWAP A
LCALL NEX0
MOV A,TEMPER_NUM
ANL A,#0FH
LCALL NEX0
; MOV P1,#2EH
; LCALL WRITER
;MOV A,TEMPER_L
;ANL A,#0FH
;MOV DPTR,#TAB2
;MOVC A,@A+DPTR
;MOV 36H,A
;ANL A,#0F0H
;SWAP A
;LCALL NEX0
;MOV A,36H
;ANL A,#0FH
;LCALL NEX0
;MOV P1,#0DFH
; LCALL WRITER
;MOV P1,#43H
;LCALL WRITER
RET
CC:ACALL LCD_INT
MOV P1,#01H ;清屏
ACALL ENABLE
LCALL ENABLE
MOV P1,#'N'
LCALL WRITER
MOV P1,#'O'
JMP DD
NEX0:
CJNE A,#00H,NEX1 MOV P1,#30H LJMP NEX10
NEX1:
CJNE A,#01H,NEX2 MOV P1,#31H LJMP NEX10
NEX2:
CJNE A,#02H,NEX3 MOV P1,#32H LJMP NEX10
NEX3:
CJNE A,#03H,NEX4 MOV P1,#33H LJMP NEX10
NEX4:
CJNE A,#04H,NEX5 MOV P1,#34H LJMP NEX10
NEX5:
CJNE A,#05H,NEX6 MOV P1,#35H LJMP NEX10
NEX6:
CJNE A,#06H,NEX7 MOV P1,#36H LJMP NEX10
NEX7:
CJNE A,#07H,NEX8 MOV P1,#37H LJMP NEX10
NEX8:
CJNE A,#08H,NEX9 MOV P1,#38H LJMP NEX10
NEX9:
CJNE A,#09H,NEX11 MOV P1,#39H
NEX10:
LCALL WRITER NEX11:
RET
;===================模块的各个子程序=========================== ;
;=======RS=0,RW=0,E=1,使模块工作并预备接收操纵指令=========== ENABLE: CLR RS
CLR RW
CLR E
ACALL WAIT
SETB E
RET
;
;===读BF值,对模块进行任何操作前必需判定模块是不是"忙"(BF=1)
; 若是不"忙"(BF=0)才能够进行各类操作
WAIT: MOV LCD_DB,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB ,WAIT
RET
;
;=====RS=1,RW=0,E=1,写显示数据到模块指令============ WRITER: SETB RS
CLR RW
CLR E
ACALL WAIT
SETB E
RET
;
;==============延时==========================
DELAY1S:MOV R5,#01
DL4_PA: MOV R6,#100
DL4_PB: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL4_PB
DJNZ R5,DL4_PA
RET
;===========================================
DD:NOP
End
第四章系统仿真图
第五章设计总结和心得
2020年3月,我开始了我的毕业论文工作,时至今日,论文大体完成。
从最初的茫然,到慢慢的进入状态,再到对思路慢慢的清楚,整个写作进程难以用语言来表达。
历经了一个多月的奋战,紧张而又充实的毕业设计终于落下了帷幕。
回忆这段日子的经历和感受,我感叹万千,在这次毕业设计的进程中,我拥有了无数难忘的回忆和收成。
3月初,在与毕业设计指导教师徐教师的交流讨论中我的题目定了下来,是:电子万年历的设计。
被选题报告,开题报告定下来的时候,我那时便立刻着手资料的搜集工作中,那时面对浩瀚的书海真是有些茫然,不知如何下手。
在导师细心的指导下,终于使我对自己的工作方向和方式有了把握。
在搜集资料的进程中,我认真预备了一个笔记本。
我在学校图书馆,电子阅览室搜集资料,将这些宝贵的资料全数记在笔记本上,尽可能使我的资料完整、精准、数量多,这有利于论文的撰写。
然后我将搜集到的资料认真整理分类,及时拿给导师进行沟通。
4月初,资料已经查找完毕了,我开始着手论文的写作。
在写作进程中碰到困难我就及时和导师联系,并和同窗相互交流,请教专业课教师。
在大伙儿的帮忙下,困难一个一个解决掉,论文也慢慢成型。
4月底,论文的文字表达已经完成。
5月开始进行相关图形的绘制工作和电路的设计工作。
为了画出自己中意的电路图,流程图等。
在设计电路初期,由于没有设计体会,感觉无从下手,空有很多设计思想,却不明白应该选哪个,通过导师的指导,我的设计渐渐有了头绪,通过查阅资料,慢慢确立系统方案。
方案中LED显示屏驱动电路的设计是个比较头疼的问题,在反复推敲,对照的进程中,最终定下了驱动电路采纳MAX7219驱动芯片。
当我终于完成了所有打字、画图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的毕业设计稿件我的内心是甜的,我感觉这一切都值了。
这次毕业论文的制作进程是我的一次再学习,再提高的进程。
在论文中我充分地运用了大学期间所学到的知识。
我可不能忘记这难忘的几个月的时刻。
毕业论文的制作给了我难忘的回忆。
在我倘佯书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的兴奋和兴奋;亲手用protel 99设计电路图的时刻里,经历最深的是每一步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,内心满满的只有喜
悦毫无疲惫。
这段旅程看似荆棘密布,实那么蕴藏着无尽的宝藏。
我从资料的搜集中,把握了很多单片机及其接口应用的知识,让我对我所学过的知识有所巩固和提高,而且让我对现今单片机的最新进展技术有所了解。
在整个进程中,我学到了新知识,增加了见地。
在尔后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。
脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。
我想这是一次意志的考验,是对我实际能力的一次提升,也会对我以后的学习和工作有专门大的帮忙。
在这次毕业设计中也使咱们的同窗关系更进一步了,同窗之间相互帮忙,有什么不懂的大伙儿在一路商量,听听不同的观点对咱们更好的明白得知识,因此在那个地址超级感激帮忙我的同窗。
在此更要感激我的指导教师和专业教师,是你们的细心指导和关切,使我能够顺利的完成毕业论文。
在此我要向徐教师师致以最衷心的感激和深深的敬意。
致谢
光阴冉冉,大学四年即将抵达终点,回忆这近两个月的毕业设计感慨颇深,从理论到实践这段日子里可谓苦尽甘来,巩固了以前所学过的知识,把握了许多讲义之外的知识,一样也学到了同窗之间的相互帮忙是何等的重要。
通过了这次的毕业设计让我知道了理论与实践相结合的重要性,只有理论知识而没有实践的相结合是远远不够的,只有把所学的理论知识运用到实践中才能够明白自己是不是真的把握,实践中碰到的诸多问题都是在理论中没有的,这也多亏了黄河教师的细心指导。
这次毕业设计能够顺利的完成,在设计进程中碰到了许多编程问题,最后在黄河教师的辛勤指导下,终于艰巨的解决了。
同时,在黄河教师的身上我学取得很多有效的知识,在次我表示衷心的感激!他对单片机领域的研究和对本课题的观点,使我收成颇丰。
黄河教师诲人不倦的工作作风和他一丝不苟的工作态度,严肃认真的治学风格给我留下很深的印象,值得我永久去向他学习,也是咱们的表率。
在此,谨向导师黄河教师致以高贵的敬意和衷心的感激!同时,对所有给过我帮忙的同窗再次表示衷心的感激!。