毕业设计基于STC89C52单片机控制电热水壶温度的设计(包含原理图和程序)_第1页
毕业设计基于STC89C52单片机控制电热水壶温度的设计(包含原理图和程序)_第2页
毕业设计基于STC89C52单片机控制电热水壶温度的设计(包含原理图和程序)_第3页
毕业设计基于STC89C52单片机控制电热水壶温度的设计(包含原理图和程序)_第4页
毕业设计基于STC89C52单片机控制电热水壶温度的设计(包含原理图和程序)_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于stc89c52单片机控制电热水壶温度的设计中文摘要随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平。本设计论述了一种以stc89c52单片机为主控制单元,以ds18b20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并记录当前的时间。系统设计了相关的硬件电路和相关应用程序。硬件电路主要包括stc89c52单片机最小系统,测温电路、实时时钟电路、lcd液晶显示电路以及通讯模块电路等。系统程序主要包括主程序,读出温度子程序,计算温度子程序、按键处理程序、lcd显示程序以及数据存储程序等。关

2、键词:stc89c52单片机;ds18b20;显示电路目 录一、引言4(一)课题研究的背景4(二)课题研究的目的和意义5二、硬件电路的设计5(一)系统设计的框架5(二)单片机最小系统电路6(三)单片机的选型61.stc89c52单片机简介62.stc89c52单片机时序73.stc89c52单片机引脚介绍7(四)温度传感器电路9(五)系统电源电路的设计10(六)lcd显示电路11(七)串口通讯电路12(八)按键接口电路13(九)ds1302时钟电路13(十)存储器接口电路13三、系统软件设计14(一)计算温度子程序15(二)按键处理子程序15(三)计算温度子程序16(四)显示数据刷新子程序17

3、四、结束语18参考文献19致谢20附件1:系统原理图21附件2:系统相关程序22一、ds18b20底层驱动程序22二、ds1302时钟底层驱动程序27三、数据存储底层驱动程序33一、引言(一)课题研究的背景工业控制是计算机的一个重要应用领域,计算机控制系统正是为了适应这一领域的需要而发展起来的一门专业技术,它主要研究如何将计算机技术、通过信息技术和自动控制理论应用于工业生产过程,并设计出所需要的计算机控制系统。随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平。本设计就是基于单片机stc89c52温度控制系统的

4、设计,通过本次课程实践,我们更加的明确了单片机的广泛用途和使用方法,以及其工作的原理。(二)课题研究的目的和意义随着社会的发展,温度的测量及控制变得越来越重要。本文采用单片机stc89c52设计了温度实时测量及控制系统。单片机stc89c52 能够根据温度传感器ds18b20 所采集的温度在液晶屏上实时显示,通过控制从而把温度控制在设定的范围之内。所有温度数据均通过液晶显示器lcd显示出来。系统可以根据时钟存储相关的数据。通过该课程的学习使我们对计算机控制系统有一个全面的了解、掌握常规控制算法的使用方法、掌握简单微型计算机应用系统软硬的设计方法,进一步锻炼同学们在微型计算机应用方面的实际工作能

5、力。二、硬件电路的设计(一)系统设计的框架本课题设计的是一种以stc89c52单片机为主控制单元,以ds18b20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并记录当前的时间。其主要包括:电源模块、温度采集模块、按键处理模块、实时时钟模块、数据存储模块、lcd显示模块、通讯模块以及单片机最小系统。图1 系统设计框架(二)单片机最小系统电路在课题设计的温度控制系统设计中,控制核心是stc89c52单片机,该单片机为51系列增强型8位单片机,它有32个i/o口,片内含4k flash工艺的程序存储器,便于用电的方式瞬间擦除和改写,而且价格便宜,其外部晶振为12mhz,一个指令周

