图 4-1-3 DS18B20程序流程
所以在软件设计方面,我们主要是读取温度函数和温度显示函数的编写。 1、
读取温度函数
图4-1-4 读温度子程序流程图
图4-1-5 温度转换子程序流程图
void Read_Temperature() {
if(Init_DS18B20()==1) //DS18B20故障 }
DS18B20_IS_OK=0;
else { }
WriteOneByte(0xcc);
//跳过读取DS18B20的系列号
WriteOneByte(0x44); //启动温度转换 Init_DS18B20(); WriteOneByte(0xcc);
//跳过读取DS18B20的系列号
WriteOneByte(0xbe); // 读取温度寄存器 Temp_Value[0] = ReadOneByte(); //温度低8位 Temp_Value[1] = ReadOneByte(); // 温度高8位 DS18B20_IS_OK=1;
上述代码中,未读取DS18B20的系列号。 2、
温度显示函数
void Display_Temperature() {
uchar i;
//延时值和负数标志 uchar t = 150, ng = 0;
//高5位全为1(0XF8)则为负数,为负数时取反加1,并设置负数标识 if((Temp_Value[1]&0xf8)==0xf8) {
Temp_Value[1] = ~Temp_Value[1]; }
//查表得到温度小数部分
Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];
//获取温度整数部分(高字节中的低3位和低字节中高4位,无符号) CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4); //将整数部分分解为3位待显示的显示数字
Temp_Value[0] = ~Temp_Value[0]+1; if(Temp_Value[0]==0x00)
Temp_Value[1]++; //负数标识置1
ng = 1;
Display_Digit[3] = CurrentT/100; Display_Digit[2] = CurrentT0/10; Display_Digit[1] = CurrentT; //刷新LCD显示缓冲
Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0'; Current_Temp_Display_Buffer[10] = '.';
Current_Temp_Display_Buffer[9] = Display_Digit[1] + '0'; Current_Temp_Display_Buffer[8] = Display_Digit[2] + '0'; Current_Temp_Display_Buffer[7] = Display_Digit[3] + '0'; //高位为零时不显示 if(Display_Digit[3] == 0)
Current_Temp_Display_Buffer[7] = ' ';
if(Display_Digit[2] == 0&&Display_Digit[3]==0)
Current_Temp_Display_Buffer[8] = ' '; //负数符号显示在恰当的位置
if(ng) {
if(Current_Temp_Display_Buffer[8] == ' ')
Current_Temp_Display_Buffer[8] = '-';
else if(Current_Temp_Display_Buffer[7] == ' ')
Current_Temp_Display_Buffer[7] = '-';
else
相关推荐: