18B20测温与小灯控制1.docx

上传人:rrsccc 文档编号:9849725 上传时间:2021-03-30 格式:DOCX 页数:37 大小:33.84KB
返回 下载 相关 举报
18B20测温与小灯控制1.docx_第1页
第1页 / 共37页
18B20测温与小灯控制1.docx_第2页
第2页 / 共37页
18B20测温与小灯控制1.docx_第3页
第3页 / 共37页
18B20测温与小灯控制1.docx_第4页
第4页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《18B20测温与小灯控制1.docx》由会员分享,可在线阅读,更多相关《18B20测温与小灯控制1.docx(37页珍藏版)》请在三一文库上搜索。

1、18B20测温与小灯控制1中国矿业大学徐海学院技能考核培训姓名:李永林学号: 22110822 专业:信息11-2班题目:基于单片机的红外无线控制专题: 18B20测温与小灯控制指导教师:有鹏老师翟晓东老师设计地点:电工电子实验室时间:2014 年 4 月通信系统综合设计训练任务书学生姓名李永林专业年级信息11-2班学号22110822 设计日期:2014年4 月5日至2014 年4 月10日设计题目:基于单片机的红外无线控制设计专题题目:18B20测温与小灯控制设计主要内容和要求:1. 主要内容:单片机内部结构红外遥控解码C语言程序设计2. 功能扩展要求利用18B20温度传感器采集温度并且在

2、数码管中显示。通过红外接收采集遥控器发送的信号以实现小灯的控制。指导教师签字:摘要:本设计介绍了一种基于AT89S52单片机的C语言程序设计,完成了利用18B20温度传感器采集温度并且在数码管中显示和通过红外接收采集遥控器发送的信号以实现小灯的控制,本论文首先阐明了系统的总体设计方案,然后介绍了单片机最小系统、红外收发电路、继电器电路、蜂鸣器电路及数码管显示电路的原理和相关概念,用C语言编写单片机应用程序,不用具体组织、分配存储器资源和处理端口数据,但对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。关键词:单片机,DS18B20,红外遥控,数码管显示目录1

3、 C语言概述 (5)简介 (6)2.1 主要性能 (6)2.2 引脚说明 (6)效果显示 (10)系统硬件电路 (11).1总体设计方案 (11).2单片机最小系统电路 (11).3红外遥控收发电路 (12).3.1 红外遥控发射电路 (12).3.2 红外遥控接收电路 (13).4继电器电路 (13).5蜂鸣器电路 (14).6 数码管显示电路 (14) DS18B20 (15).1 DS18B20的主要特征 (15).2 DS18B20工作原理及应用 (15)总结和体会 (16)参考文献 (16)附录 (17)1 C语言概述单片机应用系统的程序设计有两种方法:一种是基于汇编语言的,另一种是

4、基于C语言的。汇编语言程序的机器代码生成效率高,但可读性较差,而C语言程序的可读性和可移植性远超过汇编语言。用C语言编写单片机应用程序,不用具体组织、分配存储器资源和处理端口数据,但对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。C语言具有以下主要特点:语言简洁,使用方便灵活。它是程序设计语言中规模最小的语言之一。ANSI标准C语言只有32个关键字,9种流程控制语句。程序可移植性好。表达能力强。具有丰富的数据结构类型和多种运算符。用户可灵活采用多种数据类型和使用各种运算符,实现复杂运算。表达方式灵活。利用 C语言的多种运算符可组成各种表达式,还可采用多种方

5、法来获得表达式的值,使程序设计具有更大的灵活性。可进行结构化程序设计。C语言以函数作为程序设计的基本单位,非常适合结构化程序设计。可直接操作计算机硬件。C语言具有直接访问机器物理地址的能力,C51的编译器都可直接对单片机内部的SFR和I/O端口进行操作,可以直接访问片内、片外存储器,还可以进行各种为操作。生成的目标代码质量较高。简介AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥

6、有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。2.1 主要性能1、与MCS-51单片机产品兼容;2、8K字节在系统可编程Flash存储器;3、1000次擦写周期;4、全静态操作:0Hz-33MHz;5、三级加密程序存储器;6、32个可编程I/O口线;7、三个16位定时器/计数器;8、8个中断源;9、全双工UART串行通道;10、低功耗空闲和掉电模式;11、掉电后中断可唤醒;12、看门狗定时器;13、双数据指针;14、掉电标识符。2.2 引脚说明AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存

7、储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CP

8、U 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52-24PU AT89S52引脚图 DIP封装P0 口P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL 逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口P1 口是一个具有内部上拉电阻

9、的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。在flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能:P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5 MOSI(在系统编程用)P1.6 MISO(在系统编程用)P1.7 SCK(在系统编程用)P2 口P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个 TTL

10、 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。AT89S52引脚图 PLCC封装P3 口P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TT

11、L 逻辑电平。 P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。端口引脚第二功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INTO(外中断0)P3.3 INT1(外中断1)P3.4 TO(定时/计数器0)P3.5 T1(定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。RST复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE/PROG当访问外部程序存储器或数

12、据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外

13、部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1振荡器反相放大器和内部时钟发生电路的输入端。XTAL2振荡器反相放大器的输出端。效果显示利用18

14、B20温度传感器采集温度并且在数码管中显示。通过红外接收采集遥控器发送的信号以实现小灯的控制。系统硬件电路.1总体设计方案系统组成框图如图1所示.2单片机最小系统电路图2 51单片机最小系统主要引脚说明:?P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。?P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被

15、外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。?P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号

16、。?P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口同时为闪烁编程和编程校验接收一些控制信号。?RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。?XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。?XTAL2:来自反向振荡器的输出。.3红外遥控收发电路红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,

17、在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。常用的红外遥控系统一般分发射和接收两个部分。应用编/解码专用集成电路芯片来进行控制操作,如下图所示。发射部分包括键盘矩阵、编码调制、LED 红外发送器;接收部分包括光、电转换放大器、解调、解码电路。图3红外线遥控系统框图.3.1 红外遥控发射电路发射部分的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管;由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。目前大量的使

18、用的红外发光二极管发出的红外线波长为940nm左右。遥控器的基本组成如图所示。它主要由形成遥控信号的微处理器芯片、晶体振荡器、放大晶体管、红外发光二极管以及键盘矩阵组成。图4遥控器电路图工作原理:微处理器芯片IC1内部的振荡器通过2、3脚与外部的振荡晶体X组成一个高频振荡器,产生高频振荡信号。此信号送入定时信号发生器后进行分频产生正弦信号和定时脉冲信号。正弦信号送入编码调制器作为载波信号;定时脉冲信号送致扫描信号发生器、键控输入编码器和指令编码器作为这些电路的时间标准信号。IC1内部的扫描信号发生器产生五种不同时间的扫描脉冲信号,由59脚输出送至键盘矩阵电路。当按下某一键时,相应于该功能按键的

19、控制信号分别由1014脚输入到键控编码器,输出相应功能的数码信号。然后由指编码器输出指令码信号,经过调制器调制在载波信号上,形成包含有功能信息的高频脉冲串,由17脚输出经过晶体管BG放大,推动红外线发光二极管D发射出脉冲调制信号.3.2 红外遥控接收电路红外线遥控接收器的作用是将接收到的红外线遥控信号,经过放大、解调和整形后输出功能指令信号,送至微处理器进行识别和处理。.4继电器电路继电器是一种当输入量(电、磁、声、光、热)达到一定值时,输出量将发生跳跃式变化的自动控制器件。它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电

20、流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。.5蜂鸣器电路蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。.6 数码管显示电路 DS18B20.1 DS18B20的主要特征1)全数字温度转换及输出。2)先进的单总线数据通信。3)最高 12 位分辨率,精度可达土0.5 摄氏度。4)12 位分辨率时的最大工作周期为750 毫秒。5)可选择寄生工作方式。6)检测温度范围为55C +125C (67F +257F)7)内置 EEPROM,限温报警功能。8)64 位光

21、刻ROM,内置产品序列号,方便多机挂接。9)多样封装形式,适应不同硬件系统。.2 DS18B20工作原理及应用DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是: ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是 19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。R

22、AM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。总结和体会这次

23、,我们学习的是单片机C语言编程,语言编程一定要多下功夫和打好基础,另外要多查相关的资料,要对电路功能和单片机有一定的认识,编程要勇于创新,多思考与钻研。经过长达个星期的课程设计,最终完成了单片机的设计。其间遇到了许多问题,但最后得以顺利解决,编程很辛苦与乏味,但苦中有乐,在如今的单一的理论学习中,编程与动手思考的能力十分重要,编程也可说成是团体的任务,一起的学习与实践可以让我们有说有笑,相互帮助,自然而然同学们之间的友谊更加深刻,也让我体会到了合作与团结的重要性。这次语言编程增强了自己调试、分析程序、设计软件功能的能力。通过上网查询和查阅相关书籍资料,让我更深一步提高了对C编程的掌握,学会了C

