基于液晶显示的单片机温度控制设计
摘要
本篇论文主要通过DS18B20做传感器来测量温度,以及通过它来设置温度的上下限。首先是对DS18B20的深入了解并根据DS18B20的内部结构特点来设计硬件电路和软件程序。因考虑到在设置温度TH和TL所以本次设计采用四个按键来控制,通过按键之间的协调作用来完成温度设置值,由于温度的不同我们采取不同的信息来作为信号处理,所以在硬件电路中用蜂鸣器来报警做为提醒。我们采用1602液晶显示所测出来的温
关键词 DS18B20;1602液晶显示器;原理图及程序
Abstract
This paper DS18B20 done mainly through sensors to measure temperature, and through it to set the temperature of the upper and lower limits. DS18B20 is the first in-depth understanding of and in accordance with the internal structure of DS18B20 to design hardware and software. By taking into account the temperature settings TH and TL So this design uses four buttons to control, through the coordinating role between the keys to complete the temperature setting values, as we take the temperature of different information to different as signal processing, hardware Circuit used as a warning to remind the buzzer. We use 1602 LCD measured by the temperature.Keywords DS18B20 1602 LCD display schematics and procedures28
基于液晶显示的单片机温度控制设计
目 录
1 绪论... 1
1.1 单片机概述... 1
1.1.1 设计目的... 1
1.1.2 设计原理... 1
2硬件组成及有关参数计算... 2
2.1硬件组成结构... 2
2.2主要硬件的简单介绍... 2
2.2.1芯片AT89S51简单介绍………………………………………………………………………………………….
2.2.2 DS18B20简单介绍……………………………………………………………………………………………………..
2.2.31602液晶显示器简介……………………………………………………………………………………………..
3系统软件设计
4系统软件设计
4.1初始化程序……………………………………………………………………………………………………………..
4.2主程序………………………………………………………
结论... 5
致谢... 6
参考文献... 7
附录... 8
附录1. 8
附录2. 8
基于液晶显示的单片机温度控制设计
1 绪论
结论
1.1单片机的概述 单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统集成于同一硅片的器件。单片机发展迅速,各类产品不断涌现,出现了许多好性能新兴机种,现已成为工厂自动化和各控制领域的支柱产业之一。由于生产工艺和设计能力的不断提高,单片机也在向着更高集成化、更多位多功能,更强化处理控制问题的能力、更快的运算速度、更廉价低功耗、更兼容开发和更好的软件固有化的方向发展。单片机是所有微处理机中性价比最高的一种,随着种类的不断增加,功能不断加强,其应用领域也迅速扩大。单片机在智能仪表、实时控制、机电一体化、办公机械、家用电器等方面都有相当的应用领域。当前,8位单片机主要用于工业控制,如温度、压力、流量、计量和机械加工的测量和控制场合;高效能的16位单片机(如MCS-96、MK-68200)可用在更复杂的计算机网络。单片机用于控制有利于实现系统控制的最小化和单片化,简化一些专用接口电路,如编程计数器、锁相环(PLL)、模拟开关、A/D和D/A变换器、电压比较器等组成的专用控制处理功能的单板式微系统。随着电子技术的飞速发展,电子控制器件不断向着小型化、智能化方向发展,同时可*性不断提高,单片机由于具有集成度高、功能强、通用性好、可*性高、抗干扰能力强、体积小、使用方便灵活等特点,无论是在国防工业、通讯尖端技术领域,还是在智能仪器、民用电器中都使用的越来越多。可以说,微机测控技术的应用已渗透到国民经济的各个部门,微机测控技术的应用是产品提高档次和推陈出新的有效途径。
在国内,由于单片机具有功能强、体积小、可靠性好、和价格低廉等独特优点,因此,在智能仪器仪表、工业自动控制、计算机智能终端、家用电器、儿童玩具等许多方面,都已得到了很好的应用,因而受到人们高度重视,取得了一系列科研成果,成为传统工业技术改造和新产品更新换代的理想机种,具有广阔的发展前景。随着电子技术以及应用需求的发展,单片机技术得到了迅速的发展,在高集成度,高速度,低功耗以及高性能方面取得了很大的进展。伴随着科学技术的发展,电子技术有了更高的飞跃,我们现在完全可以运用单片机和电子温度传感器对某处进行温度检测,而且我们可以很容易地做到多点的温度检测,如果对此原理图稍加改进,我们还可以进行不同地点的实时温度检测和控制。
1.12设计目的
随着现代科技的不段发展,对温度测量的工具越来越多并且精度也是越来越高,但随着生活水平的不段提高,越来越多的人健康的关注倍加重视,特别是对冷暖空气的变化更加注意,在此我们特设计一有关温度控制的系统,通过它可以设置温度的上下限,当温度低于所设的温度的下限或是高于所设的温度的上限时就会发生报警,因此可以提醒您要注意温度变化。本制作轻巧灵便适合在私人家庭中运用,使用时可以通过四个按键的作用来设置系统初值,即可达到准确提醒您的作用。
1.12原理
本次设本系统主要研究的是利用MCS-51系列单片机中的AT89C51单片机来实现温度检测及控制,通过对89C51的P1口的高4位设置上限值、下限值、,因考虑到在设置温度TH和TL,所以本次设计采用四个按键来控制,通过按键之间的协调作用来完成温度设置值,由于温度的不同我们采取不同的信息来作为信号处理,所以在硬件电路中用蜂鸣器来报警做为提醒实现温度从IN0输入89C51的P1口低4位设置报警系统。ADC0809实现模拟输入到数字量的转换,通过1602数码管显示数据。
2系统硬件组成及有关参数计算
2.1、硬件组成结构
主要硬件由一片AT89S51芯片、一个DS18B20传感器、一个1602液晶显示器、一个蜂鸣器、一电位器(10K)、五个按键、两个开关、一个12MHZ晶振、两个30PF和一个10uF 电容、若干电阻、导线及三极管。
2.2、主要硬件的简单介绍
2.21芯片采用最常见的AT89S51
2.22DS18B20简单介绍
测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V--5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管角排列如下:1 GND为电源地 2 DQ为数字信号输入/输出端3 VDD为外接供电电源输入端若图片无法显示请联系QQ3710167
(3)1602液晶显示器简介
显示特性: 单5V电源电压,低功耗,长寿命,高可靠性。
内置192种字符(160个5*7点阵字符和和32个5*10点阵字符)
具有64个字节的自定义字符RAM,可自定义8个5*8的点阵字符或4个5*11点阵字符。
显示方式:SIN、半透、正显。
驱动方式:1/6DUTY,1/5BIAS
视角方向:6点
背光方式:底部LED
通讯方式:4位或8位并口可选
标准的借口特性,适配MC51和M6800系列MPU的操作时序。
物理特性:
外观尺寸
80*36*14
单位
可视范围
64.6(W)*16.0(H)
Mm
显示容量
16字符两行
点尺寸
0.55*0.75
Mm
点间距
0.08
mm
接口定义:
管脚号
符号
功能
1
Vss
电源地(GND)
2
Vcc
电源电压(+5)
3
Vo
LCD驱动电压(可调)
4
RS
寄存器选择输入端,输入MPU选择模块内容寄存器类型信号;
RS=0,当MPU进行写模块操作,指向数据寄存器;
当MPU进行读模块操作,指向地址计数器;
RS=1,无论MPU读操作还是写操作,均指向数据寄存器
5
R/W
读写控制输入端,输入MPU选择读/写寄存器信号;
R/W=0,读操作;R/W=1,写操作
6
E
使能信号输入端,输入MPU读/写模块操作使能信号;
读操作时,高电平有效;写操作时,下降沿有效
7
DB0
数据输入/输出口,MPU与模块之间的数据传诵通道
8
DB1
数据输入/输出口,MPU与模块之间的数据传诵通道
9
DB2
数据输入/输出口,MPU与模块之间的数据传诵通道
10
DB3
数据输入/输出口,MPU与模块之间的数据传诵通道
11
DB4
数据输入/输出口,MPU与模块之间的数据传诵通道
12
DB5
数据输入/输出口,MPU与模块之间的数据传诵通道
13
DB6
数据输入/输出口,MPU与模块之间的数据传诵通道
14
DB7
数据输入/输出口,MPU与模块之间的数据传诵通道
15
A
背光的正端+5V
16
K
背光的负端0V
3系统硬件电路设计
图一为温度控制系统设计的电原理图,温度测量系统采用DS18B20温度传感器测量并与p3.3口相连,当有温度信号时即可通过p3.3口传入单片机。显示数据的采用1602LCD液
晶显示,LCD的DB0—DB7分别与AT89S51芯片的P0口分别相连,信号通过P0口传入LCD,在LCD液晶的VCC端加一开关,用来控制液晶,防止液晶被烧坏。AT89S51芯片的第9脚为单片机的复位脚,采用简单的按键上电位复位电路,更能保护好电路的安全可靠,5、6、7、8脚分别用来接按键,用来设置LCD显示的设置温度值。
K1用来查看温度的设置值,即温度报警值的状态。
K2为进入温度报警的状态。
K3为退出查看温度报警状态,在设置温度状态值时K1为设定值加、减方式选择键(默认为减少)。
K2为TH值设定键,K3为TL值设定键。
K4为确定键即退出设定状态;
K2和K3以减的方式设定,当设定数值减到“0”时自动转换为加方式;
K2和K3以加方式设定,当设定数值TH=120、TL=99时,设定值均变为“0”。K4确定并退出设定温度报警值状态。
将设定温度报警值自动存入DS18B20的EEROM中,可永久保存。每次开机时自动从DS18B20的EEROM读出温度报警值。AT89S51芯片的17脚做为报警输出端,采用9013三极管驱动蜂鸣器;18、19脚接12MHZ晶振并分别接30PF的瓷片补偿电容。1602LCD液晶用10K的电位器来调节LCD的背光显示,其RS、R/W、E三键分别与AT89S51芯片的P2.0、P2.1、P2.2相连,当P2.0~P2.2为高电平时即完成LCD显示的准备工作,片外存储程序选择脚(31脚)接正电源。
基于液晶显示的单片机温度控制设计
图一 硬件电路图
若图片无法显示请联系QQ3710167
4系统软件设计
4.1初始化程序
初始化程序内容包括P0、P1、P2口,P0口清零,P1.4~P1.7附值,置堆栈基址(70H),初始化DS18B20、1602LCD。
4.2主程序若图片无法显示请联系QQ3710167
DS18B20传感器有信号则将信号通过P3.3口发送到AT89S51芯片,经过温度转换后再将温度发送出去,检测P0口为高电平,则转发程序,并经过BCD处理使信号发送到LCD并显示,当温度小于或等于TL(设置温度下限)时,在报警范围内从而使蜂鸣器报警;当温度大于后等于TH(设置温度上限)时,同样在蜂鸣器报警的范围内。当温度不在蜂鸣器报警的范围内时则程序不断的进行扫描信号从而不断更新现场的温度信息。主程序流程图如
5系统调试及出现问题的解决方案
测试仪器:PC机,QTH—52在线仿真机,数字万用表,稳压电源,温度计,示波器。
测试方法:先对各单元的模快进行独立的测试,再进行上机整体的测试,通过后,进行脱机测试,以提高调试效率。
各单元模块的测试基本正常,有一些个别的接线和程序错误,进行简单的修改,可以进行正常的工作。
整体的测试;将测试好的各模块连接好,用QTH—52在线仿真机倒替89C51单片机进行模拟调试,用键盘设定一定范围值接通电源,按下复位按键,使电路进行初始化,按下LCD电源开关使LCD正常显示,此时显示的是当前的室内温度,如果此时蜂鸣器报警则说明此时的温度不在设置温度值TL和TH之间,反之则在TL和TH之间。当按下K2时即进入到设定温度报警值状态,再按一下K2则此时是对TH值的设定,接着按K1键是对TH值进行减方式操作,若此时按过K4后再按K1则是对TH进行加方式操作,如此就可以设定TH值了;若按下K2后再按K3键则是对TL值进行设定,方法与TH的设定值完全相同;当对温度进行设定完毕后就可以通过按下K4键退出设定程序,此时通过按键K1就可查看刚刚设定的数值的结果,再按下K3键就退出查看设定值状态,如果再调试时LCD上没有显示,通过用万用表查看是否硬件电路有故障,如果LCD上没有显示字的蓝色显示字的条框,此时最好调节电位器就能清晰的看到字迹了。
6、系统程序
主要程序如下:
TEMP_ZH DATA 24H ;实时温度值存放单元
TEMPL DATA 25H ;
TEMPH DATA 26H ;
TEMP_TH DATA 27H ;高温报警值存放单元
TEMP_TL DATA 28H ;低温报警值存放单元
K1 EQU P1.4 K2 EQU P1.5 K3 EQU P1.6 K4 EQU P1.7 BEEP EQU P3.7 FLAG1 EQU 20H.0 ;DS18B20是否存在标记 KEY_UD EQU 20H.1 ;设定 KEY 的UP与DOWN 标记 DATE_LINE EQU P3.3;===================================================== ORG 0000H JMP MAINMAIN: MOV SP,#60H MOV A,#00H MOV R0,#20H ;将 20H-2FH 单元清零 MOV R1,#10HCLEAR: MOV @R0,A INC R0 ;18B20复位子程序 JNB FLAG1,START1 ;DS1820不存在 CALL MENU_OK CALL READ_E2 CALL TEMP_BJ ;显示温度标记 JMP START2START1: CALL MENU_ERROR CALL TEMP_BJ ;显示温度标记 JMP $START2: CALL RESET JNB FLAG1,START1 ;DS1820不存在 MOV A,#0CCH ; 跳过ROM匹配 CALL WRITE MOV A,#0BEH ; 发出读温度命令 CALL WRITE CALL READ call CONVTEMP Call DISPBCD CALL CONV CALL TEMP_COMP CALL PROC_KEY ; 键扫描 SJMP START2;-----------------------------------------------------PROC_KEY: JB K1,PROC_K1 ; 按键K1处理 CALL BEEP_BL JNB K1,contentnbsp; MOV DPTR,#M_ALAX1 CALL BEEP_BL JMP PROC_K2PROC_K1: ; 按键K2处理 JB K2,PROC_END CALL BEEP_BL JNB K2,contentnbsp; MOV DPTR,#RESET_A1 MOV A,#1 CALL LCD_PRINT CALL SET_ALARM CALL RE_18B20 ;将设定的TH,TL值写入DS18B20内 CALL WRITE_E2PROC_K2: CALL MENU_OK CALL TEMP_BJPROC_END: RET;============================================;设定报警值 TH、TL;============================================SET_ALARM: CALL RESET_ALARM CALL LOOK_ALARMAS0: JB ;20H.1=0,DOWNASZ01: JB K2,ASZ02 ;TH值调整(增加) CALL BEEP_BL INC TEMP_TH MOV A,TEMP_TH CJNE A,#120,ASZ011 MOV TEMP_TH,#0ASZ011: CALL LOOK_ALARM MOV R5,#10 CALL DELAY JMP ASZ01ASZ02: JB K3,ASZ03 ;TL值调整(增加) _TL,#00HASZ021: CALL LOOK_ALARM ; MOV R5,#10 CALL DELAY JMP ASZ02ASZ03: JB K4,AS0 ;确定调整 OK CALL BEEP_BL ,ASJ02 ;TH值调整 (减少) CALL BEEP_BL DEC TEMP_TH MOV A,TEMP_TH JMP AS0ASJ02: JB K3,ASJ03 ;TL值调整(减少) CALL BEEP_BL DEC TEMP_TL LOOK_ALARM ; MOV R5,#10 CALL DELAY JMP AS0ASJ022: RETRESET_ALARM: MOV DPTR,#RESET_A1 ;指针指到显示信息区
基于液晶显示的单片机温度控制设计
MOVLCD_PRINT RETRESET_A1: DB "RESET ALERT CODE";====================================================;实际温度值与标记温度值比较子程序;====================================================TEMP_COMP: A,TEMP_ZH ;减数>被减数,则 JC CHULI1 ;借位标志位C=1,转 MOV A,TEMP_ZH SUBB A,TEMP_TL ;减数>被减数,则 JC CHULI2 ;借位标志位C=1,转 MOV DPTR,#BJ5 CALL TEMP_BJ3
CALL BEEP_BL DPTR,#BJ3 CALL TEMP_BJ3 CALL BEEP_BL RET CHULI2: MOV DPTR,#BJ4 CALL TEMP_BJ3 CALL BEEP_BL RET;-----------------------------------------TEMP_BJ3: MOV A,#0CEH CALL WCOM R0,#2BBJJ3: MOV A,R1 MOVC A,@A+DPTR CALL WDATA INC R1 DJNZ R0,BBJJ3 RETBJ3: DB ">H"BJ4:"
MOV R0,#32HTSR2:JNB DATE_LINE,TSR3 ;等待DS18B20回应 DJNZ R0,TSR2 JMP TSR4 ; 延时TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在 JMP TSR5TSR4:CLR TSR6:DJNZ R0,contentnbsp; ; 时序要求延时一段时间TSR7:
SETB DATE_LINE RET;=======================================================RE_18B20: JB FLAG1,RE_18B20A RETRE_18B20A: CALL RESET MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE MOV A,#4EH ;写暂存寄存器 LCALL WRITE MOV A,TEMP_TH ;TH(报警上限) MOV A,#7FH ;12位精确度 LCALL WRITE RET;------------------------------------------------------------WRITE_E2: CALL RESET MOV MOV A,#48H ;把暂存器里的温度报警值拷贝到EEROM LCALL WRITE RET;--------------------------------------------------------------READ_E2: CALL RESET MOV ;把EEROM里的温度报警值拷贝回暂存器 CALL WRITE RET;--------------------------------------------------------------;将自定义字符写入LCD1602的CGRAM中;--------------------------------------------------------------STORE_DATA: CALL WCOM MOV R2,#08H MOV DPTR,#D_DATA MOV R3,#00HS_DATA: MOV A,R3 ;写入数据 INC R3 DJNZ R2,S_DATA RETD_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H;==============================================================WRITE:
MOV CLR DATE_LINE ;开始写入DS18B20总线要处于复位(低)状态 MOV R3,#07 DJNZ R3,contentnbsp; ;总线复位保持16微妙以上 RRC A ;把一个字节DATA 分成8个BIT环移给C MOV DATE_LINE,C ;写入一个BIT _LINE ;重新释放总线 NOP DJNZ R2,WR1 ;写入下一个BIT SETB DATE_LINE MOV R4,#4 ; 将温度低位、高位、TH、TL从DS18B20中读出 MOV R1,#TEMPL ; 存入25H、26H、27H、28HRE00:
MOV R2,#8RE01:
CLR CY SETB DATE_LINE NOP NOP CLR DATE_LINE ;读前总线保持为低
NOP
NOP NOP SETB DATE_LINE ;开始读总线释放 MOV R3,#09 ;延时18微妙 DJNZ R3,contentnbsp; MOV C,DATE_LINE ;从DS18B20总线读得一个BIT MOV R3,#3CH ;读下一个BIT MOV @R1,A INC R1
DJNZ R4,RE00
RET;*****************************************************; 处理温度 BCD 码子程序;****************************************************CONVTEMP: MOV A,TEMPH ;判温度是否零下 ANL A,#80H JZ TEMPC1 ;温度零上转
基于液晶显示的单片机温度控制设计
CLR C MOV A,TEMPL ;二进制数求补(双字节) CPL A ;取反加1 ADD A,#01H MOV TEMPL,A MOV A,TEMPH CPL A ADDC A,#00H MOV TEMPH,A SJMP TEMPC11TEMPC1: MOV TEMPHC,#0AH
TEMPC11: MOV A,TEMPHC SWAP A MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH ;乘0.0625 MOV DPTR,#TEMPDOTTAB MOVC A,@A+DPTR MOV TEMPLC,A ;TEMPLC LOW=小数部分 BCD MOV A,TEMPL ;整数部分 ANL A,#0F0H ;取出高四位 SWAP A MOV TEMPL,A MOV A,TEMPH ;取出低四位 ANL A,#0FH SWAP A ORL A,TEMPL ;重新组合 MOV TEMP_ZH,A LCALL HEX2BCD1 MOV TEMPL,A ANL A,#0F0H SWAP A ORL A,TEMPHC ;TEMPHC LOW = 十位数 BCD MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH SWAP A ;TEMPLC HI = 个位数 BCD ORL A,TEMPLC MOV TEMPLC,A MOV A,R4 JZ TEMPC12 ANL A,#0FH SWAP A MOV R4,A MOV A,TEMPHC ;TEMPHC HI = 百位数 BCD ANL A,#0FH ORL A,R4 MOV TEMPHC,ATEMPC12: RET;---------------------------------------------------------------HEX2BCD1: MOV B,#064H ;十六进制-> BCD DIV AB ;B= A % 100 MOV R4,A ;R7 = 百位数 MOV A,#0AH XCH A,B DIV AB ;B = A % B SWAP A ORL A,B RET;-------------------------------------------------------------; 小数部分码表;-------------------------------------------------------------TEMPDOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H DB 05H,05H,06H,06H,07H,08H,08H,09H;=====================================================LOOK_ALARM: MOV DPTR,#M_ALAX2 ;指针指到显示信息区 MOV A,#2 ;显示在第二行 CALL LCD_PRINT MOV A,#0C6H CALL TEMP_BJ1 MOV A,TEMP_TH ;加载TH数据 MOV LCD_X,#3 ;设置位置 CALL SHOW_DIG2H ;显示数据 MOV A,#0CEH CALL TEMP_BJ1 MOV A,TEMP_TL ;加载TL数据 MOV LCD_X,#12 ;设置位置 CALL SHOW_DIG2L ;显示数据 RET;--------------------------------------------M_ALAX1: DB " LOOK ALERT CODE",0M_ALAX2: DB "TH: TL: ",0;--------------------------------------------TEMP_BJ1: CALL WCOM MOV DPTR,#BJ2 ;指针指到显示信息区 MOV R1,#0 MOV R0,#2BBJJ2: MOV A,R1 MOVC A,@A+DPTR CALL WDATA INC R1 DJNZ R0,BBJJ2 RETBJ2: DB 00H,"C";---------------------------------------------------SHOW_DIG2H: ;在 LCD 的第二行显示数字 MOV B,#100 DIV AB ADD A,#30H PUSH B MOV B,LCD_X CALL LCDP2 POP B MOV A,#0AH XCH A,B DIV AB ADD A,#30H INC POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H CALL LCDP2 RETSHOW_DIG2L: ;在 LCD 的第二行显示数字 MOV B,#100 DIV AB MOV A,#0AH XCH A,B DIV AB ADD A,#30H PUSH B MOV B,LCD_X CALL LCDP2 POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H CALL LCDP2 RET;-------------------------------------------------------------;显示区 BCD 码温度值刷新子程序;-------------------------------------------------------------DISPBCD:A,TEMPLC ANL A,#0FH MOV 70H,A ;小数位 MOV A,TEMPLC SWAP A ANL A,#0FH MOV 71H,A ;个位 MOV A,TEMPHC MOV A,TEMPHC SWAP A ANL A,#0FH MOV 73H,A ;百位 MOV A,TEMPHC ANL A,#0F0H CJNE A,#010H,DISPBCD0 SJMP DISPBCD2DISPBCD0: ;十位数是0 MOV A,TEMPHC SWAP A ANL A,#0FH MOV 73H,#0AH ;符号位不显示 MOV 72H,A ;十位数显示符CONV: MOV A,73H ;加载百位数据 MOV LCD_X,#6 ;设置位置 CJNE A,#1,CONV1 JMP CONV2CONV1: MOV A,#" " X MOV A,72H ;十位 CALL SHOW_DIG2 INC LCD_X MOV A,71H ;个位 CALL SHOW_DIG2 INC LCD_X MOV A,#'.' MOV B,LCD_X CALL LCDP2 MOV A,70H ;加载小数点位 INC LCD_X ;设置位置 CALL SHOW_DIG2 ;显示数据 RET;-------------------------------------------------------SHOW_DIG2: ;在 LCD 的第二行显示数字 ADD A,#30H MOV B,LCD_X ;设置显示地址 ADD A,#0C0H ;设置LCD的第二行地址 CALL WCOM ;写入命令 POP ACC ;由堆栈取出A CALL WDATA ;写入数据
基于液晶显示的单片机温度控制设计
RET;---------------------------------------------------------SET_LCD: ;对 LCD 做初始化设置及测试 CLR LCD_EN CALL INIT_LCD ;初始化 LCD CALL STORE_DATA ;将自定义字符存入LCD的CGRAM RETINIT_LCD: ;8位I/O控制 LCD 接口初始化 MOV A,#38H ;双列显示,字形5*7点阵 CALL WCOM CALL DELAY1
MOV A,#38H CALL WCOM CALL DELAY1
MOV A,#38H CALL WCOM CALL DELAY1
MOV A,#0CH ;开显示,显示光标,光标不闪烁 CALL WCOM CALL DELAY1 MOV A,#01H ;清除 LCD 显示屏 CALL WCOM CALL DELAY1
RET;==================================================CLR_LINE1: ;清除LCD的第一行字符 MOV A,#80H ;设置 LCD 的第一行地址 CALL WCOM MOV R0,#24 ;设置计数值 C1: MOV A,#' ' ;载入空格符至LCD CALL WDATA ;输出字符至LCD DJNZ R0,C1 ;计数结束 RET;==================================================LCD_PRINT: ;在LCD的第一行或第二行显示字符 CJNE A,#1,LINE2 ;判断是否为第一行 LINE1: MOV A,#80H ;设置 LCD 的第一行地址 CALL WCOM ;写入命令 CALL CLR_LINE ;清除该行字符数据 MOV A,#80H ;设置 LCD 的第一行地址 CALL WCOM ;写入命令 JMP FILL LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址 CALL WCOM ;写入命令 CALL CLR_LINE ;清除该行字符数据 MOV A,#0C0H ;设置 LCD 的第二行地址 CALL WCOM FILL: CLR A ;填入字符 MOVC A,@A+DPTR ;由消息区取出字符 CJNE A,#0,LC1 ;判断是否为结束码 RET LC1: CALL WDATA ;写入数据 INC DPTR ;指针加1 JMP FILL ;继续填入字符 RET;=========================================CLR_LINE: ;清除该行 LCD 的字符 MOV R0,#24 CL1: MOV A,#' ' CALL WDATA DJNZ R0,CL1 RET DE: MOV R7,#250 DJNZ R7,contentnbsp; RET;============================================WCOM: ;以8位控制方式将命令写至LCD MOV P0,A ;写入命令 CLR LCD_RS ;RS=L,RW=L,D0-D7=指令码,E=高脉冲 CLR LCD_RW SETB LCD_EN ACALL DELAY1 CLR LCD_EN RET;=============================================WDATA: ;以8位控制方式将数据写至LCD MOV P0,A ;写入数据 SETB LCD_RS CLR LCD_RW SETB LCD_EN CALL DE CLR LCD_EN CALL DE RET;=============================================;PRINT A CHAR ON LINE 1;A=ASC DATA, B=LINE X POS;==============================================LCDP1: ;在LCD的第一行显示字符 80H ;设置LCD的第一行地址 CALL WCOM ;写入命令 POP ACC ;由堆栈取出A CALL WDATA ;写入数据 100 BL2: CALL DEX1 CPL BEEP DJNZ R6,BL2 MOV R5,#10 CALL DELAY RET DEX1: MOV R7,#180 DE2: NOP 50 DL1: MOV R7,#100 DJNZ R7,contentnbsp; DJNZ R6,DL1 DJNZ R5,DELAY RETDELAY1: ;延时5MS R7,contentnbsp; DJNZ R6,DL2 RET;================================================ END
基于液晶显示的单片机温度控制设计
结论
MCS-51单片机,体积小,重量轻,抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,即使是非电子计算机专业人员,通过学习一些专业基础知识以后也能依靠自己的技术力量,来开发所希望的单片机应用系统。本文的温度控制系统,只是单片机广泛应用于各行各业中的一例,相信读者会依靠自己的聪明才智,使单片机的应用更加广泛化。另外本系统的设计方法有很多种,我的这个方法是比较简单的
致谢
毕业论文正代表着大学的终结,完成它既有一种收获感,又有一种失落感,可无论如何它代表着我大学的努力,代表了我大学的历程。当它终于完工的时候,我不禁想起了很多人,尤其是辛勤培养我的老师们,谢谢你们!
此次毕业论文能够得以顺利完成,并非我一人之功劳,是指导过我的老师,帮助过我的同学和一直关心支持我的朋友帮助的结果。我要在这里对他们表示深深的谢意! 感谢我的指导老师——王立文老师,没有您的悉心指导就没有这篇论文的顺利完成。 生活虽然相处不久,却从您身上学到了太多,必将终身受益。感谢所有教授过我课程的老师们,是你们诲人不倦才有了现在的我。没有你们,就没有我的今天,你们的支持与鼓励,永远是支撑我前进的最大动力。
感谢那个神奇的宿舍:因为你们的存在,在我的天空只有彩虹,使乌云望而远之。
感谢张兄,你的才智与个性令我佩服,让我明白把困难放在前面,不抛弃+不放弃=成功的人生,使我明白一切皆有可能。
感谢在网络空间里和我一起兴奋,愤怒,焦急过的战友,天涯海角的我们因为共同的爱好结为朋友。
感谢所有校园里认识的和不认识的人,来过的和走了的人,愿你们珍惜握在手里的现在。
参考文献
[1] 杨加国.单片机原理与应用及C51程序设计.北京:清华大学出版社.
[2] 陈在平.plc单片机应用设计与实例子. 北京:清华大学出版社
[3] 韩全..单片机控制技术及应用 .电子工业出版社
[4] 王兆明.电气控制与plc技术 北京:.清华大学出版社.
[5] 孙建平.数字电子技术. 西安:西安电子科技大学
[6] 泰曾煌.电工技术〈上.下〉 高等教育出版社