LCD电子时钟的设计_第1页
LCD电子时钟的设计_第2页
LCD电子时钟的设计_第3页
LCD电子时钟的设计_第4页
LCD电子时钟的设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、东 北 石 油 大 学 课 程 设 计 课 程 单片机课程设计 题 目 单片机控制的 LCD 时钟设计 院 系 电气信息工程学院测控系 专业班级 学生姓名 学生学号 指导教师 2011 年 4 月 6 日 东北石油大学课程设计任务书 课程 单片机课程设计 题目 单片机控制的 LCD 时钟设计 专业 姓名 学号 一、任务一、任务 设计一款基于 STC89C52RC 单片机的 LCD 数字时钟,实现显示当前时间以及具 有调整日期与时间的功能。 二、设计要求二、设计要求 1 使用集成数字电路或单片机作为主控制芯片。 2 使用 LCD 来显示现在的时间,显示格式为: 上行显示:年-月-日; 下行显示:

2、时时:分分:秒秒。 3 使用时钟芯片 DS1302 实现时钟定时。 4 具有调整日期与时间的功能。 5 写出详细的设计报告。 6 给出全部电路和源程序。 三、参考资料三、参考资料 1 求是科技. 单片机典型模块设计实例导航. 北京:人民邮电出版社. 2005.8 2 徐淑华, 程退安等.单片微型机原理及应用. 哈尔滨:哈尔滨工业大学出版社. 2005.1 3 孙余凯. 精选实用电子电路 260 例. 北京:电子工业出版社. 2007.6 4 殷春浩, 崔亦飞. 电磁测量原理及应用. 徐州:中国矿业大学出版社. 2003.7 5 LCD1602A 数据手册 6 DS1302 数据手册 完成期限

3、2011.3.28 至 2011.4.8 指导教师 专业负责人 2011 年 3 月 28 日 目 录 第 1 章 绪 论 3 1.1 STC89C52RC 单片机概 述 3 1.2 LCD 概 述 3 1.3 DL1302 简 介 4 1.4 本设计任 务 4 第 2 章 总体方案论证与设 计 5 2.1 显示部 分 5 2.2 数字时 钟 5 2.3 温度采 集 6 2.4 总体硬件组成框 图 6 第 3 章 系统硬件设 计 7 3.1 STC89C52RC 单片机最小系 统 7 3.2 温度测量模 块 7 3.3 时钟模 块 8 3.4 LCD 液晶显示模 块 8 3.5 键盘模 块 9

4、 3.6 整体电 路 9 第 4 章 系统的软件设 计 11 4.1 主程序设 计 11 4.2 时间设定程序流 程 11 4.3 温度测量流程 图 12 第 5 章 系统调试与测试结果分 析 14 5.1 使用的仪器仪 表 14 5.2 系统调 试 14 5.3 测试结 果 14 结 论 15 参考文 献 16 附录 1 程 序 17 附录 2 仿真效果 图 27 第 1 章 绪论 在新的世纪我们已经步入了第二个十年,随着全球经济的复苏和发展,由于在世 界范围内人类需求的巨大释放,以及消费结构的升级,同时传统能源的稀缺以及带来 的环境的破坏,都将带来新一轮的科技革命的巨变。因此,更适合人类社

5、会协调、健 康、可持续发展的新能源、新材料等便应运而生。LCD 作为一种新的材料,LCD 的设计 制造技术与应用水平上都得到了迅速的提高,生产也得到了迅速的发展,并逐步形成 产业,成为光电子行业的新兴产业领域。 然而随着人们生活节奏的加快,时间对人们的重要性也越来越重要,因此,拥有 一个不错的时钟对人们的生活将带来很大的方便。时钟,自从它发明的那天起,就成 为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要 求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕 发青春呢?这就要求人们不断设计出新型时钟。 1.1STC89C52RC 单片机概述 ST

