久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1434|回復: 1
收起左側

在此程序基礎上怎么修改,使得LCD在溫度低于30時,顯示小數點后兩位 高于時顯示一位

[復制鏈接]
ID:1038456 發表于 2022-7-5 17:47 | 顯示全部樓層 |閱讀模式
單片機源程序如下:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}

sbit DQ = P3^3;
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;

uchar code Temp_Disp_Title[]={"Current Temp : "};
uchar Current_Temp_Display_Buffer[]={" TEMP:   "};

uchar code Temperature_Char[8] =
{
         0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00
};

uchar code df_Table[]=
{
         0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
};

uint CurrentT = 0;
uchar Temp_Value[]={0x00,0x00};
uchar Display_Digit[]={0,0,0,0};
bit DS18B20_IS_OK = 1;

void DelayXus(uint x)
{
         uchar i;
        while(x--)
        {
                 for(i=0;i<200;i++);
        }
}

bit LCD_Busy_Check()
{
         bit result;
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_EN = 1;
        delayNOP();
        result = (bit)(P0&0x80);
        LCD_EN=0;
        return result;
}

void Write_LCD_Command(uchar cmd)
{
        while(LCD_Busy_Check());
        LCD_RS = 0;
        LCD_RW = 0;
        LCD_EN = 0;
        _nop_();
        _nop_();
        P0 = cmd;
        delayNOP();
        LCD_EN = 1;
        delayNOP();
        LCD_EN = 0;
}

void Write_LCD_Data(uchar dat)
{
        while(LCD_Busy_Check());
        LCD_RS = 1;
        LCD_RW = 0;
        LCD_EN = 0;
        P0 = dat;
        delayNOP();
        LCD_EN = 1;
        delayNOP();
        LCD_EN = 0;
}

void LCD_Initialise()
{
         Write_LCD_Command(0x01);
        DelayXus(5);
        Write_LCD_Command(0x38);
        DelayXus(5);
        Write_LCD_Command(0x0c);
        DelayXus(5);
        Write_LCD_Command(0x06);
        DelayXus(5);        
}

void Set_LCD_POS(uchar pos)
{
         Write_LCD_Command(pos|0x80);        
}

void Delay(uint x)
{
         while(--x);
}

uchar Init_DS18B20()
{
         uchar status;

        DQ = 0;
                Delay(90);
        DQ = 1;
                Delay(8);
        status = DQ;
        while(DQ==0);
        return status;
}

uchar ReadOneByte()
{
         uchar i,dat=0;

        for(i=0;i<8;i++)
        {
                 DQ = 0;
                        dat >>= 1;
                DQ = 1;
                        _nop_(); _nop_();
                if(DQ) dat |= 0X80;
                        Delay(5);
                while(DQ==0);
        }
        return dat;
}

void WriteOneByte(uchar dat)
{
         uchar i;
        for(i=0;i<8;i++)
        {
                 DQ = 0;
                        _nop_();
                DQ = dat& 0x01;
                        Delay(5);
                DQ = 1;
                        dat >>= 1;
        }
}

void Read_Temperature()
{
         if(Init_DS18B20()==1)
                DS18B20_IS_OK=0;
        else
        {
                WriteOneByte(0xcc);
                WriteOneByte(0x44);
                Init_DS18B20();
                WriteOneByte(0xcc);
                WriteOneByte(0xbe);
                Temp_Value[0] = ReadOneByte();
                Temp_Value[1] = ReadOneByte();
                DS18B20_IS_OK=1;        
        }        
}

void Display_Temperature()
{
         uchar i;
        uchar t = 150, ng = 0;
        if((Temp_Value[1]&0xf8)==0xf8)
        {
                 Temp_Value[1] = ~Temp_Value[1];
                Temp_Value[0] = ~Temp_Value[0]+1;
                if(Temp_Value[0]==0x00)
                        Temp_Value[1]++;
                ng = 1;        
        }
        Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];
        CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);
        Display_Digit[3] = CurrentT/100;
        Display_Digit[2] = CurrentT%100/10;
        Display_Digit[1] = CurrentT%10;
        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
                        Current_Temp_Display_Buffer[6]  = '-';
        }
        Set_LCD_POS(0x00);
        for(i=0;i<16;i++)
        {
                Write_LCD_Data(Temp_Disp_Title[ i]);         
        }
        Set_LCD_POS(0x40);
        for(i=0;i<16;i++)
        {
                Write_LCD_Data(Current_Temp_Display_Buffer[ i]);         
        }               
        Set_LCD_POS(0x4d);
        Write_LCD_Data(0x00);
        Set_LCD_POS(0x4e);
        Write_LCD_Data('C');
}

void main()
{
         LCD_Initialise();
        Read_Temperature();
        Delay(50000);
        Delay(50000);
        while(1)
        {
                 Read_Temperature();
                if(DS18B20_IS_OK)
                        Display_Temperature();
                DelayXus(100);               
        }

}
6LWQN~}S1SIHSEWZ{1Y3IYN.png
回復

使用道具 舉報

ID:94031 發表于 2022-7-6 16:07 | 顯示全部樓層
看了你的程序,讀出的溫度就是整數,小數點及后面的0是顯示時加上去的,沒必要研究顯示兩個0還是一個0.
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看av网站永久 | 亚洲精品一区二区三区在线 | 三区在线| 超碰97av | 亚洲欧美国产一区二区三区 | 亚洲精品久久久久久久久久久 | 午夜影院在线观看版 | 亚洲精品一二三 | 久久午夜精品福利一区二区 | 人人鲁人人莫人人爱精品 | 亚洲色图图片 | 日韩欧美三区 | 91精品国产一区二区三区蜜臀 | 精品久久久久久亚洲综合网站 | 日韩一区二区视频 | 草久久久 | 中文字幕视频在线免费 | 日韩精品免费在线观看 | 精品免费国产一区二区三区四区 | 亚洲精品日韩一区二区电影 | www中文字幕| 中文字幕人成乱码在线观看 | 96国产精品久久久久aⅴ四区 | 亚洲国产aⅴ精品 | 超碰综合 | 欧洲毛片 | 成人福利在线视频 | www日韩| 欧美一页| 九九九久久国产免费 | 久久精品中文 | 久久久久久久一区 | 国产美女自拍视频 | 毛片a区| 欧美午夜一区 | 欧美视频在线观看 | 亚洲高清视频一区二区 | 黄色大片免费网站 | 国产黑丝av | 日韩高清www | 日本午夜一区二区三区 |