6、期为1s。使用该单片机完全可以完成设计任务,其最小系统主要包括:复位电路、震荡电路以及存储器选择模式(ea脚的高低电平选择),电路如下图2所示:图2 单片机最小系统(三)单片机的选型本课题设计的温度控制系统主控制芯片选型为stc89c52单片机,其特点如下:1.stc89c52单片机简介目前,51系列单片机在工业检测领域中得到了广泛的应用,因此我们可以在许多单片机应用领域中,配接各种类型的语音接口,构成具有合成语音输出能力的综合应用系统,以增强人机对话的功能。stc89c52单片机是深圳宏晶科技有限公司生产的一种单片机,在一小块芯片上集成了一个微型计算机的各个组成部分。每一个单片机包括:一个8

7、位的微型处理器cpu;一个512k的片内数据存储器ram;4k片内程序存储器;四个8位并行的i/o接口p0-p3,每个接口既可以输入,也可以输出;两个定时器/记数器;五个中断源的中断控制系统;一个全双工uart的串行i/o口;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率是12mhz。以上各个部分通过内部总线相连接。2.stc89c52单片机时序 stc89c52单片机的一个执器周期由6个状态(s1s6)组成,每个状态又持续2个震荡周期,分为p1和p2两个节拍。这样,一个机器周期由12个振荡周期组成。若采用12mhz的晶体振荡器,则每个机器周期为1us,每个状态周期为

8、16us;在一数情况下,算术和逻辑操作发生在n期间,而内部寄存器到寄存器的传输发生在p2期间。对于单周期指令,当指令操作码读人指令寄存器时,使从s1p2开始执行指令。如果是双字节指令,则在同一机器周期的s4读人第二字节。若为单字节指令,则在51期间仍进行读,但所读入的字节操作码被忽略,且程序计数据也不加1。在加结束时完成指令操作。多数stc89c52指令周期为12个机器周期,只有乘法和除法指令需要两个以上机器周期的指令,它们需4个机器周期。 对于双字节单机器指令,通常是在一个机器周期内从程序存储器中读人两个字节,但movx指令例外,movx指令是访问外部数据存储器的单字节双机器周期指令,在执行

9、movx指令期间,外部数据存储器被访问且被选通时跳过两次取指操作。3.stc89c52单片机引脚介绍stc89c52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出i/o引脚。下面按引脚功能分为4个部分叙述个引脚的功能。(1)电源引脚vcc和vssvcc(40脚):接+5v电源正端;vss(20脚):接+5v电源正端。(2)外接晶振引脚xtal1和xtal2xtal1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成采用外部时钟时,对于hmos单片机,该引脚接地;对于choms单片机,该引

10、脚作为外部振荡信号的输入端。xtal2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于hmos单片机,该引脚作为外部振荡信号的输入端。对于chmos芯片,该引脚悬空不接。(3)控制信号或与其它电源复用引脚 控制信号或与其它电源复用引脚有rst/vpd、ale/p、psen和ea/vpp等4种形式。(a)rst/vpd(9脚):rst即为reset,vpd为备用电源,所以该引脚为单片机的上电复位或掉电保护端。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机复位到初始状态。当vcc发生故障,降低到低电平规

11、定值或掉电时,该引脚可接上备用电源vpd(+5v)为内部ram供电,以保证ram中的数据不丢失。(b)ale/ p (30脚):当访问外部存储器时,ale(允许地址锁存信号)以每机器周期两次的信号输出,用于锁存出现在p0口的低(c)psen(29脚):片外程序存储器读选通输出端,低电平有效。当从外部程序存储器读取指令或常数期间,每个机器周期pesn两次有效,以通过数据总线口读回指令或常数。当访问外部数据存储器期间,pesn信号将不出现。(d)ea/vpp(31脚):ea为访问外部程序储器控制信号,低电平有效。当ea端保持高电平时,单片机访问片内程序存储器4kb(ms52子系列为8kb)。若超出

