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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2004|回復(fù): 2
收起左側(cè)

怎么樣將使用獨立鍵盤前三個按鍵去調(diào)整 ds18b20的TH,TL,并且使用LCD1602 去顯示...

[復(fù)制鏈接]
ID:742007 發(fā)表于 2020-4-30 21:42 | 顯示全部樓層 |閱讀模式
怎么樣用代   使用獨立鍵盤前三個按鍵去調(diào)整
ds18b20的TH,TL,并且使用LCD1602
去顯示每次按鍵的變化
以下代碼只實現(xiàn)了測出溫度
代碼:#include <reg52.H>#include <intrins.H>
#include <math.H>

#define uchar unsigned char
#define uint unsigned int
sbit dula = P2^6;
sbit wela = P2^7;
sbit rw = P3^6;
sbit RS = P3^5;  
sbit LCDEN = P3^4;

void delayUs()           //us級延時
{
    _nop_();  //匯編語句  空語句,用來產(chǎn)生短暫的延時效果,
                            //對于延時很短的,要求在us級的,采用“_nop_”函數(shù),對于12M晶振,延時1uS。
}

void delayMs(uint a)  //ms級延時
{
    uint i, j;
    for(i = a; i > 0; i--)
        for(j = 100; j > 0; j--);
}


void writeComm(uchar comm)         //寫LCD1602指令
{
     RS = 0;   
    P0 = comm;
    LCDEN = 1;
     delayUs();
    LCDEN = 0;
    delayMs(1);
}

//寫數(shù)據(jù):RS=1, RW=0;   可以選擇想要寫入的數(shù)據(jù)
void writeData(uchar dat)        //從 writeString()函數(shù)中逐一寫入數(shù)據(jù)
{
     RS = 1;
     P0 = dat;
     LCDEN = 1;           //讀取數(shù)據(jù)并寫入1602內(nèi)
    delayUs();
    LCDEN = 0;          //釋放總線
    delayMs(1);
}


void init()           //初始化函數(shù)
{
     rw = 0;
     dula = wela = 0;
    writeComm(0x38); //        顯示模式設(shè)置指令碼00111000           16*2顯示
   writeComm(0x0c);  //顯示開/關(guān)及光標設(shè)置          00001DCB  D=1 開顯示   C=1顯示光標  B=1光標閃爍
    writeComm(0x06); //顯示指針指向000001NS         N=1 當讀或?qū)懸粋字符后地址指針加一,且光標加一
    writeComm(0x01); //顯示清屏:1.數(shù)據(jù)指針清零,2.所有顯示清零
}

void writeString(uchar * str, uchar length)         //寫入字符串
{
     uchar i;
    for(i = 0; i < length; i++)
    {
         writeData(str[i]);
     }
}

/**//*****************************DS18B20*******************************/
sbit ds = P2^2;
void dsInit()        //單總線初始化時序
{

    unsigned int i;  
    ds = 0;
    i = 100;  
     while(i>0) i--;   //猜測是為了使傳感器復(fù)位,即拉低單總線480us以上
    ds = 1;                      //釋放總線
    i = 4;                          
     while(i>0) i--;   //拉低總線15-60us,即可讀取18B20的存在信號
}

void dsWait()
{
      unsigned int i;
      while(ds);  
      while(~ds);
      i = 4;
      while(i > 0) i--;
}


bit readBit() //采樣總線上的數(shù)據(jù)
{
    unsigned int i;
    bit b;
    ds = 0;
    i++;   
    ds = 1;
   i++; i++;  
    b = ds;
    i = 8;
    while(i>0) i--;
    return b;
}

unsigned char readByte() //讀時序  讀字節(jié)每次一位
{
    unsigned int i;
    unsigned char j, dat;
   dat = 0;
    for(i=0; i<8; i++)
    {
        j = readBit();

        dat = (j << 7) | (dat >> 1);//把字節(jié)每次移動一位,直到移動8次,數(shù)據(jù)寫入dat中
    }
    return dat;
}


void writeByte(unsigned char dat)  //寫時序
{
    unsigned int i;
    unsigned char j;
    bit b;
    for(j = 0; j < 8; j++)        //每次寫入一個字節(jié),寫入8次
    {
        b = dat & 0x01;
        dat >>= 1;

        if(b)   
        {
           ds = 0;          i++; i++;  
            ds = 1;   
            i = 8; while(i>0) i--;  
        }
        else  
        {
            ds = 0;
          i = 8; while(i>0) i--;  
            ds = 1;
           i++; i++;
        }
   }
}