6、C89C52RC 单片机采用高性能的静态 80C51 设计,并采用先进工艺制造,还带有 非易失去性 FLASH 程序储器。它是一种高性能、低功耗的 8 位 CMOS 微处理芯片,市场 上应用最多。其主要性能如下: 8KB Flash ROM,可以擦除 1000 次以上,数据保存 10 年。 256 字节内部 RAM。 电源控制模式: -时钟可停止和恢复; -空闲模式; -掉电模式。 6 个中断源。 4 个中断优先级。 4 个 8 位 I/O 口。 全双工增强型 UART。 3 个 16 位定时器/计数器:T0、T1、T2。 全静态工作方式:0-24MHz 1.2 LCD 概述 LCD 液晶显示

7、器是 Liquid Crystal Display 的简称,LCD 的构造是在两片平行 的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电 与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。LCD 可以分为为两种 类型,一种是文字模式 LCD,一种是绘图模式 LCD。 LCD1602 属于字符型液晶,能够同时显示 16x2 即 32 个字符。可以与 8 位 CPU 相 联,指令功能强可以组合成各种输入、显示、移位方式以满足不同要求。显示黄绿带 背光,显示对比度可以调节,正常工作电压(VDD)为+5V,工作电流约为 2mA(不计背 光功耗),同时可靠性高寿命达 50

8、,000 小时(25) 。 1.3 DS1302 简介 DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时时钟芯片, 它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压 宽达 2.55.5V。时钟可工作在 24 小时格式或 12 小时(AM/PM)格式。 DS1302 与单 片机的接口使用同步串行通信,仅用 3 条线与之相连接。可采用一次传送一个字节或 突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有一个 318 的用于 临时性存放数据的 RAM 寄存器。DS1302 是 DS1202 的升级产品,与 DS120

9、2 兼容,但增 加了主电源后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 1.4本设计任务 本系统以单片机芯片为核心部件,利用合理的程序控制,在液晶显示屏上实现各 个功能并且显示等功能,使其显示直观、功能多样、电路简洁等诸多优点,符合电子 仪器仪表的发展趋势,具有广阔的市场前景。 第 2 章 总体方案论证与设计 本设计采用 STC89C52RC 单片机作为本系统的控制模块。单片机可把由 DS18B20、DS1302、AT24C02 中的数据利用软件来进行处理,从而把数据传输到显示模 块,实现温度、日历和闹铃的显示。以 LCD 液晶显示器为显示模块,把单片机传来的 数据显示出来

10、,并且显示多样化。在显示电路中,主要靠按键来实现各种显示要求的 选择与切换。下面对各模块的设计逐一进行论证比较。 2.1 显示部分 显示部分是本次设计的重要部分,一般有以下两种方案: 方案一:采用 LED 显示,分静态显示和动态显示。对于静态显示方式,所需的译 码驱动装置很多,引线多而复杂,且可靠性也较低。而对于动态显示方式,虽可以避 免静态显示的问题,但设计上如果处理不当,易造成亮度低,有闪烁等问题。 方案二:采用 LCD 显示。LCD 液晶显示具有丰富多样性、灵活性、电路简单、易 于控制而且功耗小等优点,对于信息量多的系统,是比较适合的。 鉴于上述原因,我们采用方案二。 2.2 数字时钟

11、数字时钟是本设计的核心的部分。根据需要可采用以下两种方案实现: 方案一:方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字 节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现 1 秒定时中断,每产 生一次中断,存储器内相应的秒值加 1;若秒值达到 60,则将其清零,并将相应的分 字节值加 1;若分值达到 60,则清零分字节,并将时字节值加 1;若时值达到 24,则 将时字节清零。该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。 而且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。 方案二:方案采用 Dallas 公司的专用时钟芯片 DS1302。该

12、芯片内部采用石英晶 体振荡器,其芯片精度不大于 10ms/年,且具有完备的时钟闹钟功能,因此,可直接 对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然 掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电 时,可使系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时, 锂电池也能保证芯片的正常运行,以备随时提供正确的时间。 基于时钟芯片的上述优点,本设计采用方案二完成数字时钟的功能。 2.3 温度采集 由于现在用品追求多样化,多功能化,给系统加上温度测量显示模块,能够方便 人们的生活,使该设计具有人性化。 方案一:采用热敏电阻,可满