12、该范围时,自动转去执行外部程序存储器的程序。当ea端保持低电平时,无论片内有无程序存储器,均只访问外部程序存储器。对于片内含有eprom的单片机,在eprom编程期间,该引脚用于接21v的编程电源vpp。 (4)输入/输出(i/o)引脚p0口、p1口、p2口及p3口(a).p0口(39脚22脚):p0.0p0.7统称为p0口。当不接外部存储器与不扩展i/o接口时,它可作为准双向8位输入/输出接口。当接有外部程序存储器或扩展i/o口时,p0口为地址/数据分时复用口。它分时提供8位双向数据总线。对于片内含有eprom的单片机,当eprom编程时,从p0口输入指令字节,而当检验程序时,则输出指令字节

13、。(b).p1口(1脚8脚):p1.0p1.7统称为p1口,可作为准双向i/o接口使用。对于mcs52子系列单片机,p1.0和p1.1还有第2功能:p1.0口用作定时器/计数器2的计数脉冲输入端t2;p1.1用作定时器/计数器2的外部控制端t2ex。对于eprom编程和进行程序校验时,p0口接收输入的低8位地址。(c).p2口(21脚28脚):p2.0p2.7统称为p2口,一般可作为准双向i/o接口。当接有外部程序存储器或扩展i/o接口且寻址范围超过256个字节时,p2口用于高8位地址总线送出高8位地址。对于eprom编程和进行程序校验时,p2口接收输入的8位地址。(d).p3口(10脚17脚

14、):p3.0p3.7统称为p3口。它为双功能口,可以作为一般的准双向i/o接口,也可以将每1位用于第2功能,而且p3口的每一条引脚均可独立定义为第1功能的输入输出或第2功能。p3口的第2功能见下表 表1 单片机p3.0管脚含义引脚第2功能p3.0rxd(串行口输入端0)p3.1txd(串行口输出端)p3.2int0(部中断0请求输入端,低电平有效)p3.3int1(中断1请求输入端,低电平有效)p3.4t0(时器/计数器0计数脉冲端)p3.5t1(时器/计数器1数脉冲端)p3.6wr(部数据存储器写选通信号输出端,低电平有效)p3.7rd(部数据存储器读选通信号输出端,低电平有效)综上所述,m

15、cs51系列单片机的引脚作用可归纳为以下两点:1).单片机功能多,引脚数少,因而许多引脚具有第2功能;2).单片机对外呈3总线形式,由p2、p0口组成16位地址总线;由p0口分时复用作为数据总线。(四)温度传感器电路采用一线制数字温度传感器ds18b20来作为本课题的温度传感器。传感器输出信号进4.7k的上拉电阻直接接到单片机的p1.0引脚上。ds18b20温度传感器是美国达拉斯(dallas)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、a/d转换器、存储器等做在一个很小的集成电路芯片上。本设计中温度传感器之所以选择单线数字器件ds18b20,是在经过多方面比较和考

16、虑后决定的,主要有以下几方面的原因:(1)系统的特性:测温范围为-55+125 ,测温精度为士0.5;温度转换精度912位可变,能够直接将温度转换值以16位二进制数码的方式串行输出;12位精度转换的最大时间为750ms;可以通过数据线供电,具有超低功耗工作方式。(2)系统成本:由于计算机技术和微电子技术的发展,新型大规模集成电路功能越来越强大,体积越来越小,而价格也越来越低。一支ds18b20的体积与普通三极管相差无几,价格只有十元人民币左右。(3)系统复杂度:由于ds18b20是单总线器件,微处理器与其接口时仅需占用1个i/o端口且一条总线上可以挂接几十个ds18b20,测温时无需任何外部元

17、件,因此,与模拟传感器相比,可以大大减少接线的数量,降低系统的复杂度,减少工程的施工量。(4)系统的调试和维护:由于引线的减少,使得系统接口大为简化,给系统的调试带来方便。同时因为ds18b20是全数字元器件,故障率很低,抗干扰性强,因此,减少了系统的日常维护工作。ds18b20温度传感器只有三根外引线:单线数据传输总线端口dq ,外供电源线vdd,共用地线gnd。ds18b20有两种供电方式:一种为数据线供电方式,此时vdd接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度转换,相应的完成温度转换的时间较长。这种情况下,用单片机的一个i/o口来完成对ds18b20总线的上拉。另一种是