void sendChangeCmd() //溫度轉(zhuǎn)換指令
{
    dsInit();   
    dsWait();   
    delayMs(1);   
    writeByte(0xcc);
    writeByte(0x44); //發(fā)送溫度轉(zhuǎn)換指令
/*        設(shè)置EEPROM中的TH  TL   及精度程序
        writeByte(0x4e); //發(fā)送寫暫存器指令
        writeByte(0x依據(jù)需要); //設(shè)置TH指令
        writeByte(0x依據(jù)需要); //設(shè)置TL指令
        writeByte(0x依據(jù)需要); //配置工作在哪一位的模式下  如0 R1 R2 1 1 1 1 1 R1=R2=0 為9位精度
        writeByte(0x48); //把高速暫存器的值拷貝到EEPROM中
        PS:每次使用時都需要初始化
        dsInit();   
    dsWait();
        writeByte(0xcc); //發(fā)送跳躍ROM指令        
        */
}

void sendReadCmd()
{
    dsInit();
    dsWait();
    delayMs(1);
    writeByte(0xcc); //發(fā)送跳躍ROM指令
    writeByte(0xbe); //讀取高速暫存器中的內(nèi)容
}


int getTmpValue()
{
    unsigned int tmpvalue;
    int value;
    float t;
    unsigned char low, high;
    sendReadCmd();

    low = readByte();  //讀取高速暫存器中的第一個字節(jié) ,即LSB
    high = readByte(); //讀取高速暫存器中的第2個字節(jié) ,即MSB

    tmpvalue = high;  //將高字節(jié)的溫度數(shù)據(jù)換算成十進制
    tmpvalue <<= 8;
    tmpvalue |= low;
    value = tmpvalue;

  \
    t = value * 0.0625;//換算成實際溫度
    \
    value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0減0.5   四舍五入
    return value;
}

void display(int v) //顯示函數(shù)
{
    unsigned char count;
    unsigned char datas[] = {0, 0, 0, 0, 0};
    unsigned int tmp = abs(v);
    datas[0] = tmp / 10000;
    datas[1] = tmp % 10000 / 1000;
    datas[2] = tmp % 1000 / 100;
    datas[3] = tmp % 100 / 10;
    datas[4] = tmp % 10;
    writeComm(0xc0+3);
    if(v < 0)
    {
        writeString("- ", 2);
   }
    else
    {
       writeString("+ ", 2);
    }
    if(datas[0] != 0)
    {
        writeData('0'+datas[0]);
    }
    for(count = 1; count != 5; count++)
    {
        writeData('0'+datas[count]);
        if(count == 2)
        {
            writeData('.');
        }
    }
}
/**//*****************************DS18B20*******************************/

void main()
{
    uchar table[] = "  xianzaiwendu: ";
    sendChangeCmd();
    init();
    writeComm(0x80);
    writeString(table, 16);
    while(1)
    {
        delayMs(1000); //溫度轉(zhuǎn)換時間需要750ms以上
        writeComm(0xc0);//第二行地址 顯示溫度
        display(getTmpValue());
        sendChangeCmd(); //再次初始化DS總線
    }
}


無標題.png
回復(fù)

使用道具 舉報

ID:452950 發(fā)表于 2020-5-1 09:59 | 顯示全部樓層
TH、TL是溫度報警的上下限嗎,設(shè)置兩個變量,一個·按鍵選擇調(diào)節(jié)上限或下限、一個按鍵加、一個按鍵減就好了。
回復(fù)

使用道具 舉報

ID:282850 發(fā)表于 2020-5-1 13:52 | 顯示全部樓層
設(shè)三個按鍵,+ -  S,S時可以選TH、TL,并閃爍,+時選中++,-時選中--,最后按S時保存。OK。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲视频在线观看 | 日韩精品免费在线观看 | 国产一区二区影院 | 看黄在线 | 91色视频在线观看 | 华丽的挑战在线观看 | 青青久久 | a级在线免费视频 | 国产欧美视频一区二区三区 | 亚洲精品一区二区三区丝袜 | 中文字幕一区二区三区乱码在线 | 中文二区 | 九色在线| 久久草在线视频 | 美美女高清毛片视频免费观看 | 国产香蕉视频在线播放 | 欧美视频在线看 | 欧美一区精品 | 久久久激情视频 | 日韩欧美电影在线 | 国产一级影片 | 婷婷久久网 | 亚洲精品久久久久久久久久久久久 | 精品亚洲永久免费精品 | 日本一道本视频 | 一区二区成人 | 久久6| 超级碰在线 | 国产香蕉视频 | 欧美激情久久久 | 精品久久一区 | 久久久91精品国产一区二区三区 | 黄色一级片在线播放 | www.se91| 久草免费在线视频 | 国产激情视频在线免费观看 | 亚洲一区在线播放 | 三级成人片 | 亚洲激精日韩激精欧美精品 | 一区二区三区中文字幕 | 亚洲日本国产 |