13、足 40 摄氏度至 90 摄氏度测量范围,但热敏电阻精度重 复性、可靠性较差,对于检测小于 1 摄氏度的信号是不适用的。 方案二:采用温度传感器 DS18B20。DS18B20 可以满足从-55 摄氏度到+125 摄氏度测量 范围,且 DS18B20 测量精度高,增值量为 0.5 摄氏度,在一秒内把温度转化成数字, 测得的温度值的存储在两个八位的 RAM 中,单片机直接从中读出数据转换成十进制就 是温度,使用方便。 基于 DS18B20 的以上优点,我们决定选取 DS18B20 来测量温度。 2.4总体硬件组成框图 图 2-1 总体硬件组成框图 第 3 章 系统硬件设计 3.1 STC89C5

14、2RC 单片机最小系统 最小系统包括晶体振荡电路、复位开关和电源部分。图 3-1 为 STC89C52RC 单片机 的最小系统。 图 3-1 最小系统电路 3.2 温度测量模块 温度测量传感器采用 DALLAS 公司 DS18B20 的单总线数字化温度传感器,测温范围 为-55125,可编程为 9 位12 位 A/D 转换精度,测温分辨率达到 0.0625,采用 寄生电源工作方式,CPU 只需一根口线便能与 DS18B20 通信,占用 CPU 口线少,可节 省大量引线和逻辑电路。接口电路如图 3-2 所示。 图 3-2 DS18B20 测量电路 3.3 时钟模块 时钟模块采用 DS1302 芯

15、片,DS1302 是 DALLAS 公司推出的涓流充电时钟芯片内含 有一个实时时钟/日历和 31 字节静态 RAM 通过简单的串行接口与单片机进行通信实时 时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟 操作可通过 AM/PM 指示决定采用 24 或 12 小时格式 DS1302 与单片机之间能简单地采用 同步串行的方式进行通信仅需用到三个口线: RST 复位、I/O 数据线、SCLK 串行时钟。时钟/RAM 的读/写数据以一个字节或多达 31 个字节的字符组方式通信。DS1302 工作时功耗很低,保持数据和时钟信息时功率小 于 1mW,其接线电路如图 3-3。

16、图 3-3 时钟电路 3.4 LCD 液晶显示模块 LCD 液晶显示模块采用 LCD1602 型号,具有很低的功耗,正常工作时电流仅 2.0mA/5.0V。通过编程实现自动关闭屏幕能够更有效的降低功耗。LCD1602 分两行显 示,每行可显示多达 16 个字符。LCD1602 液晶模块内部的字符发生存储器(CGROM) 已经存储了 160 个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制, 并且还能利用空余的空间自定义字符。其接线如图 3-4。 图 3-4 LCD 显示电路 3.5 键盘模块 它是整个系统中最简单的部分,根据功能要求,本系统共需四个按键:功能移位 键、功能加键、功能减

17、键、立刻跳出调整模式键采用独立式按键。 3.6 整体电路 系统整体电路如图 3-5 所示: 图 3-5 系统总体电路图 第 4 章 系统的软件设计 4.1 主程序设计 主流程图说明:程序开始运行时先初始化时钟控制器件 DS1302、温度采集器件 18B20 和显示器件 LCD1302,然后打开 LCD1602,再读取温度、时间,把读取的数据送 入 LCD1602 进行显示,期间可以对温度和时间进行调整。其主程序流程如图 4-1 所示。 图 4-1 主程序流程图 4.2 时间设定程序流程 时间设定流程图说明:程序开始后初始化 DS1302,然后从 DS1302 中读出数据, 放入 RAM 中,然