18、外部供电方式(vdd接+5v),相应的完成温度测量的时间较短。在本设计中采用外部供电方式实现ds18b20传感器与单片机的连接,其接口电路如图4所示。图4 温度传感器接口(五)系统电源电路的设计本系统采用电源稳压芯片是lm2596,该开关电压调节器是降压型电源管理单片集成电路,能够输出3a的驱动电流,输入电压是+5v,输入电压是+24v,同时具有很好的线性和负载调节特性。该器件内部集成频率补偿和固定频率发生器,开关频率为150khz,与低频开关调节器相比较,可以使用更小规格的滤波元件。 该器件还有其他一些特点:在特定的输入电压和输出负载的条件下,输出电压的误差可以保证在4%的范围内,振荡频率误

19、差在15%的范围内;可以用仅80a的待机电流,实现外部断电;具有自我保护电路(一个两级降频限流保护和一个在异常情况下断电的过温完全保护电路)在该温度控制系统中,其电源电路设计如下图10所示。图5 系统电源模块(六)lcd显示电路本课题设计的温度控制系统是采用液晶屏128*64作为显示模块,其接口原理图如下图6所示:图6 液晶显示接口电路(七)串口通讯电路本课题设计的通讯采用的是常见的串口通讯,协议转换芯片是采用max232a,其接口原理图如下图7所示:图6 串口通讯接口电路(八)按键接口电路本课题设计采用的键盘模块,其接口原理图如下图8所示:图8 键盘模块电路(九)ds1302时钟电路本课题设

20、计的时钟是采用时钟芯片ds1302,其接口原理图如下图9所示:图9 时钟接口电路(十)存储器接口电路本课题设计的存储器采用的是at24c256,其接口原理图如下图十所示:图10 存储器电路三、系统软件设计系统的软件主要是采用c语言,对单片机进行变成实现各项功能。主程序对模块进行初始化,而后调用读温度、处理温度、显示、键盘等模块。用的是循环查询方式,来显示和控制温度,主程序的主要功能是负责温度的实时显示、读出并处理ds18b20的测量的当前温度值并负责调用各子程序,其程序流程如图10系统程序流程图。开始初始化启动db18b20读温度计算温度lcd显示图10系统程序流程图(一)计算温度子程序 读出

21、温度子程序的主要功能包括初始化,判断ds18b20是否存在,若存在则进行一系列的读操,作若不存在则返回。其程序流程图如图11所示。图11 读温度流程图 (二)按键处理子程序 按键处理子程序主要是负责参数的设置,主程序每循环一次都要对按键进行扫描,判断是否有输入键按下则进行一系列的按键输入操作。其程序流程框图如图12所示。图12 温度转换流程图(三)计算温度子程序计算温度子程序将ram中读取值进行bcd码的转换运算,并进行温度值正负的判定,其程序流程图如图13所示。 开始温度零下?温度值取补码置“”标志计算小数位温度bcd值计算整数位温度bcd值 结束置“+”标志ny图13 计算温度子程序(四)

22、显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图14。温度数据移入显示寄存器十位数0?百位数0?十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束nnyy图14 数据刷新子程序四、结束语通过此次毕业论文的课题设计,我们学会了怎样把所学的书本知识应用于实践中去,并学会了如何去思考整个控制系统的软硬件设计。实践过程中我们遇到了一些困难,但在解决问题的过程中,我们学会了团队合作精神和怎样发现问题、分析问题,进而解决问题。此次课程设计不仅增强了我们学习专业课的兴趣,而且给了我们勇气和信心,更重要的是它为我

