基于单片机的数字温度计c程序

上传人:kms****20 文档编号:41018086 上传时间:2018-05-28 格式:DOC 页数:9 大小:38.50KB
返回 下载 相关 举报
基于单片机的数字温度计c程序_第1页
第1页 / 共9页
基于单片机的数字温度计c程序_第2页
第2页 / 共9页
基于单片机的数字温度计c程序_第3页
第3页 / 共9页
基于单片机的数字温度计c程序_第4页
第4页 / 共9页
基于单片机的数字温度计c程序_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《基于单片机的数字温度计c程序》由会员分享,可在线阅读,更多相关《基于单片机的数字温度计c程序(9页珍藏版)》请在金锄头文库上搜索。

1、基于单片机的数字温度计基于单片机的数字温度计 C C 程序程序#include #include #define uchar unsigned char#define uint unsigned int#define delayNOP() _nop_();_nop_();_nop_();_nop_();sbit DQ=P22;sbit dula=P26; /定义锁存器锁存端sbit wela=P27;sbit rs=P35; /定义 1602 液晶 RS 端sbit lcden=P34;/定义 1602 液晶 LCDEN 端sbit s1=P30; /定义按键-功能键sbit s2=P31;/

2、定义按键-增加键sbit s3=P32;/定义按键-减小键sbit s4=P36;/闹钟查看键sbit rd=P37;sbit beep=P23; /定义蜂鸣器端uchar code Temp_Disp_Title=“ Current Temp : “;uchar Current_Temp_Display_Buffer=“ TEMP: “;uchar code Alarm_Temp=“ALARM TEMP Hi Lo“;uchar Alarm_HI_LO_STR=“Hi: Lo: “;uchar temp_data2=0x00,0x00;uchar temp_alarm2=0x00,0x00;

3、uchar display5=0x00,0x00,0x00,0x00,0x00;uchar display13=0x00,0x00,0x00;uchar code df_Table=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar CurrentT=0;/当前读取的温度整数部分uchar Temp_Value=0x00,0x00;/从 DS18B20 读取的温度值uchar Display_Digit=0,0,0,0; /待显示的各温度数位bit DS18B20_IS_OK=1;/传感器正常标志/-/延时 1/-void delay1(uint x)uchar i;w

4、hile(x-) for(i=0;i=1;_nop_(); /等待一个机器周期DQ=1; /将数据线“人为“拉高,为单片机检测 DS18B20 的输出电平作准备_nop_();_nop_(); /延时约 6us,使主机在 15us 内采样if (DQ) dat|=0x80; /如果读到的数据是 1,则将 1 存入 dat,如果是 0 则保持原值不变Delay(30); /延时 3us,两个读时序之间必须有大于 1us的恢复期DQ=1; / 将数据线拉高,为读下一位数据做准备 return dat; /-/函数功能:写一字节/入口参数:dat-待写入的数据/-void WriteOneByte(

5、uchar dat)uchar i;for (i=0;i=1; /将 dat 中的各二进制位数据右移 1 位 /-/函数功能:读取温度值/出入口参数:无/-void Read_Temperature()if(Init_DS18B20() = 1) /DS18B20 故障DS18B20_IS_OK=0;else WriteOneByte(0xCC); / 跳过读序号列号的操作WriteOneByte(0x44); / 启动温度转换 Init_DS18B20(); /将 DS18B20 初始化WriteOneByte(0xCC); /跳过读序号列号的操作WriteOneByte(0xBE); /读

6、取温度寄存器,前两个分别是温度的低位和高位Temp_Value0=ReadOneByte(); /温度低 8 位Temp_Value1=ReadOneByte(); /温度高 8 位DS18B20_IS_OK=1;/-/函数功能:在 LCD 上显示当前温度/入口参数:/-void Display_Temperature()uchar i;/延时值与负数标识uchar t=150,ng=0;/高 5 位全为 1(0xF8)则为负数,为负数时取反加 1,并设置负数标示if (Temp_Value1 Temp_Value0=Temp_Value0+1;if(Temp_Value0=0x00) Tem

7、p_Value1+; /加 1 后如果低字节为 00 表示有进位,进位位再加到高字节上ng=1; /负数标示置 1Display_Digit0=df_TableTemp_Value0 /查表得到温度小数部分/获取温度整数部分(高字节的低 3 位与低字节中的高 4 位,无符号)CurrentT=(Temp_Value0 /将整数部分分解为 3 位待显示数字Display_Digit3=CurrentT/100;/百位 digitCurrentT/100;Display_Digit2=CurrentT%100/10;/十位Display_Digit1=CurrentT%10;/个位/刷新 LCD

8、显示缓冲Current_Temp_Display_Buffer11=Display_Digit0+0;/先将0转换成整数 48,然后与前面数字相加,得到相应数字的ASCII 字符Current_Temp_Display_Buffer10=.;Current_Temp_Display_Buffer9=Display_Digit1+0; /个位Current_Temp_Display_Buffer8=Display_Digit2+0; /十位Current_Temp_Display_Buffer7=Display_Digit3+0; /百位/高位为 0 时不显示if(Display_Digit3=

9、0) Current_Temp_Display_Buffer7= ;/高位为 0 且次高位为 0 时,次高位不显示if(Display_Digit2=0 /负数符号显示在恰当位置if(ng)if (Current_Temp_Display_Buffer8= )Current_Temp_Display_Buffer8=-;else if(Current_Temp_Display_Buffer7= )Current_Temp_Display_Buffer7=-;else Current_Temp_Display_Buffer6=-;/在第一行显示标题Set_Disp_Pos(0x00);for(i

10、=0;i16;i+)Write_LCD_Data(Temp_Disp_Titlei);Set_Disp_Pos(0x40); /在第二行显示当前温度for(i=0;i16;i+)Write_LCD_Data(Current_Temp_Display_Bufferi);/显示温度符号/ Set_Disp_Pos(0x4D);Write_LCD_Data(0x00);Set_Disp_Pos(0x4D);Write_LCD_Data(0xdf);Set_Disp_Pos(0x4E);Write_LCD_Data(C);/-/函数功能:主函数/入口参数:/- void main()Initialize_LCD();Read_Temperature();Delay(50000);Delay(50000);while (1)Read_Temperature();if (DS18B20_IS_OK) Display_Temperature();delay1(100);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号