18、后调用显示子程序,使 LCD1602 相应的模块显示温度,其间也可对温 度进行设置,设置完成后把数据重新送入 RAM 中,再由 LCD1602 相应模块显示,整个 过程由此反复进行。 图 4-2 显示时间子程序流程 4.3 温度测量流程图 温度测量流程图说明:程序开始后先对 DS18B20 进行初始化,然后从 DS18B20 中 读出数据放入 RAM 中,再调用子程序使 LCD1602 的相应模块进行显示。 图 4-3 温度测量程序流程图 第 5 章 系统调试与测试结果分析 5.1 使用的仪器仪表 数字万用表、秒表、电源、温度表 5.2 系统调试 根据系统设计方案,本系统的调试共分为三大部分:

19、硬件调试,软件调试和软硬 件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测 试:温度测量模块的调试,时钟模块的调试,LCD 液晶显示模块的调试等,最后将各 模块组合后进行整体测试。 5.2.1 硬件调试 对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。 5.2.2 软件调试 软件调试采用单片机仿真器 WAVE6000L 及微机,将编好的程序进行调试,主要是 检查语法错误。 5.2.3 硬件软件联调 将调试好的硬件和软件进行联调,主要调试系统的实现功能。 5.3 测试结果 此次系统设计结果较好,能动态显示实时时钟的时、分、秒,数据显示,能够实 现时钟的定时,

20、并且具有调整日期与时间的功能。 结 论 目前,市面上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但 鉴于数字钟电路的基本组成包含了数字电路的主要组成部分,因此进行数字钟的设计 是必要的,研究数字钟以及扩大其应用,有着非常现实的意义。 单片机控制的 LCD 时钟,它具有编程灵活,便于电子钟功能的扩充,精度高等特 点,同时可以用该电子钟发出各种控制信号。本设计采用 STC89C52RC 单片机作为本系 统的控制模块。单片机可把由 DS18B20、DS1302、AT24C02 中的数据利用软件来进行处 理,从而把数据传输到显示模块,实现温度、日历和闹铃的显示。 参考文献 1 求是科技.

21、单片机典型模块设计实例导航. 北京:人民邮电出版社. 2005.8 2 徐淑华, 程退安等.单片微型机原理及应用. 哈尔滨:哈尔滨工业大学出版社. 2005.1 3 孙余凯. 精选实用电子电路 260 例. 北京:电子工业出版社. 2007.6 4 殷春浩, 崔亦飞. 电磁测量原理及应用. 徐州:中国矿业大学出版社. 2003.7 5LCD1602A 数据手册 6DS1302 数据手册 7DS18B20 数据手册 附录 1 程序 #include #include /#include LCD1602.h /#include DS1302.h #define uint unsigned int

22、#define uchar unsigned char sbit DS1302_CLK = P17; /实时时钟时钟线引脚 sbit DS1302_IO = P16; /实时时钟数据线引脚 sbit DS1302_RST = P15; /实时时钟复位线引脚 sbit wireless_1 = P30; sbit wireless_2 = P31; sbit wireless_3 = P32; sbit wireless_4 = P33; sbit ACC0 = ACC0; sbit ACC7 = ACC7; char hide_sec,hide_min,hide_hour,hide_day,h

23、ide_week,hide_month,hide_year; /秒,分,时 到日,月,年位闪的计数 sbit Set = P20; /模式切换键 sbit Up = P21; /加法按钮 sbit Down = P22; /减法按钮 sbit out = P23; /立刻跳出调整模式按钮 sbit DQ = P10; /温度传送数据 IO 口 char done,count,temp,flag,up_flag,down_flag; uchar temp_value; /温度值 uchar TempBuffer5,week_value2; void show_time(); /液晶显示程序 /*

24、液晶显示部分子程序*/ /Port Definitions sbit LcdRs= P25; sbit LcdRw= P26; sbit LcdEn = P27; sfr DBPort = 0 x80;/P0=0 x80,P1=0 x90,P2=0 xA0,P3=0 xB0.数据端口 /内部等待函数 * unsigned char LCD_Wait(void) LcdRs=0; LcdRw=1;_nop_(); LcdEn=1;_nop_(); LcdEn=0; return DBPort; /向 LCD 写入命令或数据 #define LCD_COMMAND0 / Command #defi

