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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

大佬看看這個程序 有哪些問題 為什么不顯示溫度啊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:515711 發(fā)表于 2019-4-21 18:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint  unsigned int
#define BUSY  0x80

void Delay(uint);
void init_LCD(void);
void LCD_Command(uchar,uchar);
void LCD_Data(uchar);
void ReadyLCD(void);
void Display_char(uchar,uchar,uchar);
void Display_str(uchar,uchar,uchar code *Data);
void Change(void);
void Display(void);
void init_18B20(void);
uchar Read_18B20(void);
void Write_18B20(uchar);
void Read_temp(void);
void Delay_us(uchar i);
void Key_scan(void);
void Key_set(void);
void Key_inc(void);
void Key_dec(void);
void Alarm(void);

sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
sbit DQ=P1^7;
sbit Normal=P2^4;
sbit Alarm_B=P2^5;
sbit Alarm_R=P2^6;
sbit Alarm_BEEP=P2^7;

uchar Set_flag=0;
uchar Temp_mea,Temp_set1,Temp_set2;
uchar Temp_C_1,Temp_C_2;
uchar Temp_D_1,Temp_D_2;
uchar Temp_true_1,Temp_true_2;

extern uchar code str0[]={"C   :    D  :   "};
extern uchar code str1[]={"Mode:    Deg:  C"};
extern uchar code str2[]={"    Hellow!!    "};
extern uchar code str3[]={"0123456789"};
extern uchar code mode[]={"NCD"};

/********主程序********/
void main(void)
{
        P1=0xff;
        P2|=0x70;
        P2&=0x7f;
        Temp_set1=40;          //設(shè)置溫度40
        Temp_set2=1;          //設(shè)置檔位1
        Delay(500);             //延時500ms啟動
        init_LCD();              //LCD初始化
        init_18B20();            //DS18B20初始化
        Display_str(0,0,str2);     //開機界面
        Display_str(0,1,str2);     //開機界面
        Delay(2000);
        Display_str(0,0,str0);
        Display_str(0,1,str1);
        while(1)
        {
                Key_scan();       //掃描鍵盤
                Read_temp();     //讀取溫度
                Change();
                Display();        //顯示
                Alarm();         //指示燈與報警程序
                Delay(1000);
        }
}

/********延時kms********/
void Delay(uint k)
{
        uint i,j;
        for(i=0;i<k;i++)
        {
                for(j=0;j<60;j++)
                {
                        ;
                }
        }
}
/********顯示模塊********/
/********LCD初始化********/
void init_LCD(void)
{
        P0=0;
        Delay(15);
        LCD_Command(0x38,0);
        Delay(5);
        LCD_Command(0x38,0);
        Delay(5);
        LCD_Command(0x38,0);
        Delay(5);
        LCD_Command(0x38,1);  //8位數(shù)據(jù)傳送,2行顯示,5*7字形
        LCD_Command(0x08,1);  //關(guān)閉顯示
        LCD_Command(0x01,1);  //清屏
        LCD_Command(0x06,1);  //顯示光標(biāo)右移設(shè)置
        LCD_Command(0x0c,1);  //顯示屏打開,光標(biāo)不顯示不閃爍
}

/********寫指令數(shù)據(jù)到LCD********/
void LCD_Command(uchar LC,uchar BC)
{
        if(BC) ReadyLCD();
        P0=LC;
        LCD_RS=0;      //選中指令寄存器
        LCD_RW=0;      //寫模式
        LCD_EN=1;
        _nop_();
        _nop_();
        _nop_();
        LCD_EN=0;
}

/********寫顯示數(shù)據(jù)到LCD********/
void LCD_Data(uchar LD)
{
        ReadyLCD();
        P0=LD;
        LCD_RS=1;      //選中數(shù)據(jù)寄存器
        LCD_RW=0;      //寫模式
        LCD_EN=1;
        _nop_();
        _nop_();
        _nop_();
        LCD_EN=0;
}

/********檢測LCD忙狀態(tài)********/
void ReadyLCD(void)
{
        P0=0xff;
        LCD_EN=1;
        LCD_RS=0;
        LCD_RW=1;
        _nop_();
        while(P0&BUSY)
        {
                LCD_EN=0;
                _nop_();
          _nop_();
                LCD_EN=1;
                _nop_();
          _nop_();
        }
  LCD_EN=0;
}

/********顯示一個字符********/
void Display_char(uchar X,uchar Y,uchar Data)
{
        Y&=0x01;
        X&=0x0f;
        if(Y) X|=0x40;
        X|=0x80;
        LCD_Command(X,0);
        LCD_Data(Data);
}

/********顯示一串字符********/
void Display_str(uchar X,uchar Y,uchar code *Data)
{
        uchar List=0;
        Y&=0x01;
        X&=0x0f;
        while(X<16)
        {
                Display_char(X,Y,Data[List]);
                List++;
                X++;
        }               
}

/********顯示字型轉(zhuǎn)換********/
void Change(void)
{
        Temp_C_1=Temp_set1/10;
        Temp_C_2=Temp_set1%10;
        Temp_D_1=Temp_set2/10;
        Temp_D_2=Temp_set2%10;
        Temp_true_1=Temp_mea/10;
        Temp_true_2=Temp_mea%10;
}

