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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2214|回復: 3
收起左側

這個溫度報警程序,上下限溫度是怎么看的

[復制鏈接]
ID:386308 發表于 2018-10-20 10:48 | 顯示全部樓層 |閱讀模式
#include <reg52.h>
#include <intrins.h>
#include <math.h>

#define uchar unsigned char
#define uint unsigned int

sbit RS = P0^7;   
sbit LCDEN = P0^5;
sbit rw=P0^6;
sbit  BEEP=P3^6;

void delay500(void)     //500us延時函數
{
        uchar  i;
        for(i=230;i>0;i--);
}

void delayUs()
{
        _nop_();
}

void delayMs(uint a)
{
    uint i, j;
    for(i=a; i>0; i--)
    for(j=100; j>0; j--);
}


void writeComm(uchar comm)
{
        RS = 0;   
    P2 = comm;
    LCDEN = 1;
        delayUs();
    LCDEN = 0;
    delayMs(1);
}

//寫數據:RS=1, RW=0;
void writeData(uchar dat)
{
    RS = 1;
    P2 = dat;
    LCDEN = 1;
        delayUs();
    LCDEN = 0;
    delayMs(1);
}


void init()
{
    rw=0;
    writeComm(0x38);
    writeComm(0x0c);
        writeComm(0x06);
    writeComm(0x01);
}

void writeString(uchar * str, uchar length)
{
        uchar i;
    for(i=0; i<length; i++)
    {
                writeData(str[i]);
    }
}

/*******************************DS18B20*******************************/
sbit dq = P3^7;
void dqInit()
{

    unsigned int i;  
    dq = 0;
    i = 100;  
        while(i>0) i--;
    dq = 1;   
    i = 4;
    while(i>0) i--;
}

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


bit readBit()
{
    unsigned int i;
    bit b;
    dq = 0;
    i++;   
    dq = 1;
    i++; i++;  
    b = dq;
    i = 8;
    while(i>0) i--;
    return b;
}

unsigned char readByte()
{
    unsigned int i;
    unsigned char j, dat;
   dat = 0;
    for(i=0; i<8; i++)
    {
        j = readBit();

        dat = (j<<7)|(dat>>1);
    }
    return dat;
}


void writeByte(unsigned char dat)
{
    unsigned int i;
    unsigned char j;
    bit b;
    for(j=0; j<8; j++)
    {
        b = dat & 0x01;
        dat >>= 1;

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


void sendChangeCmd()
{
    dqInit();   
    dqWait();   
    delayMs(1);   
    writeByte(0xcc);
    writeByte(0x44);
}

void sendReadCmd()
{
    dqInit();
    dqWait();
    delayMs(1);
    writeByte(0xcc);
    writeByte(0xbe);
}


int getTmpValue()
{
    unsigned int tmpvalue;
    int value;
    float t;
    unsigned char low, high;
    sendReadCmd();   
    low = readByte();
    high = readByte();   
    tmpvalue = high;
    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)
{
    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[] = "  Temperature:  ";
        int i;//i儲存轉換后的溫度值
        uchar j;
    sendChangeCmd();
    init();
    writeComm(0x80);
    writeString(table, 16);
    while(1)
    {
        delayMs(1000); //溫度轉換時間需要750ms以上
        writeComm(0xc0);
                i = getTmpValue();
                if(i > 2300)
                {
                        for(j=200;j>0;j--)
                        {
                                  BEEP=~BEEP;       //輸出頻率1KHz
                                  delay500();       //延時500us
                        }
       
                        for(j=200;j>0;j--)
                        {
                                  BEEP=~BEEP;       //輸出頻率500Hz
                                  delay500();       //延時1ms
                                  delay500();
                        }       
                }
        display(i);
        sendChangeCmd();
    }
}

回復

使用道具 舉報

ID:303383 發表于 2018-10-20 12:46 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

ID:7485 發表于 2018-10-20 18:17 | 顯示全部樓層
這個程序大概你還看不懂。

溫度上下限是初始設置時寫進去的。和溫度實測值一同讀出來。
回復

使用道具 舉報

ID:274129 發表于 2018-10-30 22:27 | 顯示全部樓層
溫度上下限是自己程序里面設置的

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲网站在线观看 | 久久久黄色 | 日日摸日日爽 | 精品视频 免费 | 国产精品不卡一区 | 国产精品亚洲视频 | 夜夜夜操 | 亚洲国产精品人人爽夜夜爽 | 人人爽日日躁夜夜躁尤物 | 国产精品一区二区电影 | 男女羞羞视频在线观看 | 日韩欧美在线视频观看 | 日韩欧美一区二区三区四区 | 日韩视频三区 | 色吊丝在线 | 噜啊噜在线 | 亚洲国产精品人人爽夜夜爽 | 午夜免费福利电影 | 蜜臀久久99精品久久久久久宅男 | 黄色大片在线 | xx性欧美肥妇精品久久久久久 | 欧州一区二区三区 | 精品久久久久久久久久久 | 国产精品一区二区在线播放 | 国产精品一区二区三区久久久 | 日本一区二区三区免费观看 | 亚洲国产高清在线观看 | 黄久久久 | 丁香六月伊人 | 91精品国产乱码久久久久久久 | 中文字幕日韩欧美一区二区三区 | 99精品一区二区 | 天天弄 | 成人午夜在线观看 | 女朋友的闺蜜3韩国三级 | 欧美日韩成人 | www.久久久久久久久久久久 | 免费在线a视频 | 欧美aⅴ片| 久久y| 日韩在线成人 |