25、ne LCD_DATA1 / Data #define LCD_CLEAR_SCREEN 0 x01 / 清屏 #define LCD_HOMING 0 x02 / 光标返回原点 void LCD_Write(bit style, unsigned char input) LcdEn=0; LcdRs=style; LcdRw=0;_nop_(); DBPort=input;_nop_();/注意顺序 LcdEn=1;_nop_();/注意顺序 LcdEn=0;_nop_(); LCD_Wait(); /设置显示模式 #define LCD_SHOW0 x04 /显示开 #define LCD

26、_HIDE0 x00 /显示关 #define LCD_CURSOR0 x02 /显示光标 #define LCD_NO_CURSOR0 x00 /无光标 #define LCD_FLASH0 x01 /光标闪动 #define LCD_NO_FLASH0 x00 /光标不闪动 void LCD_SetDisplay(unsigned char DisplayMode) LCD_Write(LCD_COMMAND, 0 x08|DisplayMode); /设置输入模式 #define LCD_AC_UP0 x02 #define LCD_AC_DOWN0 x00 / default #def

27、ine LCD_MOVE0 x01 / 画面可平移 #define LCD_NO_MOVE0 x00 /default void LCD_SetInput(unsigned char InputMode) LCD_Write(LCD_COMMAND, 0 x04|InputMode); /初始化 LCD void LCD_Initial() LcdEn=0; LCD_Write(LCD_COMMAND,0 x38); /8 位数据端口,2 行显示,5*7 点 阵 LCD_Write(LCD_COMMAND,0 x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSO

28、R); /开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC 递增, 画面不动 /液晶字符输入的位置 void GotoXY(unsigned char x, unsigned char y) if(y=0) LCD_Write(LCD_COMMAND,0 x80|x); if(y=1) LCD_Write(LCD_COMMAND,0 x80|(x-0 x40); /将字符输出到液晶显示 void Print(unsigned char *str) whi

29、le(*str!=0) LCD_Write(LCD_DATA,*str); str+; /*DS1302 时钟部分子程序*/ typedef struct _SYSTEMTIME_ unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month; unsigned char Year; unsigned char DateString11; unsigned char TimeString9; SYSTEMTIME

30、;/定义的时间类型 SYSTEMTIME CurrentTime; #define AM(X) X #define PM(X)(X+12) / 转成 24 小时制 #define DS1302_SECOND0 x80 /时钟芯片的寄存器位置,存放时间 #define DS1302_MINUTE0 x82 #define DS1302_HOUR0 x84 #define DS1302_WEEK0 x8A #define DS1302_DAY0 x86 #define DS1302_MONTH0 x88 #define DS1302_YEAR0 x8C void DS1302InputByte(u

31、nsigned char d) /实时时钟写入一字节(内部函数) unsigned char i; ACC = d; for(i=8; i0; i-) DS1302_IO = ACC0; /相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相当于汇编中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1;

32、DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa) /ucAddr: DS1302 地址, ucData: 要写的数据 DS1302_RST = 0;/Write1302(0 x8e,0 x00); DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 写 1Byte 数据 DS1302_CLK = 1; DS1302_RST = 0; unsigne

33、d char Read1302(unsigned char ucAddr)/读取 DS1302 某地址的数据 unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0 x01); / 地址,命令 ucData = DS1302OutputByte(); / 读 1Byte 数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData); void DS1302_GetTime(SYSTEMTIME *Time) /获取时钟芯片的

