课程设计(论文)-基于单片机的温度计及万年历设计.doc_第1页
课程设计(论文)-基于单片机的温度计及万年历设计.doc_第2页
课程设计(论文)-基于单片机的温度计及万年历设计.doc_第3页
课程设计(论文)-基于单片机的温度计及万年历设计.doc_第4页
课程设计(论文)-基于单片机的温度计及万年历设计.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

物理与电气工程学院课程设计报告基于单片机的温度计及万年历设计作者 专业 电气工程及其自动化 年级 2008级 指导教师 成 绩 日期 2009.12.6 基于单片机的温度计及万年历设计(安阳师范学院 物电学院, 河南 安阳 455002)摘要:本系统是一个基于单片机at89c52的液晶温度计的设计,用来测量环境温度,测量范围为-55+125度。设计系统分为4部分:单片机控制、温度传感器、液晶显示、以及监测系统,实现了温度测量的功能。整个设计是以at89c52为核心,通过温度传感器ds18b20来实现环境温度的采集和a/d转换,构成了一个带温度显示的电子万年历。单片机把采集到的温度进行相应的转换后,使之能够方便地在液晶上输出。lcd采用的是lcd12864,它具有功耗低、体积小、显示内容丰富、超薄轻巧,加入了汉字库,可现实八千多个中文汉字的优点,应用越来越广泛。整个设计的重点在于编程,因为其外围电路相对比较简单,实现容易。在本论文中附带了软件实现的流程图以及部分子程序以及各种硬件电路图。关键词:stc89c52单片机 tb1602温度传感器 lcd12864液晶显示器1引言:随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机stc89c52,测温传感器使用ds18b20,同时把数据显示到液晶显示屏上。 2方案论证: 2.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行a/d转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到a/d转换电路,感温电路比较麻烦。2.2 方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器ds18b20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。3 结果与讨论3.1 at89c52介绍 3.1.1单片机主控电路的主要元件是at89c51,其外型如图at89c51是一个低电压,高性能cmos 8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(perom)和128 bytes的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51指令系统,片内置通用8位中央处理器和flash存储单元,内置功能强大的微型计算机的at89c51提供了高性价比的解决方案。 at89c51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(i/o)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,at89c51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和flash存储器结合在一起,特别是可反复擦写的flash存储器可有效地降低开发成本。at89c52与at89c5相比较最大的优点是片内含8k bytes的可反复擦写的只读程序存储器(perom).且内部各部件之前性能进一步得到强化。 3.1.2管脚说明: 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的一些特殊功能口,如下表所示: 口管脚 备选功能 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:来自反向振荡器的输出3.2单总线温度传感器ds18b20简介 3.2.1 ds18b20是dallas公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。它具有3引脚to92小体积封装形式,温度测量范围为55125,可编程为9位12位a/d转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个ds18b20可以并联到3根或2根线上,cpu只需一根端口线就能与多个ds18b20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使ds18b20非常适用于远距离多点温度检测系统3.2.2 ds18b20外形及引脚说明外形及引脚如图2所示:图2 管脚排列图在to-92和so-8的封装中引脚有所不同,具体差别请查阅pdf手册,在to-92封装中引脚分配如下:1(gnd):地2(dq):单线运用的数据输入输出引脚3(vdd):可选的电源引脚3.2.3 ds18b20工作过程及时序ds18b20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。初始时,温度寄存器被预置成-55,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1,这个过程重复进行,直到计数器2计数到0时便停止。初始时,计数器1预置的是与-55相对应的一个预置值。以后计数器1每一个循环的预置数都由斜率累加器提供。为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1计数器所需要的计数个数。ds18b20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25进行比较,若低于0.25,温度寄存器的最低位就置0;若高于0.25,最低位就置1;若高于0.75时,温度寄存器的最低位就进位然后置0。这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表0.5,四舍五入最大量化误差为1/2lsb,即0.25。温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。ds18b20测量温度时使用特有的温度测量技术。ds18b20内部的低温度系数振荡器能产生稳定的频率信号;同样的,高温度系数振荡器则将被测温度转换成频率信号。当计数门打开时,ds18b20进行计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性度加以补偿。测量结果存入温度寄存器中。一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。ds18b20工作过程一般遵循以下协议:初始化rom操作命令存储器操作命令处理数据 初始化单总线上的所有处理均从初始化序列开始。初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。存在脉冲让总线控制器知道ds1820 在总线上且已准备好操作。 rom操作命令一旦总线主机检测到从属器件的存在,它便可以发出器件rom操作命令之一。所有rom操作命令均为8位长。这些命令列表如下:read rom(读rom)33h此命令允许总线主机读ds18b20的8位产品系列编码,唯一的48位序列号,以及8位的crc。此命令只能在总线上仅有一个ds18b20的情况下可以使用。如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象(漏极开路会产生线与的结果)。match rom( 符合rom)55h此命令后继以64位的rom数据序列,允许总线主机对多点总线上特定的ds18b20寻址。只有与64位rom序列严格相符的ds18b20才能对后继的存贮器操作命令作出响应。所有与64位rom序列不符的从片将等待复位脉冲。此命令在总线上有单个或多个器件的情况下均可使用。skip rom( 跳过rom )cch在单点总线系统中,此命令通过允许总线主机不提供64位rom编码而访问存储器操作来节省时间。如果在总线上存在多于一个的从属器件而且在skip rom命令之后发出读命令,那么由于多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生线与的效果)。search rom( 搜索rom)f0h当系统开始工作时,总线主机可能不知道单线总线上的器件个数或者不知道其64位rom编码。搜索rom命令允许总线控制器用排除法识别总线上的所有从机的64位编码。alarm search(告警搜索)ech此命令的流程与搜索rom命令相同。但是,仅在最近一次温度测量出现告警的情况下,ds18b20才对此命令作出响应。告警的条件定义为温度高于th 或低于tl。只要ds18b20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变th或tl的设置,使得测量值再一次位于允许的范围之内。贮存在eeprom内的触发器值用于告警。 存储器操作命令write scratchpad(写暂存存储器)4eh这个命令向ds18b20的暂存器中写入数据,开始位置在地址2。接下来写入的两个字节将被存到暂存器中的地址位置2和3。可以在任何时刻发出复位命令来中止写入。read scratchpad(读暂存存储器)beh这个命令读取暂存器的内容。读取将从字节0开始,一直进行下去,直到第9(字节8,crc)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。copy scratchpad(复制暂存存储器)48h这条命令把暂存器的内容拷贝到ds18b20的e2存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而ds18b20又正在忙于把暂存器拷贝到e2存储器,ds18b20就会输出一个“0”,如果拷贝结束的话,ds18b20 则输出“1”。如果使用寄生电源,总线控制器必须在这条命令发出后立即起动强上拉并最少保持10ms。convert t(温度变换)44h这条命令启动一次温度转换而无需其他数据。温度转换命令被执行,而后ds18b20保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而ds18b20又忙于做时间转换的话,ds18b20将在总线上输出“0”,若温度转换完成,则输出“1”。如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。recall e2(重新调整e2)b8h这条命令把贮存在e2中温度触发器的值重新调至暂存存储器。这种重新调出的操作在对ds18b20上电时也自动发生,因此只要器件一上电,暂存存储器内就有了有效的数据。在这条命令发出之后,对于所发出的第一个读数据时间片,器件会输出温度转换忙的标识:“0”=忙,“1”=准备就绪。read power supply(读电源)b4h对于在此命令发送至ds18b20之后所发出的第一读数据的时间片,器件都会给出其电源方式的信号:“0”=寄生电源供电,“1”=外部电源供电。 处理数据ds18b20的高速暂存存储器由9个字节组成,其分配如图3所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。图3 高速暂存存储器分配图温度/0c二进制表示十六进制表示符号位(5位)数据位(11位)+1250 0 0 0 01111101000007d0h+25.06250 0 0 0 0001100100010191h+10.1250 0 0 0 00001010001000a2h+0.50 0 0 0 0000000010000008h00 0 0 0 0000000000000000h-0.51 1 1 1 111111111000fff8h-10.1251 1 1 1 111101011110ff5eh-25.6251 1 1 1 111001101111fe6fh-551 1 1 1 110010010000fc90hds18b20温度数据表上表是ds18b20温度采集转化后得到的12位数据,存储在ds18b20的两个8比特的ram中,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。温度转换计算方法举例:例如当ds18b20采集到+125的实际温度后,输出为07d0h,则:实际温度=07d0h0.0625=20000.0625=1250c。例如当ds18b20采集到-55的实际温度后,输出为fc90h,则应先将11位数据位取反加1得370h(符号位不变,也不作为计算),则:实际温度=370h0.0625=8800.0625=550c。时序:主机使用时间隙(time slots)来读写 dsl820 的数据位和写命令字的位 (1)初始化 时序见图 2.25-2主机总线 t0时刻发送一复位脉冲(最短为 480us 的低电平信号) 接着在 tl时刻释放总线并进入接收状态 等待 15-60us接着在dsl820检测到总线的上升沿之后ds1820在t2时刻发出存在脉冲(低电平持续 60-240 us) 如图中虚线所示。 (2)写时间隙 当主机总线 t0 时刻从高拉至低电平时就产生写时间隙 见图 2 图 2.25- 图2.5-4从 to 时刻开始 15us 之内应将所需写的位送到总线上,间对总线dsl820 在 t0后15-60us采样若低电平 写入的位是 0 见图2.25 -3 若高电平 写入的位是 1 见图 2.25- 4连续写 2 位间的间隙应大于 1us。(3)读时间隙 见图2.25-5主机总线 to 时刻从高拉至低电平时 总线只须保持低电平 l 7ts 之后在 t1 时刻将总线拉高 产生读时间隙 读时间隙在 t1 时刻后 t 2 时刻前有效t z 距 to 为15捍s 也就是说 并在 t o 后的60fzs 一 120 fzs 内释放总线t z 时刻前主机必须完成读位读位子程序(读得的位到 c 中)。3.3 显示电路3.3.1基本特点1、 液晶显示屏是以若干个58或511点阵块组成的显示字符群。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。2、 主控制驱动电路为hd44780(hitachi)及其他公司全兼容电路,如sed1278(seiko epson)、ks0066(samsung)、nju6408(ner japan radio)。3、 具有字符发生器rom可显示192种字符(160个57点阵字符和32个510点阵字符,见附录一)4、 具有64个字节的自定义字符ram,可自定义8个58点阵字符或四个511点阵字符。5、 具有80个字节的ram。6、 标准的接口特性,适配m6800系列mpu的操作时序。7、 模块结构紧凑、轻巧、装配容易。8、 单+5v电源供电。9、 低功耗、长寿命、高可靠性3.3.2 hy系列接口特性及时序(1)写操作(mpu至hd44780)项 目符号最小值最大值单位使能周期tcyce1000-ns使能脉冲宽度pweh450 -ns使能升、降时间ter,tef-25ns地址建立时间tas140-ns地址保持时间tah10-ns数据建立时间tdsw195-ns数据保持时间th10-ns(2)读操作(mpu至hd44780)项 目符号最小值最大值单位使能周期tcyce1000-ns使能脉冲宽度pweh450 -ns使能升、降时间ter,tef-25ns地址建立时间tas140-ns地址保持时间tah10-ns数据延迟时间tddr-320ns数据保持时间tdhr10-ns(3)信号真值表rsr/we功能00下降沿写指令代码01高电平读忙标志和ac码10下降沿写数据11高电平读数据3.3.2接口引脚功能引脚号符号状态功 能1vss电源地2vdd+5v逻辑电源3v0液晶驱动电源4rs输入寄存器选择1:数据;0:指令5r/w输入读、写操作选择1:读;0:写6e输入使能信号7db0三态数据总线(lsb)8db1三态数.据总线9db2三态数据总线10db3三态数据总线11db4三态数据总线12db5三态数据总线13db6三态数据总线14db7三态数据总线(msb)15leda输入背光+5v16ledk输入背光地注:15、16两管脚用于带背光模块,不带背光的模块这两个管脚悬空不接。3 hy系列电特性(1)绝对最大值范围项目符号最小值最大值备注电路逻辑电压vdd-vss07.0v液晶驱动电压vdd-v0013.5v输入电压vivssvdd工作温度0-20-30+50+70+80常温型宽温型超宽温型存储温度-10-30-40+60+80+80常温型宽温型超宽温型(2)电特性项目符号条件mintypmax单位输入高电压vih2.2-v输入低电压vil-0.6v输出高电压vohioh=0.2ma2.4-v输出低电压voliol=1.2ma-0.4v电源电流idd-0.50.2ma3.4.1万年历功能述说整个电子时钟系统电路可分为六大部分:中央处理单元(cpu)、驱动部分、工作指示、传送与判忙部分、显示部分、调时校时部分。本设计采用atmel公司的at89c2051单片机,是以c语言程序设计为基础设计的一个用lcd液晶显示年、月、日、时、分、秒并可以实现校时功能的时钟。cpu对整个系统进行控制,它将定时数据输出到lcd,实现时间的显示,当输入5v电压后,cpu内部程序开始运行,通过单片机及驱动电路的驱动功能,显示部分显示为: lcd液晶显示的初始状态是2009年10月20日00:00:00由此状态开始走时,“秒”位满60,“秒”位清0,“分”加1;“分”位满60,“分”位清0,“时”位加1;“时”位满24,时间部分全部清0,日期日加1星期加1,通过判断月份日满30或31月加1;月满12年加1,月份和日期置1。如此循环。校时则通过按键来实现,当按键k1按下一次时,秒位闪动,按下两次,分位闪动,按下三次时位闪动,按四次日期中的日闪动,按五次月份闪动,按六次年份闪动, 按七次星期闪动;按八次表示确定调整;相应的年、月、日、时、分、秒闪动的同时,按键k2按一次加1,按键k3按一次减1;按键k4为复位键,按下单片机将复位到初始状态。本程序涉及定时器与中断的综合应用,时钟以秒、分、时为单位进行计时。3.4.2时钟计时实现的方案及步骤(1)计算计数初值。时钟计时的最小单位是秒,但使用单片机定时器进行定时,即使按方式1工作,其最长定时时间也只能达到131ms。鉴于此,把定时器的定时时间定为50ms,这样,计数溢出20次即得到时钟计时的最小单位秒;因此用软件方法实现。该程序使用定时器t1来实现定时功能,以工作模式1进行50ms定时,由于该单片机使用的晶振频率为12mhz,为得到50 ms定时,设计数初值为x,则x=15536d=0011110010110000b=3cafh(2)采用中断方式进行溢出次数的累计,计满20次即得到秒计时。(3)从秒到分从分到时的计时是通过累加和数值比较实现的。程序流程及程序清单(4)主程序的主要功能是进行定时器t1的初始化编程并启动t1,然后通过反复调用显示子程序,等待50ms定时中断的到来。(5)中断服务程序的主要功能是进行计时操作。程序开始先判断计数溢出是否满了20次,不满20次表明还没达到最小计时单位秒,中断返回;如果满20次,则表示已达到最小计时单位秒,程序继续向下运行,进行计时操作。要求满1s则“秒位”加1,满60s则“分位”加1,满60min则“时位”加1,满24 h则将秒位、分位、时位全部清0同时天加1星期加1,当星期为sun时,星期变为mon, 月份日满30或31月加1;月满12年加1,月份和日期置1。(6)显示子程序的主要功能把需要显示的内容送到对应的显示位置显示。3.4.3 程序调试过程调试整个源程序是否正确要求:上电后lcd显示的初始状态是2009/12/10 00:00:00由此状态开始走时“秒”位满60,“秒”位清0,“分”加1;“分”位满60,“分”位清0,“时”位加1;“时”位满24,全部清0, 同时天加1星期加1,当星期为sun时,星期变为mon, 月份日满30或31月加1;月满12年加1,月份和日期置1如此循环。3.5.1方案的总设计框图4 结论该温度测试系统不仅具有结构简单、体积小、价格低廉、精确度较高、反应速度较快、数字化显示和不易损坏等特点,而且性能稳定,适用范围广,因此特别适用于对测温要求比较准确的场所。致 谢 在课程论文接近末尾之时,首先,我要衷心地感谢我们的指导老师!另外,我还要特别感谢我所有的搭档,在三个人的配合下,这一期的单片机课程设计取得了圆满成功。在一个多月的毕业设计过程中,我们学会了以前在课堂上没有的东西。,在毕业设计中我们合作的很愉快,当我们遇到困难时我们一起去探讨和研究,一起去战胜它,大家也一起分享排除问题和困难后的喜悦。小小的一个课程设计的成功,也许算不上多大成就,但是它也构成了我们人生最精彩的一部分,因为我们从中经历我们以前没有接触过的许多事情。他使我们懂得什么叫做团结合作;使我们懂得了为什么认真、谨慎是做好一件事情的关键。同时大家也发扬我们慷慨激扬精神:特别能吃苦,特别能攻关,特别能战斗,特别能奉献 。在此我表示真诚的感谢!参考文献1 张俊谟. 单片机原理与应用m. 北京:北京航空航天大学出版社.2000.62 闰玉德,俞虹mcs一51单片机原理与应用m北京:机械工业出版社20033 孙裕晶,沙玲,赵红霞实用控制系统设计教程m长春:吉林大学出版社20004 李及,赵利民mcs一51系列单片机原理与应用m长春:吉林科学技术出版社19955 周兴华手把手教你学单片机m北京:北京航空航天大学出版社20056 孙德文微型计算机技术m北京:高等教育出版社20017 姚君遗汇编语言程序设计m北京:经济科学出版社.2000.8 李全利,迟荣强.单片机原理及接口技术m.北京:高等教育出版社.2004.1.9 李广弟,朱月秀, 王秀山.单片机基础m. 北京:北京航空航天大学出版社.2001.7.10 何立民.单片机应用技术大全m.北京:北京航空航天大学出版社. 1994.附图1电路仿真图附图2ds18b20程序流程图附图3万年历时序图附图4pcb图附图5原理图源程序附页#include #include #define uchar unsigned char#define uint unsigned intsbit lcden=p22;/液晶使能端sbit lcdrs=p20;/液晶数据命令选择端/sbit lcdrw=p21; /lcd读写控制端sbit ds =p13; /根据实际情况定义端口sbit led1=p16;sbit led2=p17;uint xiao;uchar flag,temp,num;uchar bai,s ,g,xa,xb,xc,xd;uchar code table=mon 08:08:08;uchar code table1=mon;uchar code table3=tue;uchar code table4=wed;uchar code table5=thu;uchar code table6=fri;uchar code table7=sat;uchar code table8=sun;uchar code table9=09/12/10 ;sbit s1=p30; /功能键sbit s2=p31; /增大键sbit s3=p32; /减少键uchar count,s1num;int miao,shi,fen,tian,yue,nian,xq;/uint num;/uchar code table=an yang wen du ;uchar code table2=-+ ;void delay(uint z) /延时子程序,uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void dsreset(void) /18b20复位,初始化函数 uint i; ds=0; i=103; while(i0)i-; ds=1; i=4; while(i0)i-;bit tempreadbit(void) /读1位函数 uint i; bit dat; ds=0;i+; /i+ 起延时作用 ds=1;i+;i+; dat=ds; i=8;while(i0)i-; return (dat);uchar tempread(void) /读1个字节 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好一个字节在dat里 return(dat);void tempwritebyte(uchar dat) /向18b20写一个字节数据 uint i; uchar j; bit testb; for(j=1;j1; if(testb) /写 1 ds=0; i+;i+; ds=1; i=8;while(i0)i-; else ds=0; /写 0 ds=1; i+;i+; void tempchange(void) /ds18b20 开始获取温度并转换,测温度之前先调用,之后调用读取温度子程序 dsreset(); delay(1); tempwritebyte(0xcc); / 写跳过读rom指令 tempwritebyte(0x44); / 写温度转换指令void get_temp() /读取18b20温度数据 uchar a,b,c; uint d,e; dsreset(); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); /读低8位 b=tempread(); /读高8位 if(b248) flag=0; /负温度符号标志位 a=a;b=b; /负温度数据去反d=(uint)b;d=8;b=(uchar)e;c=a&0x0f; /取出小数位a=4;b=4; b=4;temp=a|b; /温度整数c=(uint)c; /数据类型转换xiao=c*625;/温度小数/*1602显示程序*/写指令子程序void write_com(uchar com) lcdrs=0;/rw=0; lcden=0;delay(1);p0=com;delay(5);lcden=1; /写数据子程序void write_date(uchar date) lcdrs=1; lcden=1; delay(1); p0=date; delay(5); lcden=0; void write_sfm(uchar add,uchar date)/写时分秒函数 uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+add); /设置显示位置 write_date(0x30+shi); /送去液晶显示十位 write_date(0x30+ge); /送去液晶显示个位 void write_sfm1(uchar add,uchar date)/写年月日函数 uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); /设置显示位置 write_date(0x30+shi); /送去液晶显示十位 write_date(0x30+ge); /送去液晶显示个位 void write_sfm2(xq) write_com(0x80+0); switch(xq) case 1: for(num=0;num3;num+)/第二行mon显示 write_date(table1num); delay(5); break;/够32清0 case 2: for(num=0;num3;num+)/第二行tue显示 write_date(table3num); delay(5); break; case 3: for(num=0;num3;num+)/第二行wed显示 write_date(table4num); delay(5); break; case 4: for(num=0;num3;num+)/第二行thu显示 write_date(table5num); delay(5); break;case 5: for(num=0;num3;num+)/第二行fri显示 write_date(table6num); delay(5); break; case 6: for(num=0;num3

温馨提示

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

评论

0/150

提交评论