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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實(shí)例 >> 瀏覽文章

單片機(jī)驅(qū)動ds18b20四路溫度巡回檢測程序

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2011年07月05日   【字體:
#include "reg52.h"http://頭文件
#include "intrins.h"
#define uchar unsigned char//宏定義
#define uint unsigned int//宏定義
sbit led_7=P1^7;//;;;LED秒閃爍
sbit DQ=P2^2;////定義I/O的硬件接口--溫度
uchar code temp[4][8]= {{40,92,34,152,2,0,0,132},   //張
                         {40,42,193,186,2,0,0,77},   //江
       {40,153,209,186,2,0,0,111},  //斌
       {40,14,151,7,3,0,0,137}};   //云
 sbit beep=P3^6;
 sbit rs=P3^5; 
 sbit lcden=P3^4;
 sbit key1=P2^4;
 sbit key2=P2^5;
 uchar table1[8]={0};
 uchar fuhao;
 uchar count=1;
void delay1(uchar x2)//經(jīng)精準(zhǔn)計算,該段程序1次延時時間為 19.53us;多次調(diào)用需要重新計算。
{
while(x2>0)
{
x2--;
}

}
void delay3(uint t)
{
  while(t--);
}

void DB18B20_init()//DB18B20復(fù)位
{
DQ=1;
delay1(1);//程序1次延時時間為 19.53us
DQ=0;
delay1(110);//程序110次延時時間為 965.71us
DQ=1;
delay1(1);//程序1次延時時間為 19.53us
while(DQ==1);
if(DQ==0)
led_7=~led_7;//led檢測復(fù)位正常否,如果DB18B20存在,且正常;led閃爍。
while(DQ==0);
delay1(20);//程序20次延時時間為 197.32us

}

void write_DB18B20(uchar m1)//寫DB18B20
{
uchar i,m2;

for(i=0;i<8;i++)
{
m2=m1;
m2=m2&0x01;
DQ=0;  
_nop_();
DQ=1;
if(m2==0x01)  
DQ=1;
else
DQ=0;
delay1(5);//程序5次延時時間為 54.25us
m1=m1>>1;
DQ=1;

}
}
 //從總線上取1 個字節(jié)
uchar read_byte(void)
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
DQ=1;
value>>=1;
DQ=0;nop_();_nop_(); //2 us
DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us
if(DQ)value|=0x80;
delay3(6); //66 us
}
DQ=1;
return(value);
}

void delay2(uint z) //延時函數(shù)
            {
         uint x,y;
         for(x=z;x>0;x--)
          for(y=110;y>0;y--);
        }
           
void write_com(uchar com)//液晶寫命令
            {
         rs=0;   //指令選通
         lcden=0;
         P0=com;   //送指令
         delay2(5);
         lcden=1;
         delay2(5);
         lcden=0; 
        }
void write_date(uchar date)//液晶寫數(shù)據(jù)
            {
         rs=1;   //數(shù)據(jù)選通
         lcden=0;   //液晶使能信號
         P0=date; //送數(shù)據(jù)
            delay2(5);
            lcden=1; 
            delay2(5);
            lcden=0; 
           }
void init()    //初始化函數(shù)
            {
           
            lcden=0;
            write_com(0x38); //設(shè)置顯示模式
            write_com(0x0c); // 不顯示光標(biāo)
            write_com(0x06);// 地址指針自動加1
            write_com(0x01);// 顯示開始清屏
            write_com(0x80); // 設(shè)置數(shù)據(jù)指針
            write_date(0x35);
            }
 void write_sfm(uchar date)  //寫數(shù)據(jù)
            {
            uchar bai,shi,ge;
            bai=date/100;
            shi=date%100/10;
   ge=date%10;
            if(bai==0)
   {
    write_date(0x30+shi);
    write_date(0x30+ge);
            }
   else
    { write_date(0x30+bai);
            write_date(0x30+shi);
   write_date(0x30+ge);
          }
   }