23、们以后的学习指明了方向。参考文献1 李广弟,朱月秀,王秀山.单片机基础北京航空航天大学出版社,2001(07).2 蔡美琴,张为民等.mcs-51系列单片机系统及其应用高等教育出版社,2004(06).3 张毅刚,等.mcs-51单片机应用设计m.哈尔滨工业大学出版社,1997.4 刘瑞星,胡健等.protel dxp 实用教程机械工业出版社,2003(04).5 于海生. 计算机控制技术 机械工业出版社 2007(05).6 谭浩强. c程序设计 清华大学出版社.7 康华光. 电子技术基础 模拟部分 高等教育出版社 1998(08).8 余锡存. 单片机原理与接口技术 西安电子科技大学出版社

24、,2003.致谢本论文是在我的指导老师密切关心和悉心指导下完成的。老师在课题开题期间和论文写作的过程中给予了我许多指导,导师总是以认真负责、一丝不苟的工作态度阅读并修改文章中不足的地方,他优良的作风和严谨治学的态度深深影响着我,至此,向恩师致以最真挚的感谢和最崇高的敬意!同时我要感谢我的同学,特别是我的室友们,正是他们在这几年里陪我一起成长,一起学习,才让我有了今天的成绩。他们在平时的学习和生活中他们给予了我无私的关怀和帮助,在此表示我最诚挚的谢意。附件1:系统原理图附件2:系统相关程序一、ds18b20底层驱动程序/延时 n ms/ds1820引脚定义sbit tmdat =p10;void

25、 ds1820_delaycount (unsigned char coun) data unsigned char count; count=coun; while(count0) count-; count=coun; while(count0) count-;/复位ds18b20void ds1820_reset(void) tmdat=0; ds1820_delaycount(412); tmdat=1; ds1820_delaycount(16); /等待ds18b20应答unsigned char ds1820_answer(void)data unsigned int i;dat

26、a unsigned char j; i=0xc000; while(tmdat) i-;if (i=0)return(aban_return); i=0xffff; j=3; while(tmdat) i-;if (i=0) if(j=0) return(aban_return); else j-; i=0xffff; ds1820_delaycount(16); return(done_return);/等待ds18b20应答/读取位bit ds1820_readbit(void) data int i=0; bit dat; tmdat=0;i+;i+;i+;i+; tmdat=1;i+

27、;i+;i+;i+;i+;i+;i+;i+; dat = tmdat;/ ds1820_delaycount(8); ds1820_delaycount(32); return dat;/读取字节unsigned char ds1820_readbyte(void)data unsigned char i,j,dat=0; for(i=1;i=8;i+) j=ds1820_readbit(); dat=(j1); return dat;/写一个字节void ds1820_writebyte(unsigned char dat) data signed char i=0; data unsign

28、ed char j; bit testb; for(j=1;j1; if(testb) tmdat=0; i+;i+;i+;i+;i+;i+;i+;i+; tmdat=1; /ds1820_delaycount(8); ds1820_delaycount(32); else tmdat=0; /ds1820_delaycount(8); ds1820_delaycount(32); tmdat=1; i+;i+;i+;i+;i+;i+;i+;i+; /读操作开始unsigned char ds1820_starttem(void) ea=0; ds1820_reset(); if(ds1820

29、_answer()=aban_return) ea=ea; return(aban_return); / ds1820_delayms(1); ds1820_delayms(4); ds1820_writebyte(0xcc); / ds1820_writebyte(0x55); / for(i=0;i8;i+) /ds1820_writebyte(ds1820_tempi); ds1820_writebyte(0x44); ea=ea; return(done_return);/读所有传感器int ds1820_readtem(void)data unsigned char a,b;data

30、 int y3;data float y4;data unsigned char i; ea=0; ds1820_reset(); if(ds1820_answer()=aban_return) ea=ea; return(0xffff); ds1820_delayms(4); ds1820_writebyte(0xcc); /跳过匹配传感器 /ds1820_writebyte(0x55); /匹配传感器 / for(i=0;i8;i+) /ds1820_writebyte(run_inf.system_index.ds1820_tempi); ds1820_writebyte(0xbe);

31、/读取温度 for(i=0;i9;i+) run_inf.system_index.ds1820_tempi=ds1820_readbyte(); if(crc(9)!=0) ea=1; return(0xffff); /计算crc a = run_inf.system_index.ds1820_temp0; b = run_inf.system_index.ds1820_temp1; ds1820_reset(); y3 = (b0; i-)rtc_io = temp_0; /*相当于汇编中的 rrc */rtc_sc = 1;rtc_sc = 0;temp = temp 1; /功能: 从

32、ds1302读取1byte数据unsigned char uc_rtoutputbyte(void) unsigned char i;rtc_io=1;for(i=8; i0; i-) temp = temp 1; /*相当于汇编中的 rrc */ temp_7 = rtc_io; rtc_sc = 1; rtc_sc = 0; return(temp); /功能: 往ds1302写入数据void write1302(unsigned char ucaddr,unsigned char ucda) bit ea; ea=ea; ea=0;rtc_rs_port&=(rtc_rs_bit);rt

33、c_sc = 0;rtc_rs_port|=rtc_rs_bit;v_rtinputbyte(ucaddr); /* 地址,命令 */v_rtinputbyte(ucda); /* 写1byte数据*/rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);ea = ea; /功能: 读取ds1302某地址的数据unsigned char read1302(unsigned char ucaddr)unsigned char ucda; bit ea; ea=ea; ea=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=

