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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5454|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

1602顯示溫度程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:125275 發(fā)表于 2016-9-1 14:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

DS18B20溫度采集,可以讓液晶1602顯示出
程序100%可以運行 哈哈

//DS18B20溫度采集,LCD1602顯示
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar table[]={"  temp:"};
uchar table1[]={"www.E3_china.cn"};
/********IO引腳定義**********/
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
sbit dq=P3^2;
sbit beep=P1^5;
uchar num;
uint tempwarn,d=0,h=0;

void delay(uint n)                //延時程序
{
        while(n>0)n--;
}

void write_com(uchar com)  //液晶寫命令程序
{
        rs=0;                        //等0輸入命令
        en=0;                        //液晶使能信號初始化
        P0=com;                        //把com參數(shù),液晶的命令值送到P0口
        delay(100);                //延時,按照液晶的時序圖的要求
        en=1;                        //使能信號,0到1表示上升沿打開可以寫命令數(shù)據(jù)到液晶里
        delay(100);
        en=0;                        //使能信號回復(fù)
}
void write_data(uchar date)           //液晶寫數(shù)據(jù)程序
{
        rs=1;                  //等1表示輸入數(shù)據(jù)
        en=0;
        P0=date;          //把date參數(shù),液晶的數(shù)據(jù)送到P0口
        delay(100);
        en=1;
        delay(100);
        en=0;
}
void init()        //液晶初始化程序
{
        en=0;
        write_com(0x38);        //設(shè)置16X2顯示,5X7點陣,8位數(shù)據(jù)口
        write_com(0x0c);        //設(shè)置開顯示,不顯示光標(biāo)
        write_com(0x06);        //寫一個字符后地址指針加1
        write_com(0x01);        //顯示清0,數(shù)據(jù)指針清0
}
void  Writebyte(uchar dat)//DS18B20溫度芯片的寫字節(jié)程序
{
        uchar j;
        for(j=0;j<8;j++)
        {
                dq=0;
                dq=dat&0x01;
                delay(5);
                dq=1;
                dat>>=1;
        }
}
uchar Readbyte(void)//DS18B20溫度芯片讀字節(jié)程序
{
        uchar i,dat=0;
        for(i=0;i<8;i++)
        {
                dq=0;
                dat>>=1;
                dq=1;
                if(dq==1)
                dat|=0x80;
                delay(4);
        }       
        return dat;
}
void initds18b20(void)//溫度芯片初始化程序
{
        uchar x=0;
        dq=1;
        delay(8);
        dq=0;
        delay(80);
        dq=1;
        delay(14);
        x=dq;
        delay(20);
}
void Readtemp(void)//讀溫度程序
{
        initds18b20();
        Writebyte(0xcc);
        Writebyte(0x44);

        initds18b20();
        Writebyte(0xcc);
        Writebyte(0xbe);
        d=Readbyte();        //溫度信號的低8位數(shù)據(jù)函數(shù)
        h=Readbyte();        //溫度信號的高8位數(shù)據(jù)函數(shù)
}
convert() //溫度信號處理程序,把溫度信號數(shù)據(jù)值轉(zhuǎn)換為液晶顯示
{
        uint temp,tmp;
        float tt;
        tmp=d;         //低8位數(shù)據(jù)給tmp
        temp=h;         //高8位數(shù)據(jù)給temp
        temp<<=8;  //高8位左移8位
        temp|=d;   //高低8位數(shù)據(jù)或起來再賦給temp
        if((h&0x80)!=0)         //高8位h&10000000是否等0,不等0表示負(fù)多少度
        {
                table[7]='-';        //把-賦給液晶數(shù)組的第8個元素,表示-號在第8位,1602一行有16個字符
                temp=temp-1;
                temp=~temp;
        }
        else
                table[7]='+';
                temp>>=4;
                table[8]=(temp/100)+'0';        //液晶第9位字符為溫度的百位數(shù),例如120度的1
                table[9]=(temp/10)%10+'0';        //液晶第10位字符為溫度的十位數(shù),例如120度的2
                table[10]=(temp%10)+'0';        //液晶第9位字符為溫度的個位數(shù),例如120度的0
                tmp=tmp&0x0f;  //低位溫度提取小數(shù)數(shù)據(jù)
                tt=tmp*0.0625; //小數(shù)部分?jǐn)?shù)據(jù)轉(zhuǎn)換
                table[11]='.'; //顯示小數(shù)點
                table[12]=((uchar)(tt*10))%10+'0';//小數(shù)點后面的小數(shù)數(shù)字
                tempwarn=temp;               
        return tempwarn;//溫度值返回
}
void warn(uint tempwarn)//溫度報警程序
{
        if(tempwarn<=16) //返回的值是溫度的值,如果溫度小于20度就報警并且啟動風(fēng)冷設(shè)備
        {
                beep=0;
                delay(5000);//蜂鳴器的聲音響的時間
                beep=1;
                delay(50000); //蜂鳴器的聲音不響的時間
        }
        else if(tempwarn>=25)//如果溫度大于25度并且啟動報警
        {
                beep=0;
                delay(5000);
                beep=1;
                delay(50000);
        }
}
void main()
{       
        rw=0;                  //rw直接置0,應(yīng)該在液晶初始化前,否則斷電后再通電就不能顯示,切記!!!
        init();         //液晶初始化函數(shù)       
        write_com(0x80+0x40); //0x80+0x40表示液晶的第二行開始顯示
        for(num=0;num<15;num++)        //num<16,16表示顯示16位
        {
                write_data(table1[num]);//液晶顯示需要的內(nèi)容,調(diào)用寫液晶數(shù)據(jù)函數(shù),這行顯示拼音dengtianming       
        }
        while(1)        //大循環(huán),不斷檢測和更新溫度
        {
                 Readtemp();
                 convert();
                 warn(tempwarn);
                 write_com(0x80);  //液晶的第一行開始地址
                 for(num=0;num<15;num++)//顯示16位數(shù)據(jù),后面的幾位沒有用到就寫不到16,以免后面的幾位會出現(xiàn)一個隨機(jī)數(shù)據(jù)顯示亂碼
                 {
                        write_data(table[num]);//液晶需要顯示的內(nèi)容
                 }
        }
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:264029 發(fā)表于 2017-12-19 23:30 | 只看該作者
學(xué)習(xí)了。
回復(fù)

使用道具 舉報

板凳
ID:260785 發(fā)表于 2017-12-25 10:49 | 只看該作者
謝謝,你說的很易學(xué)懂!
回復(fù)

使用道具 舉報

地板
ID:981034 發(fā)表于 2021-11-26 16:01 | 只看該作者

謝謝,你說的很易學(xué)懂!學(xué)習(xí)了。
回復(fù)

使用道具 舉報

5#
ID:896483 發(fā)表于 2021-11-26 17:47 | 只看該作者
真心寫的不錯
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 超碰97在线免费 | 亚洲国产精品久久久久婷婷老年 | 国产1区| 亚洲精精品 | 一区二区三区四区在线视频 | 久久精品亚洲 | 在线观看国产 | 欧美在线激情 | 色综合色综合色综合 | av网站免费 | 91视频在线观看 | 亚洲九九色 | 拍戏被cao翻了h承欢 | 九九亚洲| 成人做爰www免费看 午夜精品久久久久久久久久久久 | 中文字幕乱码一区二区三区 | 美女久久久久久久 | 成年人网站免费 | 久久91精品国产一区二区 | 国产精品久久一区二区三区 | 日本中文字幕视频 | 久久综合久久久 | 在线免费看黄 | www日本高清视频 | 日本欧美国产 | 一区二区三区网站 | a级在线免费观看 | 久久天堂| 91精品国产综合久久久久久丝袜 | 国产一级精品毛片 | 国产精品国产a级 | 日韩国产精品一区二区三区 | 天天干天天操天天射 | 日韩在线观看视频一区 | 日韩在线观看视频一区 | 日韩视频一区在线观看 | 91视频久久 | 亚洲成人福利 | 欧美视频成人 | 一区二区三区四区在线 | 久草青青 |