void display(uchar dis)
{ write_com(0x80+0x40);
    write_date(0x30+dis+1);
 if(fuhao==1)
 {
   write_com(0x80+0x40+5);
   write_date(0x2d);
   }
   else write_com(0x80+0x40+5);
   write_sfm(table1[2*dis]);
   write_date(0x2e);
   write_sfm(table1[2*dis+1]);

}
 
  void  read_tmper(uchar tt)
  {    uint twork;
      uchar i_s;
    uint zhenshu,xiaoshu;
   DB18B20_init();
   delay1(10);
   write_DB18B20(0xcc);
   write_DB18B20(0x44);
   delay1(20);
   DB18B20_init();
   delay1(10);
   write_DB18B20(0x55);
   for(i_s=0;i_s<8;i_s++)
   {
      write_DB18B20(temp[tt][i_s]);
   }
   write_DB18B20(0xbe);
   table1[2*tt]=read_byte();
   table1[2*tt+1]=read_byte();
   twork=table1[2*tt+1];
   twork<<=8;
  twork=twork|table1[2*tt];
   
     if(twork&0x0800)
    {
        fuhao=1;
     twork=~twork;
     zhenshu=twork>>4;
     zhenshu=zhenshu&0x007f;
     table1[2*tt]=zhenshu;
     xiaoshu=twork&0x000f;
     xiaoshu=xiaoshu*625/100;
     table1[2*tt+1]=xiaoshu;
    }
    else
   { fuhao=0;
     zhenshu=twork>>4;
     zhenshu=zhenshu&0x007f;
     table1[2*tt]=zhenshu;
     xiaoshu=twork&0x000f;
     xiaoshu=xiaoshu*625/100;
     table1[2*tt+1]=xiaoshu;
  }
 
  }
  void keyscan()
  {
      if(key1==0)
    {  while(!key1);
      count++;
   if(count==5)
   count=1;
      }
    if(key2==0)
    {  while(!key2);
      count--;
   if(count==0)
   count=4;
      }
  }
  void alarm()
  {
   if((table1[3]>50&&count==0)||(table1[3]>10&&fuhao==1&&count==0))
 {
    beep=~beep;
  
 }
 if((table1[3]>50&&count==1)||(table1[3]>10&&fuhao==1&&count==1))
 {
    beep=0;
    delay1(100);
    beep=1;
  
 }
 if((table1[3]>50&&count==2)||(table1[3]>10&&fuhao==1&&count==2))
 {
    beep=0;
    delay1(50);
    beep=1;
    delay1(50);
    beep=0;
    delay1(50);
    beep=1;
   
 }
   if((table1[3]>50&&count==3)||(table1[3]>10&&fuhao==1&&count==3))
 {
    beep=0;
    delay1(70);
    beep=1;
    delay1(70);
    beep=0;
  
 }
  }
 
void main()
{  
   init();
   while(1)
 {  read_tmper(0);
    read_tmper(1);
    read_tmper(2);
    read_tmper(3);
    display(count-1); 
    keyscan();
    alarm();
 }
}
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 成人在线视频看看 | 欧美亚洲视频在线观看 | 天天色图 | 久久国内| 国产精品视频网址 | 亚洲精品白浆高清久久久久久 | 喷潮网站 | 成人精品国产一区二区4080 | 性做久久久久久免费观看欧美 | 日韩黄色av | 免费成人在线网站 | 天堂av免费观看 | 国产久| 久久精品av | 一区二区中文字幕 | 欧美一二三区 | h视频在线免费 | 99色综合| 天天操天天干天天爽 | 一区二区三区久久久 | 91精品一区二区三区久久久久 | 日韩在线看片 | 欧美精品一区二区三区蜜桃视频 | 一级黄色片日本 | 黄色大片视频 | 激情欧美日韩一区二区 | 欧美video | 国产精品久久久久久吹潮 | 成人一区精品 | 欧美成人精品一区二区三区 | 免费1区2区3区 | 久久人人网 | 日韩成人在线视频 | 中文成人在线 | 午夜在线影院 | aaa天堂 | 久久久免费 | 亚洲国产黄色av | 一区二区三区在线电影 | 久久岛国| 亚洲高清免费视频 |