34、rtc_rs_bit;v_rtinputbyte(ucaddr); /* 地址,命令 */ucda = uc_rtoutputbyte(); /* 读1byte数据 */rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);ea = ea;return(ucda);/功能: 设置初始时间void set1302(ptime_s time_temp) unsigned char i= 0x80; write1302(0x8e,0x00); /* 控制命令,wp=0,写操作*/ write1302(i,time_temp-sec); i +=2; write1302(i,tim

35、e_temp-min); i +=2; write1302(i,time_temp-hou); i +=2; write1302(i,time_temp-day); i +=2; write1302(i,time_temp-mon); i +=2; write1302(i,0x02); i +=2; write1302(i,time_temp-yea); i +=2; write1302(0x8e,0x80); /* 控制命令,wp=1,写保护*/功能: 读取ds1302当前时间void get1302(void) unsigned char i,time_bcd_temp6;unsigned

36、 char ucaddr = 0x81;for (i=0;i7;i+) time_bcd_tempi = read1302(ucaddr);/*格式为: 秒 分 时 日 月 星期 年 */ ucaddr += 2; sec=time_bcd_temp0;min=time_bcd_temp1;hou=time_bcd_temp2;day=time_bcd_temp3;mon=time_bcd_temp4;yea=time_bcd_temp6; /连续6字节读出程序void ds1302_read(unsigned char *ptr,unsigned char addr) unsigned ch