24、 编程的一般步骤。这次我们编程我们实现了利用18B20温度传感器采集温度并且在数码管中显示、通过红外接收采集遥控器发送的信号以实现小灯的控制。本次设计是把理论知识应用到了实践中,熟悉了课程设计的流程,同时通过仿真,设计,也加深了自己对理论知识的理解和掌握。参考文献1 马忠梅.单片机C语言应用设计.北京:北京航空航天大学出版社2 梅丽凤,王艳秋,张军等.单片机原理及接口技术.北京:清华大学出版社,北京交通大学出版社,2004. 243 李湘闽,唐宏,葛继.学习型红外遥控器.红外.2004,11(8):33364 李洪明.漫谈红外遥控.电子世界.2000年01期总第244期.53附录#includ

25、e #include #include#include#include delay.h#include decode.h#define uchar unsigned char#define uint unsigned int#define Font_code P0 /字符码写地址#define reg_code P2 /字位码写地址unsigned char Shiwei_Temp;unsigned char Gewei_Temp;code uchar Show_Tab=0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x

26、82,/*6*/0xF8,/*7*/0x80,/*8*/0x90,/*9*/0x88,/*A*/0x83,/*b*/0xC6,/*C*/0xA1,/*d*/0x86,/*E*/0x8E /*F*/;code uchar S_Tab8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char Display_Buffer8; /显示缓冲区uchar bit_con; /字位码扫描计数器extern uchar key_value; /键值extern bit key_flg; /按钮按下标志extern bit cycle_flg; /循环标志u

27、char temp;uchar flag_get,count,num,minute,second;/uchar str8;uchar code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/7段数码管段码表共阳sbit seg1=P20;sbit seg2=P21;sbit seg3=P22;sbit DQ=P27;/ds18b20 端口sfr dataled=0x80;/显示数据端口void delay1(uchar MS);unsigned char ReadTemperature(void);void Init_DS18B2

28、0(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(unsigned int i);unsigned int k,j=0;void main()TMOD=0x11;/定时器设置TH1=0xef;TL1=0xf0;ET1=1;EA =1;TR1=1;P2=0x00;count=0;delay_nus(1);delay_nms(1);reg_code = 0xff; /关闭显示for(bit_con=0;bit_conbit_con = 0;Timer0init();/定时器

29、0初始化EX0init(); /外部中断初始化while(1)P1=0xff;P2=0xff;P0=0xc6;/显示C符号P2=0xbf;delay(300);P2=0xff;P0= Shiwei_Temp;P2=0xdf;delay(300);P2=0xff;P0= Gewei_Temp;P2=0xef;delay(300);Gewei_Temp=tabtemp/10; /十位温度Shiwei_Temp=tabtemp%10; /个位温度if(flag_get=1) /定时读取当前温度temp=ReadTemperature();flag_get=0;a: if(key_value=0x16

30、)for(k=0;k P1=P1;for(j=0;jP2=0xff;P0=0xc6;/显示C符号P2=0xbf;delay(300);P2=0xff;P0= Shiwei_Temp;P2=0xdf;delay(300);P2=0xff;P0= Gewei_Temp;P2=0xef;delay(300);Gewei_Temp=tabtemp/10; /十位温度Shiwei_Temp=tabtemp%10; /个位温度if(flag_get=1) /定时读取当前温度temp=ReadTemperature();flag_get=0;if(key_flg) /解码生效,把遥控码值转移到显示区,数据码

31、两位显示key_flg = 0;Display_Buffer0 = Show_Tab(key_value & 0xf0) 4;Display_Buffer1 = Show_Tabkey_value & 0x0f;if(key_value=0x0c)goto b;if(key_value=0x18)goto c;if(key_value=0x5e)goto d;bit_con+;if(bit_con 1) bit_con = 0;reg_code = 1; /先消隐显示Font_code = Display_Bufferbit_con; /送字形码reg_code = S_Tabbit_con;

32、 /送字位delay_1ms();key_value=0;b: if(key_value=0x0c)P1=0xfe;for(k=0;kP1P1|=0x01;for(j=0;jP2=0xff;P0=0xc6;/显示C符号P2=0xbf;delay(300);P2=0xff;P0= Shiwei_Temp;P2=0xdf;delay(300);P2=0xff;P0= Gewei_Temp;P2=0xef;delay(300);Gewei_Temp=tabtemp/10; /十位温度Shiwei_Temp=tabtemp%10; /个位温度if(flag_get=1) /定时读取当前温度temp=R

33、eadTemperature();flag_get=0;if(key_flg) /解码生效,把遥控码值转移到显示区,数据码两位显示key_flg = 0;Display_Buffer0 = Show_Tab(key_value & 0xf0) 4;Display_Buffer1 = Show_Tabkey_value & 0x0f;if(key_value=0x16)goto a;if(key_value=0x18)goto c;if(key_value=0x5e)goto d;bit_con+;if(bit_con 1) bit_con = 0;reg_code = 1; /先消隐显示Fon

34、t_code = Display_Bufferbit_con; /送字形码reg_code = S_Tabbit_con; /送字位delay_1ms();if(P1=0x7f)P1=0xfe;k=0;j=0;key_value=0;c: if(key_value=0x18)P1=0xfe;for(k=0;kP1P1|=0x01;for(j=0;jP2=0xff;P0=0xc6;/显示C符号P2=0xbf;delay(300);P2=0xff;P0= Shiwei_Temp;P2=0xdf;delay(300);P2=0xff;P0= Gewei_Temp;P2=0xef;delay(300)

35、;Gewei_Temp=tabtemp/10; /十位温度Shiwei_Temp=tabtemp%10; /个位温度if(flag_get=1) /定时读取当前温度temp=ReadTemperature();flag_get=0;if(key_flg) /解码生效,把遥控码值转移到显示区,数据码两位显示key_flg = 0;Display_Buffer0 = Show_Tab(key_value & 0xf0) 4;Display_Buffer1 = Show_Tabkey_value & 0x0f;if(key_value=0x16)goto a;if(key_value=0x0c)go

36、to b;if(key_value=0x5e)goto d;bit_con+;if(bit_con 1) bit_con = 0;reg_code = 1; /先消隐显示Font_code = Display_Bufferbit_con; /送字形码reg_code = S_Tabbit_con; /送字位delay_1ms();if(P1=0x7f)P1=0xfe;k=0;j=0;key_value=0;d: if(key_value=0x5e)P1=0xfe;for(k=0;kP1P1|=0x01;for(j=0;jP2=0xff;P0=0xc6;/显示C符号P2=0xbf;delay(3

37、00);P2=0xff;P0= Shiwei_Temp;P2=0xdf;delay(300);P2=0xff;P0= Gewei_Temp;P2=0xef;delay(300);Gewei_Temp=tabtemp/10; /十位温度Shiwei_Temp=tabtemp%10; /个位温度if(flag_get=1) /定时读取当前温度temp=ReadTemperature();flag_get=0;if(key_flg) /解码生效,把遥控码值转移到显示区,数据码两位显示key_flg = 0;Display_Buffer0 = Show_Tab(key_value & 0xf0) 4;

38、Display_Buffer1 = Show_Tabkey_value & 0x0f;if(key_value=0x16)goto a;if(key_value=0x0c)goto b;if(key_value=0x18)goto c;bit_con+;if(bit_con 1) bit_con = 0;reg_code = 1; /先消隐显示Font_code = Display_Bufferbit_con; /送字形码reg_code = S_Tabbit_con; /送字位delay_1ms();if(P1=0x7f)P1=0xfe;k=0;j=0;key_value=0;if(key_

39、flg) /解码生效,把遥控码值转移到显示区,数据码两位显示key_flg = 0;Display_Buffer0 = Show_Tab(key_value & 0xf0) 4;Display_Buffer1 = Show_Tabkey_value & 0x0f;bit_con+;if(bit_con 1) bit_con = 0;reg_code = 1; /先消隐显示Font_code = Display_Bufferbit_con; /送字形码reg_code = S_Tabbit_con; /送字位delay_1ms();void tim(void) interrupt 3 using

40、 2/中断,用于数码管扫描和温度检测间隔TH1=0xef;/定时器重装值TL1=0xf0;num+;if (num=50)num=0;flag_get=1;/标志位有效second+;if(second=60)second=0;minute+;/* */void delay(unsigned int i)/延时函数while(i-);/* */18b20初始化函数void Init_DS18B20(void)unsigned char x=0;DQ = 1; /DQ复位delay(8); /稍做延时DQ = 0; /单片机将DQ拉低delay(80); /精确延时大于480usDQ = 1;

41、/拉高总线delay(10);x=DQ; /稍做延时后如果x=0则初始化成功x=1则初始化失败delay(5);/读一个字节unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;delay(5);return(dat);/写一个字节void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ

42、 = 0;DQ = dat&0x01;delay(5);DQ = 1;dat=1;delay(5);/读取温度unsigned char ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;/float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay(200);Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar();b=ReadOneChar();b4;t=b;/tt=t*0.0625;/t= tt*10+0.5; /放大10倍输出并四舍五入return(t);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1