《毕业设计(论文)基于AT89C51的智能温度预警系统的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于AT89C51的智能温度预警系统的设计.doc(57页珍藏版)》请在三一办公上搜索。
1、毕业设计(论文)课 题 名 称 基于AT89C51的智能温度 预警系统的设计 学 生 姓 名 学 号 系、年级专业 信息工程系07级通信工程 指 导 教 师 职 称 讲 师 2011 年 5 月 25 日摘 要本设计系统地介绍了基于AT89C51的智能温度预警系统的组成、设计方案、电路原理、程序设计以及系统仿真过程。DS18B20多点温度测量系统是以AT89C51单片机作为控制核心,数字温度传感DS18B20为控制对象,运用C语言编程实现系统的各种功能。该系统由单片机最小系统、传感器电路、报警电路、LCD显示电路、行列式键盘电路、电源电路六大部分组成。借助PROTEUS软件,实现了系统电路设计
2、和仿真。它适用于电力工业、煤矿、森林、火灾、高层建筑等场所,还可以用于环境恶劣的工业控制现场。通过DS18B20的单总线技术,系统实现了对远程环境的温度测量与监控。关键词:DS18B20;仿真;测量系统;PROTEUS;单片机AbstractThe design systematically introduced the composition, the design, the circuit theory, the program design and the system simulation process of the multipoint temperature measuremen
3、t system which based on the AT89C51.The AT89C51 intelligence temperature measurement system, the AT89C51 MCU as its control core, digital temperature sensing DS18B20 as its control target, use the C-language programming system to realize the functions. The system composed of six major components, wh
4、ich are the smallest MCU system, the sensor circuit, the alarm circuits, the LCD display circuit, the keyboard, the power circuit. The system realizes the circuit design and simulation with PROTEUS software. It applies to the power industry, coal, forest, fire, high-rise buildings and other places,
5、it can also applies to industrial control field with the bad environment. Through the monobus technology of the DS18B20, the system achieves the measurement and monitoring of the long-range environmental temperature. Key words: DS18B20;simulation;measurement system;PROTEUS;MCU目 录摘 要IABSTRACTII第1章 绪
6、论11.1 课题来源11.2 课题研究的目的意义11.3 国内外现状及水平11.4 课题研究内容2第2章 统方案设计32.1 基于模拟温度传感器的设计方案32.2 基于数字温度传感器的设计方案42.3 方案论证4第3章 电路设计63.1工作原理63.2 DS18B20与单片机接口技术73.3 键盘电路设计133.4显示电路设计143.5 报警电路设计153.6 电源电路设计16第4章 程序设计184.1 系统资源分配184.2 系统流程设计184.3 程序设计24第5章 系统仿真345.1 PROTEUS仿真环境介绍345.2 原理图绘制355.3 程序加载355.4 系统仿真365.5 仿真
7、结果分析39第6章 PCB板设计406.1 PCB板设计406.2 PCB板制作方法42总 结45参考文献46附 录47致 谢52第1章 绪 论1.1 课题来源温度是国际单位制七个基本量之一,与人类的生活环境息息相关。它是一种在生产、科研、生活中需要测量和控制的重要物理量,同时也是一种最基本的环境参数。在实验研究和工业生产中,在机械、电力、化工、生物、冶金、农业、实验等行业和人们的家居生活里经常需要对环境温度进行检测和控制。例如,汽车发动机气缸的温度必须保持在一定的范围内;在合适温度微生物的新陈代谢才能正常进行。许多化学反应在不同的温度下会生成不同的反应物;温度过高,粮仓的粮食就会霉烂变质,电
8、子设备的工作效率会降,低使用寿命会缩短,饭菜会变馊。由此可见,研究温度测量工具有着极其重要的实用价值。随着现代嵌入式技术和传感器技术的发展,作为各种信息的采集、处理、传输的功能器件,温度传感器的作用日益突出,成为自动检测、自动控制系统和计量测试中不可缺少的重要技术工具,其应用已遍及工农业生产和日常生活的各个领域。本课题结合现在嵌入式技术和传感技术设计的智能温度预警系统就是满足生产生活中人们对温度测量的需求。1.2 课题研究的目的意义随着科学技术的高速发展,科技的进步带动了传感技术的发展,自动控制设备的性能和性价比发生了巨大的变化,新世纪是嵌入式技术迅猛发展的时代,传感技术也成为当今科技的主流之
9、一,被广泛地应用于生产和生活中。基于AT89C51的智能温度预警系统的设计,其目的在于:(1) 掌握数字温度传感器AT89C51单片机的工作原理、和使用方法,利用C语言编写单片机程序。(2) 掌握数字温度传感器DS18B20的工作原理、和使用方法,利用C51对系统进行编程。(3) 本课题综合了现代嵌入式技术和传感器技术专业领域方面的知识,可全面提高学生的理论水平和动手能力。1.3 国内外现状及水平传感器属于信息技术的前沿尖端产品,尤其是温度传感器被广泛用于工农业生产、科学研究和生活等领域,数量高居各种传感器之首。温度传感器的发展大致经历了以下三个阶段:传统的分立式温度传感器(含敏感元件);模拟
10、集成温度传感器;数字温度传感器。目前,温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展,同时具有抑制串模干扰能力强、分辨力高、线性度好、成本低等优点。随着我国四个现代化和经济发展,我国在科技和生产各领域都取得了飞速的发展和进步,发展以温度传感器为载体的温度测量技术具有重大意义。1.4 课题研究内容本设计研究的主要内容如下:(1)本设计以AT89C51单片机为控制系统,来实现对温度的监测、处理等功能。在广泛查阅温度检测控制理论和方法、测温技术和温度控制技术等资料的基础上,根据不同的控制要求及应用领域完成对系统方案的总
11、体设计。(2) 在比较各元器件的特点和功能后,选择合适的元器件。(3) 设计硬件系统。设计主要包括:温度传感器采集温度数据、单片机处理温度数据、LCD显示温度、键盘设置参数、报警电路等模块。(4) 设计软件系统。本以C语言为设计语言,用Source Insight软件编辑代码,采用Keil软件编译程序。本设计的重点分为软件和硬件两个方面。其中硬件开发的难点在于各种元器件的选择和使用。软件开发的难点在于温度传感器的时序。第2章 统方案设计2.1 基于模拟温度传感器的设计方案该方案由AD590模拟温度传感器、运算放大器、AD转换器、51单片机、键盘、液晶显示屏、集成功率放大器、报警器组成,如图2.
12、1所示。本方案采用AD590模拟温度传感器检测温度,传感器将测量的温度变换转换成变化的电流,再通过模拟电路将电流的变化转换成电压的变化,使用运算放大器将信号进行适当的放大,最后通过AD转换器将模拟信号转换成数字信号,传送给AT89C51。AT89C51将温度值进行处理之后用液晶显示屏显示 ,有报警信号时,信号通过集成功放放大,传给报警器。图2.1基于模拟温度传感器的设计方案本方案使用的测温元件的性能指标如下:(1)模拟温度传感器的测温范围为55+150。(2)模拟温度传感器的电源电压范围为4V30V,电源电压可在4V6V范围变化,电流变化1mA,相当于温度变化1K。模拟温度传感器可以承受44V
13、正向电压和20V反向电压,因而器件反接也不会被损坏。(3) 输出电阻为710MW。 (4) 精度高,模拟温度传感器共有I、J、K、L、M五档,其中M档精度最高,在55+150范围内,非线性误差为0.3。 集成温度传感器具有线性好、精度适中、灵敏度高、体积小、使用方便、温度测量范围广等优点,得到广泛应用。集成温度传感器的输出形式分为电压输出和电流输出两种。电压输出型的灵敏度一般为10mV/K,温度0时输出为0,温度25时输出2.982V。电流输出型的灵敏度一般为1mA/K。2.2 基于数字温度传感器的设计方案该方案以数字温度传感器DS18B20为温度测量元件,使用AT89C51单片机作为控制核心
14、,使用4个DS18B20进行温度检测,通过44键盘设置正常温度的最大值,采用12864 液晶显示电路,使用LM386作为功率放大器报警电路中的喇叭。 图2.2基于数字温度传感器的设计方案本课题采用DS18B20数字温度传感器作为测为测温元件,它具有如下特点:(1) 测量温度范围在55C到125C之间。(2) 每个DS18B2都有唯一的ID。(3) 912位分辨率可调。(4) 只要一个端口即可通信。(5) 实际应用中不需要外部接任何元器件即可实现测温。(6) 内部有温度上、下限告警设置。2.3 方案论证本设计要求测温范围为-20+80,精度为0.5,测量的点数为4。采用LCD显示,显示数据每秒刷
15、新1次。综合分析数字温度传感器和模拟温度传感器的性能指标,以上两个方案都能实现设计的需求。方案一采用了DS18B20数字温度传感器。它能在现场采集温度数据,直接将温度物理量转换为数字信号并以总线方式传送到单片机,再由单片机进行数据处理,并且可根据实际要求通过简单的编程实现9-12位的数字式读取方式,因而使用数字温度传感器可使系统结构更加简单,可靠性更高,大大提高系统的抗干扰能力。数字温度传感器体积小、经济、使用方便灵活、测试精度高、较高的性能价格比,有CRC校验,系统简明直观,适合于恶劣环境的现场温度测量,如: 测温类消费电子产品、环境控制设备或过程控制等。方案二采用AD590模拟温度传感器,
16、转换结果需要经过AD转换器和运算放大器。它虽然成本低,控制简单,但是后续电路复杂,而且需要进行温度标定。AD590集成温度传感器输出为电流,且输出信号较弱,所以需要后续放大及A/D转换电路。如采用普通运放则精度难以保证,而测量放大器价格较高,这样会使系统成本升高。方案一程序设计稍微复杂一些,使用有大量的资料可以查询,该方案完全可行,经济上也有很大的优势,同时体现了技术的先进性。综上所述,本设计采用方案一进行系统设计。第3章 电路设计3.1工作原理 基于AT89C51的智能温度预警系统以AT89C51为控制芯片,以Keil软件为系统开发平台,用C51进行程序设计,以PROTEUS作为仿真软件。系
17、统主要由传感器电路、单片机最小系统、键盘电路、液晶显示电路、报警电路、电源电路组成,系统原理图如图3.1所示。图3.1 系统原理图DS18B20数字温度传感器,每个DS18B20有自己的序列号,因此本系统可以在一根总线上挂接了4个DS18B20,通过CRC校验,对各个DS18B20的ROM进行寻址,地址符合的DS18B20数字温度传感器才作出响应,接收主机的命令,向主机发送转换的温度。采用这种寻址技术,单片机使用一个IO口即能实现对四点环境的温度数据进行采集,使系统硬件电路更加简单,系统更加稳定。它的输入/输出采用数字量,以单总线技术,接收主机发送的命令,根据DS18B20内部的协议进行相应的
18、处理,将转换的温度以串口发送给主机。主机按照通信协议用一个IO口(P1.7)模拟DS18B20的时序,发送命令(初始化命令、ROM命令、RAM命令)给DS18B20,转换完成之后单片机读取温度值,在内部进行相应的数值处理,用12864LCD显示各点的温度。在系统启动的时候,可以通过44键盘设置各点温度的上限值,当某点的实际温度超过设置值时,报警器开始报警,液晶显示该传感器的路数、设置温度值、实际温度值以及路数和该路的状态,从面实现了对各点温度的测量和实时监控。3.2 DS18B20与单片机接口技术3.2.1 DS18B20的引脚功能DS18B20的引脚功能描述见表3.1。表3.1DS18B20
19、引脚功能描述序号名称引脚功能描述1GND地信号2DQ数字输入输出引脚,开漏单总线接口引脚,当使用寄生电源时,可向电源提供电源3VDD可选择的VDD引脚,当工作于寄生电源时,该引脚必须接地3.2.2 DS18B20与单片机接口电路如图3.2所示,为单片机和DS18B20的接口电路。DS18B20只有三个引脚,一个接地,一个接电源,一个数字输入输出引脚接单片机的P1.7口,电源与数字输入输出脚间需要接一个4.7K的电阻。图3.2 DS18B20与单片机接口电路3.2.3 温度寄存器格式和温度/数据对应关系DS18B20温度寄存器如表3.2所示。寄存器有16位,高5位为符号位,低13位为数据位。当寄
20、存器高5位为1时,表示温度为负,否则为正。表3.2 温度寄存器格式 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0232221202-12-22-32-4LS ByteB bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8SSSSS262524MS Byte如果测得的温度大于0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,测得的数值需要取反加1再乘0.0625,即可得到实际的温度值。如表3.3所示,是DS18B20的温度与数据的对应关系。表3.3 温度/数据的关系温度输出(2进制)输出(16进制)+1
21、250000 0111 1101 000007D0H+850000 0101 0101 00000550H+20.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH25.06251110 1110 0110 1111EE6FH-551111 1110 1001 0000FE90H3.2.4 单片机对DS18
22、B20的控制方法DS18B20采用严格的单总线通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。除了应答脉冲所有这些信号都由主机发出同步信号。总线上传输的所有数据和命令都是以字节为单位,且低位在前,高位在后。(1) 初始化序列:复位脉冲和应答脉冲在初始化过程中,主机通过拉低单总线至少480s,以产生复位脉冲(TX)。然 后主机释放总线并进入接收(RX)模式。当总线被释放后,5k的上拉电阻将单总线拉高。DS18B20检测到这个上升沿后,延时15s60s,通过拉低总线60s240s产生应答脉冲。初始化脉冲如图3.3所示。图3.3 DS18B20初始
23、化时序DS18B20的初始化应答C语言程序如下所示:bit resetpulse(void)DQ=0;delay600us(); DQ=1;delay60us();return(DQ); DS18B20的初始化C语言程序如下所示: void Ds18b20_Init(void)while(1)if(!resetpulse() /收到ds18b20的应答信号DQ=1;delay600us();/延时240usbreak; else resetpulse(); /否则再发复位信号(2) DS18B20的读写控制在写时序期间,主机向DS18B20写入数据;而在读时序期间,主机读入来自DS18B20的
24、数据。在每一个时序,总线只能传输一位数据。读/写时序如图3.4所示。 DS18B20写时序DS18B20存在两种写时序:“写1”和“写0”。主机在写1时序时向DS18B20图3.4 DS18B20读写时序写入逻辑1,而在写0时序向DS18B20写入逻辑0。所有写时序至少需要60s,且在两次写时序之间至少需要1s的恢复时间。两种写时序均以主机拉低总线开始。写1时序:主机拉低总线后,必须在15s内释放总线,然后由上拉电阻将总线拉至高电平。写0时序:主机拉低总线后,必须在整个时序期间保持低电平(至少60s)。在写时序开始后的15s60s期间,DS18B20采样总线的状态。如果总线为高电平,则逻辑1被
25、写入DS18B20;如果总线为低电平,则逻辑0被写入DS18B20。 时序DS18B20只能在主机发出读时序时才能向主机传送数据。所以主机在发出读数据命令后,必须马上产生读时序,以便DS18B20能够传送数据。所有读时序至少60s,且在两次独立的读时序之间至少需要1s的恢复时间。每次读时序由主机发起,拉低总线至少1s。在主机发起读时序之后,DS18B20开始在总线上传送1或0。若DS18B20发送1,则保持总线为高电平;若发送0,则拉低总线。当传送0时,DS18B20在该时序结束时释放总线,再由上拉电阻将总线拉回空闲高电平状态。DS18B20发出的数据在读时序下降沿起始后的15s内有效,因此主
26、机必须在读时序开始后的15s内释放总线,并且采样总线状态。 DS18B20写命令子程序如下:void ds18b20_writecommand(uchar command) uchar i; for(i=0;i8;i+) if(command & 0x01)=0) DQ=0;delay60us();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();DQ=1; _nop_();_nop_(); else DQ=0;_nop_();_nop_(); DQ=1;delay60us(); _nop_();_nop_();_nop_();_nop_();co
27、mmand=_cror_(command,1); DS18B20读温度子程序如下:uchar Ds18b20_Readdata(void) uchar readdata; uchar i; for(i=0;i8;i+) DQ=0; _nop_(); _nop_(); _nop_(); DQ=1; if(DQ=0) readdata=readdata&0x7f; delay60us(); elsereaddata=readdata|0x80;delay60us();if(i7)readdata=_cror_(readdata,1); return readdata; DS18B20的命令序列根据
28、DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。ROM命令通过每个器件64-bit的ROM码,使主机指定某一特定器件(如果有多个器件挂在总线上)与之进行通信。DS18B20的ROM如表3.4所示,每个ROM命令都是8 bit长。表3.4 DS18B20 ROM命令指令协议功能读ROM33H读DS18B20中的编码(即64位地址)符合ROM55H发出此命令后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18
29、B20,使之作出响应,为下一步对该DS18B20的读写作准备搜索ROM0F0H用于确定挂接在同一总线上DS18B20的个数和识别64位ROM地址,为操作各器件作好准备跳过ROM0CCH忽略64位ROM地址,直接向DS18B20 温度转换命令,适用于单个DS18B20工作告警搜索命令0ECH执行后,只有温度超过报警值上限或下限的DS18B20才做出响应温度转换44H启动DS18B20进行温度转换,转换时间最长为500ms(典型为200ms),结果丰入内部9字节RAM中读暂存器BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的第3、4字节写上、下温度数据命令,紧该温度命令之后,传达两
30、字节的数据复制暂存器48H将RAM中第3、4字内容复制到E2PROM中重调E2PROM0B8H将E2PROM中内容恢复到RAM中的第3、4字节读供电方式0B4H读DS18B20的供电模式,寄生供电时DS18B20发送“0”,外部供电时DS18B20发送“1”3.3 键盘电路设计3.3.1 行列式键盘与单片机接口电路根据本设计需要,本系统采用了44键盘实现对温度值和功能键的设定。行列式键盘与单片机的接口电路如图3.5所示,H0-H3为行线,接单片机P2口的高4位,L0-L3为列线,接单片机P2口的低4位。初始化时键盘行线为高电平,列线为低电平。键盘的行线接4输入与门,4输入与门的输出接单片机的外
31、部中断0引脚P3.2口。当有键按下时,将产生中断,在中断程序里对按键进行扫描,得到按键的键值。图3.5 44键盘结构3.3.2 键盘面板键盘面板如图3.6所示,本系统使用的键盘有10数字键,5个功能按键。在系统启动时,先按“设置”键,然后按相应的数字键,按“左移”或者“右移”键改变其他温度的值。按“确认”键之后系统正式启动。系统在运行过程之中可以通过按“重新设置”键,对温度重新进行设置。 图3.6 键盘面板 3.4显示电路设计3.4.1 LCD引脚分布及功能(1) 12864液晶显示屏共有20个引脚,其引脚名称及引脚编号的对应关系如图3.7所示:图3.7 12864液晶显示模块引脚分布图(2)
32、 引脚功能如表3.5所示:表3.5 12864液晶显示模块引脚功能引脚符 号引 脚 功 能引脚符 号引 脚 功 能1VSS电源地15CS1CS1=1芯片选择左边64*64点2VDD电源正+5V16CS2CS2=1芯片选择右边64*64点3VO液晶显示驱动电源17/RST复位(低电平有效)4RSH:数据输入;L:指令码输入18VEELCD驱动负电源5R/WH:数据读取;L:数据写入19A背光电源(+)6E使能信号。20K背光电源(-)7-14DB0-DB7数据线有些型号的模块19、20脚为空脚3.4.2单片机与图形液晶的接口电路 LCD与单片机的接口电路如图3.8所示:单片机对LCD的控制方法将
33、在下一章中详细介绍。3.5 报警电路设计本系统设计中有报警器,使用LM386作为报警器的功率放大器,如图3.9所示。LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。LM386的输入端接单片机的引脚P3.4,输出端接扬声器。当实际温度超过设置的温度值时,单片机引脚输出一定频率的信号,信号经过音频功放放大之后,发出报警声。图3.8 LCD与单片机的接口电路图3.9 LM386功放电路3.6 电源电路设计电源是整个系统的能量来源,它直接关系到系统能否运行。在本系统中单片机、液晶显示、报警等电路需要5V的电源,
34、因此电路中选用稳压芯片7805,其最大输出电流为1.5A,能够满足系统的要求,其电路如图3.10所示。图3.10 电源电路第4章 程序设计4.1 系统资源分配4.1.1 系统硬件资源分配本系统电路连接及硬件资源分配如图4.1所示。采用AT89C51单片机作为核心器件,DS18B20作为温度测量装置,通过AT89C51的P1.7口将温度值送入单片机处理,利用12864LCD显示器和44键盘作为人机接口。图4.1 系统硬件资源分配4.1.2 系统软件资源分配本系统采用了C语言进行程序设计,系统自动为各个变量分配内存区域。用户可以将变量定义在DATA区、IDATA区、PDATA区、XDATA区,常量
35、定义在CODE区。用C语言写较复杂的程序时,要特别注意使用的内存不能超过单片机RAM。4.2 系统流程设计4.2.1主程序流程设计主程序先对系统资源进行初始化,调用LCD显示子程序,显示启动画面。然后进入键盘设置界面。当设置键按下后,开始设置各点的温度,设置完之后,如果确认键按下,则系统开始工作。首先调用DS18B20初始化子程序,再发送ROM命令,读取DS18B20转换的温度值。当读取的温度大于设置的温度值时,报警器开始报警,LCD显示温度的实际值、设置值、路数、状态。接下来对第二、三、四路温度进行采集,处理,显示。主程序流程如图4.2所示:图4.2 主程序流程4.2.2 DS18B20程序
36、流程设计由上一章单片机对DS18B20的控制方法,设计出如下程序流程: 图4.3 写命令子程序流程图 图4.4 DS18B20复位子程序流程图 图4.5 DS18B20读温度子程序流程图 4.2.3 显示程序流程显示是实现人机对话的重要部分,在这里选用12864LCD显示器,可实现对汉字、字符和图片的显示, LCD的引脚功能在上面已经做了说明,下面是其相关指令的介绍。(1) 读取状态字D/IR/WDB7DB6DB5DB4DB3DB2DB1DB001BUSY0ONOFFRST0000当R/W=1,D/I=0时,在E信号为高的作用下,状态分别输出到数据总线上。状态字是了解模块当前工作状态的唯一的信
37、息渠道,在每次对模块操作之前,都要读出状态字,判断BUSY是否为“0”。若不为“0”,则单片机需要等待,直至BUSY =0为止。(2) 显示开关设置 D/IR/WDB7DB6DB5DB4DB3DB2DB1DB0000011111DD=1:开显示;D=0关显示。(3) 显示起始行设置D/IR/WDB7DB6DB5DB4DB3DB2DB1DB00011显示起始行(063)指令表中DB5DBO为显示起始行的地址,取值在03FH(164行)范围内,它规定了显示屏上最顶一行所对应的显示存储器的行地址。(4) 页面地址设置 D/IR/WDB7DB6DB5DB4DB3DB2DB1DB00010111Page
38、(07)页面地址是DDRAM的行地址,8行为一页,DDRAM共64行即8页,DB2-DB0表示0-7页。(5) 列地址设置 D/IR/WDB7DB6DB5DB4DB3DB2DB1DB00001Y address(063)列地址是DDRAM的列地址。共64列,DB5-DB0取不同值得到0-3FH(1-64),代表某一页面上的某一单元地址,列地址计数器在每一次读写数据后它将自动加一。(6) 写显示数据 D/IR/WDB7DB6DB5DB4DB3DB2DB1DB010显 示 数 据该操作将8位数据写入先前已确定的显示存储器的单元内。操作完成后列地址计数器自动加一。 (7) 读显示数据 D/IR/WD
39、B7DB6DB5DB4DB3DB2DB1DB011显 示 数 据该操作将12864模块中的DDRAM存储器对应单位中的内容读出,然后列地址计数器自动加一。先使用软件对要显示汉字进行取模,取出来存入程序中的数组中。汉字是16*16的,使用LCD显示汉字时,先调用写指令子程序设定汉字的起始页地址和起始列地址,再调用写数据子程序写入汉字的16列,然后页地址加1,重新设置起始列地址,调用写指令子程序设定起始页地址和起始列地址,再调用写数据子程序写入汉字的底下的16列。根据上面指令结合字符、汉字、图片显示原理,设计出显示子程序流程如图4.6所示。 图4.6 显示子程序流程图4.2.4 键盘程序程序流程键
40、盘中断程序是用来设在系统起动时各环境温度的上限值,其程序流程图如图4.7所示:图4.7 键盘程序流程4.3 程序设计4.3.1 主程序设计系统主程序如下所示:void main(void) uchar i; P2=0XF0; IT0=1; TMOD=0x01; TH0=0xff; TL0=0xff; ET0=1; PT0=1; EA=1; Init_lcd(); Clr_Scr(); Display_ini(); delay(1500); EX0=1;out: Clr_Scr(); display1(); delay(1000); while(!flag2) KeyInput(); flag2=0; Clr_Scr(); while(1) if(flag4=1) flag4=0; goto out; Ds18b20_Init(); ds18b20_writecommand(0xcc); ds18b20_writecommand(0x44);delay(250);match_rom(ds18b20_num1); ds18b20_writecommand(0xbe); for(i=0;inum0) flag7=1;else if(zhen_temp0nu