37、ar i;addr=addr*2+0x0c1;for(i=0;i6;i+) *(ptr+i)=read1302(addr); addr+=2; /连续6字节写入程序void ds1302_write(unsigned char *ptr,unsigned char addr)unsigned char i;addr=addr*2+0x0c0;write1302(0x8e,0x00); /写保护置低(关闭)for(i=0;i6;i+) write1302(addr,*(ptr+i); addr+=2; write1302(0x8e,0x80); /写保护置高(打开) void start1302

38、(void) unsigned char temp; bit ea; ea=ea; ea=0; temp=read1302(0x81); temp&=0x7f; write1302(0x8e,0x00); /* 控制命令,wp=0,写操作*/ write1302(0x80,temp); write1302(0x90,0); write1302(0x8e,0x80); /* 控制命令,wp=1,写保护*/ ea=ea;/ds1302驱动程序结束三、数据存储底层驱动程序/atc256引脚定义sbit epr_sd=p33;sbit epr_sc=p32;bdata unsigned char te

39、mp1;sbit temp1_0 = temp10;sbit temp1_7 = temp17;/存储器驱动程序开始void noack(void) epr_sd=1; epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=0;void ask()unsigned char i=0xff; epr_sd=1; epr_sc=1; epr_sc=1; epr_sc=1;doi-; if(epr_sd=0) epr_sc=0; i=0; while(i!=0);epr_sd=1;epr_sd=1;epr_sd=1;void stop() epr_sd=0; epr_sd=0;

40、epr_sd=0; epr_sc=1; epr_sc=1; epr_sc=1; epr_sd=1; epr_sd=1; epr_sd=1; epr_sd=1;/24c256 startvoid start()epr_sc=1;epr_sd=1;epr_sd=1; epr_sd=0; epr_sd=0; epr_sc=0;void wrby(unsigned char x) unsigned char i; epr_sc=0;temp1=x;for(i=0;i8;i+) /从高位开始传送数据 epr_sd=temp1_7; temp1=temp11; /左移一位 epr_sc=1; epr_sc

41、=1; epr_sc=1; epr_sc=1; epr_sc=0; /24c256 rdby unsigned char rdby() /从高位开始读出数据 unsigned char i;epr_sd=1;epr_sd=1;epr_sd=1;for(i=0;i8;i+) epr_sc=1;epr_sc=1; temp1=temp11; temp1_0=epr_sd; epr_sc=0; epr_sc=0;epr_sc=0; return(temp1);/24c256 waddr void waddr() start(); wrby(0xa0); ask();/24c256 raddrunsi

42、gned char raddr() start(); wrby(0xa1); ask(); temp1=rdby(); noack(); stop(); return(temp1);void w16addr(unsigned int x) union unsigned int int_type;unsigned char char_type1; u_int_char;unsigned m,n;u_int__type=x; /将x的高位赋给m,低位赋给nm=u_int_char.char_type0;n=u_int_char.char_type1; wrby(m ); ask()

43、; wrby(n ); ask();/延时void d5ms() unsigned char a, b; for (a=0;a=15;a+) for (b=0;b0x7f;b+) ; /24c256 读出一字节 unsigned char epr_read(unsigned int x) bit ea; ea=ea; ea=0; /关中断 epr_wen; d5ms(); waddr(); w16addr(x); temp1=raddr(); ea=ea;/开中断 return(temp1);/24c256 写入一字节void epr_write(unsigned int f,unsigned

44、 char x) bit ea; ea=ea; ea=0 ; /关中断 d5ms(); waddr(); w16addr(f); wrby(x); ask(); stop(); d5ms();ea=ea; /开中断/存储器驱动程序结束汇编部分:temperature_l data 31h ;ds18b20低8位buffertemperature_h data 30h ;ds18b20高8位buffer temperature_hc data 32h ;计算后的百位和十位的bcd码存放;buffer temperature_lc data 33h ;计算后的个位和小数位的bcd码存放 tempe

45、rature_zh data 34h ; 计算后十位和个位hex码的存放bufferdis_buf_x data 35h ;数码管小数位buffer dis_buf_g data 36h ;数码管个位buffer dis_buf_s data 37h ;数码管十位buffer dis_buf_b data 38h ;数码管百位buffer key_buf_g data 39h ;键盘输入后,的个位值 key_buf_s data 49h ;键盘输入后,的十位值 key_buf_b data 41h ;键盘输入后,的百位值 k_up equ p1.1 ;上调按钮 k_down equ p1.2

46、;下调按钮 k_enter equ p1.0 ;输入数据确认按钮 p_ds18b20 equ p3.0 ;读取ds18b20的输入端口 p_switch equ p3.1 ;可控硅控制 flag equ 20h.0 ;标志位,确定是否存在ds18b20 enter_flag equ 20h.1 ;键盘输入的标志位, org 0000h ljmp main org 0100hmain: mov sp,#60h ;初始化 mov key_buf_g,#00h ;由于key_buf是由用户输入的,所以先赋值初始化 mov key_buf_s,#00h mov key_buf_b,#00hnext: lcall read_temp ;调用读温度子程序 jb flag,normal ;判断是否有ds18b20的存在 call

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论