/********顯示子程序********/
void Display(void)
{
        Display_char(5,0,str3[Temp_C_1]);
        Display_char(6,0,str3[Temp_C_2]);
        Display_char(13,0,str3[Temp_D_1]);
        Display_char(14,0,str3[Temp_D_2]);
        Display_char(5,1,mode[Set_flag]);
        Display_char(13,1,str3[Temp_true_1]);
        Display_char(14,1,str3[Temp_true_2]);
}

/********溫度測量模塊********/
/********DS18B20初始化********/
void init_18B20(void)
{
        uchar x=0;
        DQ=1;            //DQ復(fù)位
        Delay_us(4);       //延時
        DQ=0;            //將DQ拉低
        Delay_us(250);     //精確延時大于480us
        DQ=1;            //拉高總線
        Delay_us(40);
        x=DQ;
        Delay_us(20);
}

/********從DS18B20讀取一個字節(jié)數(shù)據(jù)********/
uchar Read_18B20(void)
{
        uchar i=0;
        uchar dat=0;
        for(i=8;i>0;i--)
        {
                DQ=0;
                _nop_();
                dat>>=1;
                DQ=1;
                Delay_us(1);
                if(DQ) dat|=0x80;
                Delay_us(10);
        }
return(dat);
}


/********向DS18B20寫入一個字節(jié)數(shù)據(jù)********/
void Write_18B20(uchar dat)
{
        uchar i=0;
        for(i=8;i>0;i--)
        {
                DQ=0;
                _nop_();
                DQ=dat&0x01;
                Delay_us(10);
                DQ=1;
                dat>>=1;
                Delay_us(10);
        }
}

/********從DS18B20讀取溫度********/
void Read_temp(void)
{
        uchar a=0;
        uchar b=0;
        uchar t=0;
        init_18B20();
        Write_18B20(0xcc);
        Write_18B20(0x44);
        init_18B20();
        Write_18B20(0xcc);
        Write_18B20(0xbe);
        a=Read_18B20();
        b=Read_18B20();
        t=b;
        t<<=8;
        t=t|a;
  Temp_mea=t*(0.0625);
}

/********精確延時********/
void Delay_us(uchar i)
{
  while(--i);
}

/********鍵盤掃描程序********/
void Key_scan(void)
{
        uchar temp;
        P1=0xff;
        if(P1!=0xff)
        {
                Delay(20);  //延時消抖
                if(P1!=0xff)
                {
                        temp=P1;
                        switch(temp)
                        {
                                case 0xfe:Key_set();break; //P1.0按下,功能選擇
                                case 0xfd:Key_inc();break; //P1.1按下,數(shù)字加一
                                case 0xfb:Key_dec();break; //P1.2按下,數(shù)字減一
                                default:break;
                        }
                }
        }
}

/********工作模式子程序********/
void Key_set(void)
{
        Set_flag++;
        if(Set_flag>=3)  //Set_flag=1,設(shè)定上限值
                Set_flag=0;    //Set_flag=2,設(shè)定下限值
}

/********按鍵加一子程序********/
void Key_inc(void)
{
        switch(Set_flag)
        {
                case 1:Temp_set1++;
                       if(Temp_set1>=99) Temp_set1=99;break;
                case 2:Temp_set2++;
                       if(Temp_set2>=Temp_set1) Temp_set2=Temp_set1;break;
                default:break;
        }
}

/********按鍵減一子程序********/
void Key_dec(void)
{
        //Delay(150);
        switch(Set_flag)
        {
                case 1:Temp_set1--;
                       if(Temp_set1<=Temp_set2) Temp_set1=Temp_set2;break;
                case 2:Temp_set2--;
                       if(Temp_set2<=1) Temp_set2=1;break;
                default:break;
        }
}

/********報警和指示程序********/
void Alarm(void)
{
        uchar C;

        C=Temp_set1+5;
       
        if(Temp_mea>C)
        {
                Normal=1;
                Alarm_B=0;
                Alarm_R=1;
                Alarm_BEEP=1;
  }
         else
         {
            Normal=1;
                Alarm_B=1;
                Alarm_R=0;
                Alarm_BEEP=0;
         }
}  

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品久久久久 | 国产成人在线免费 | 欧美精品导航 | 美国一级片在线观看 | 男人天堂久久久 | 精品国产乱码久久久久久1区2区 | 伊人一二三 | 91亚洲精品在线 | 精品国产不卡一区二区三区 | 久久精彩视频 | 欧美福利在线 | 日本粉嫩一区二区三区视频 | 国产三级日本三级 | 在线观看中文字幕一区二区 | 久久久国产精品视频 | 欧美一区二区三区久久精品 | 久热精品在线播放 | 国产乱码精品一品二品 | 日日爽 | 精品久| 中文字幕日韩一区二区 | 日韩av美女电影 | 精品视频一区二区 | 国产精品久久九九 | 亚洲a视频 | 日韩精品 电影一区 亚洲 | 国产精品久久久久久久久久久久 | 久久久不卡网国产精品一区 | 天天干干 | 日韩福利 | 亚洲国产精品区 | 久久宗合色 | 成人在线免费视频 | 亚洲一区二区三区免费在线观看 | 狠狠骚| 毛片com| 欧美激情精品久久久久久 | 日本三级网址 | 男人视频网站 | 成人黄色电影在线观看 | 欧美在线免费 |