34、时钟数据到自定义的 结构型数组 unsigned char ReadValue; ReadValue = Read1302(DS1302_SECOND); Time-Second = (ReadValue /高三位取出读出 乘 ReadValue = Read1302(DS1302_MINUTE); Time-Minute = (ReadValue ReadValue = Read1302(DS1302_HOUR); Time-Hour = (ReadValue ReadValue = Read1302(DS1302_DAY); Time-Day = (ReadValue ReadValue

35、= Read1302(DS1302_WEEK); Time-Week = (ReadValue ReadValue = Read1302(DS1302_MONTH); Time-Month = (ReadValue ReadValue = Read1302(DS1302_YEAR); Time-Year = (ReadValue void DateToStr(SYSTEMTIME *Time) /将时间年,月,日,星期数据转换成液晶显示字 符串,放到数组里 DateString if(hide_yearDateString0 = 2; Time-DateString1 = 0; Time-Da

36、teString2 = Time-Year/10 + 0; Time-DateString3 = Time-Year%10 + 0; else Time-DateString0 = ; Time-DateString1 = ; Time-DateString2 = ; Time-DateString3 = ; Time-DateString4 = /; if(hide_monthDateString5 = Time-Month/10 + 0; Time-DateString6 = Time-Month%10 + 0; else Time-DateString5 = ; Time-DateStr

37、ing6 = ; Time-DateString7 = /; if(hide_dayDateString8 = Time-Day/10 + 0; Time-DateString9 = Time-Day%10 + 0; else Time-DateString8 = ; Time-DateString9 = ; if(hide_weekWeek%10 + 0; /星期的数据另外放到 week_value数 组里,跟年,月,日的分开存放,因为等一下要在最后显示 else week_value0 = ; week_value1 = 0; Time-DateString10 = 0; /字符串末尾加

38、0 ,判断结束字符 void TimeToStr(SYSTEMTIME *Time) /将时,分,秒数据转换成液晶显示字符放到数组 TimeString; if(hide_hourTimeString0 = Time-Hour/10 + 0; Time-TimeString1 = Time-Hour%10 + 0; else Time-TimeString0 = ; Time-TimeString1 = ; Time-TimeString2 = :; if(hide_minTimeString3 = Time-Minute/10 + 0; Time-TimeString4 = Time-Min

39、ute%10 + 0; else Time-TimeString3 = ; Time-TimeString4 = ; Time-TimeString5 = :; if(hide_secTimeString6 = Time-Second/10 + 0; Time-TimeString7 = Time-Second%10 + 0; else Time-TimeString6 = ; Time-TimeString7 = ; Time-DateString8 = 0; void Initial_DS1302(void) /时钟芯片初始化 unsigned char Second=Read1302(D

40、S1302_SECOND); if(Second /写入允许 Write1302(0 x8c,0 x07); /以下写入初始化时间 日期:07/07/25.星期: 3. 时间: 23:59:55 Write1302(0 x88,0 x07); Write1302(0 x86,0 x25); Write1302(0 x8a,0 x07); Write1302(0 x84,0 x23); Write1302(0 x82,0 x59); Write1302(0 x80,0 x55); Write1302(0 x8e,0 x80); /禁止写入 /*ds18b20 子程序*/ /*ds18b20 延迟

41、子函数(晶振 12MHz )*/ void delay_18B20(unsigned int i) while(i-); /*ds18b20 初始化函数*/ void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ 复位 delay_18B20(8); /稍做延时 DQ = 0; /单片机将 DQ 拉低 delay_18B20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(14); x=DQ; /稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 delay_18B20(20); /*d

42、s18b20 读一个字节*/ unsigned char ReadOneChar(void) uchar i=0; uchar dat = 0; for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0 x80; delay_18B20(4); return(dat); /*ds18b20 写一个字节*/ void WriteOneChar(uchar dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat delay_18B20(5); DQ = 1; dat=1; /*读取 ds18b20 当前温度*/ void ReadTemp(void) unsigned char a=0; unsigned char b=0; unsigned char t=0; Init_DS18B20(); WriteOneChar(0 xCC); / 跳过读序号列号的操作 WriteOneChar(0 x44); / 启动温度转换 delay_18B20(100); / this message is wery important Init_DS18B20(); Wri

温馨提示

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

评论

0/150

提交评论