wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

溫度控制led燈灰度變化c51

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年02月17日   【字體:

18b20時序要求比較嚴格。
所遇問題:測出溫度值不準確,不停的從255于實際溫度值跳變。
解決方法:在讀取溫度值時,關掉中斷。不過燈有一些閃。
該程序所測溫度的精度不能達到0.5,需要稍微改動。
不知道1602穩定了沒,明天再試一次。
反應好像還不夠靈敏。

#include "reg52.h"   
#include<intrins.h> 
#define uchar unsigned char 
//溫度傳感器與單片機接口為 P0.1 
sbit DQ=P1^5; 
// 
sbit E=P0^7; 
sbit RW=P0^6; 
sbit RS=P0^5; 
sbit LED=P3^5; 
//sbit lcd_flag=P2^7;             //定義是lcd否忙標志 
sbit P1_7 = P3 ^ 7;                              // 控制LED11               
sbit P1_6 = P3 ^ 6;                              // 控制LED10   
sbit P1_2 = P3 ^ 4;   
// 
uchar timer=0x00; //字節變量timer用于計時,每計數器記滿100次,就采樣一次溫度 
uchar chars[]={"GYRGB.Liuzhou^_^"};      // 液晶顯示第一行 
uchar chars2[]={"Welcome!"};            //液晶顯示第二行         
             
uchar  scale_0;                         //燈光灰度 
/////////////////////////////// 
//各個功能子函數 
/////////////////////////////// 
void delay(void);       //18b20溫度轉換后所需的延時 
void delay1(void);      //動態數碼管顯示所需的較短的延時 
unsigned char Read18B20(void);  //讀18b20子函數   
void Write18B20(uchar ch);       //寫18b20子函數 
void Delay15(uchar n);     //讀寫所需的最基本單位時間的延時 
void Init18B20(void);     //初始化18b20函數 

///////////////////////////// 
//新增的液晶顯示程序 
///////////////////////////// 
void WriteLCDcom(uchar ch); 
void WriteLCDdat(uchar ch); 
void main(void) 
{ 
uchar i,tl,th;     //變量i用于循環計數,tl和th用于獲得二進制溫度值 
uchar temp;      //變量temp用于存放有效的溫度值 
uchar bith,bitt,biti,bitz;  //將要顯示在數碼管上的百位、十位、個位和十分位的碼值 
unsigned  int   n; 

RCAP2H =0xFE;                                  // 賦T2的預置值,溢出1次是1/2000秒鐘 
    RCAP2L =0x0C; 
    ET2=1;                                         // 打開定時器2中斷 
EA=1; //總中斷允許 
    TR2=1;                                      // 啟動定時器2 

WriteLCDcom(0x01);        //清屏 
WriteLCDcom(0x38);       
WriteLCDcom(0x0c); 
WriteLCDcom(0x06);   
WriteLCDcom(0x80); 
for(i=0;i<16;i++) 
  WriteLCDdat(chars); 
WriteLCDcom(0xc0); 
for(i=0;i<8;i++) 
  WriteLCDdat(chars2); 
WriteLCDcom(0xce); 
WriteLCDdat(0xdf); 
WriteLCDdat(0x43); 

//////////////////////////////// 
//12M晶振,16位計數器 
//溢出時間 65536us約等于65.5ms 
//溢出100次采樣溫度一次,采樣周期6.5秒 
//////////////////////////////// 
while(1) 
{ 

   LED=1; 
   Init18B20(); //復位18b20,每次復位18b20都是默認的12位轉換精度 
   Write18B20(0xcc);//向18b20寫入跳過激光rom操作 
   _nop_();   //稍等片刻 
   Write18B20(0x44);//命令18b20開始溫度的測量以及模數轉換 
   
   delay();   //18b20轉換時間較長應該等待稍長時間 
   
   Init18B20();  //每一次對18b20的讀寫都要先復位 
   TR2=0;           //18b20對時序要求比較嚴格,因此在讀取溫度時要關中斷,否則測的溫度值會出錯 
   Write18B20(0xcc);//照例跳過ROM的操作 
   _nop_();   //等 
   Write18B20(0xbe); //讀18b20的溫度數據,可以連續讀5個字節 
   _nop_();    //等 
   tl=Read18B20();   //讀第一個字節,里面是12位有效數字的低八位 
   th=Read18B20();   //讀第二個字節,是擴展的符號位和有效值的高四位 
   TR2=1; 
   Init18B20(); 
   temp=(th<<4)+(tl>>4); 
//實際上,temp=(th<<4)+(tl>>4)這個式子得到的是只包含了數整值的溫度值 
//th向左移4位,拋棄了擴展的符號位;tl向右移4位,拋棄了4位小數位 
   bith=temp/100;  //得到百位數字 
   bitt=(temp%100)/10; //得到十位數字 
   biti=temp%10;  //得到個位數字,由于要顯示小數點,所以要減去一個0x80 
   bitz=0;    //只是作為好看的位數,實際我們在計算temp的時候已經將小數位舍去了 
   
/*****************************************/ 
// 液晶的顯示 
/*****************************************/ 
     WriteLCDcom(0xc8); 
     WriteLCDdat(bith+0x30); 
     WriteLCDdat(bitt+0x30); 
     WriteLCDdat(biti+0x30); 
     WriteLCDdat(0x2e); 
     WriteLCDdat(bitz+0x30); 
     LED=1; 

     
     for(n=0;n<50000;n++);                    // 每過一會兒就自動加一個檔次的亮度 
     if(temp==26)  scale_0=0; 
       else if(temp==27)  scale_0=1; 
      else if(temp==28)  scale_0=2; 
       else if(temp==29)  scale_0=3; 
     else if(temp==30)  scale_0=4; 
      else if(temp==31)  scale_0=5; 
       else if(temp==32)  scale_0=6; 
        else if(temp==33)  scale_0=7; 
      else if(temp==34)  scale_0=8; 
       else   scale_0=9; 
         
               
} 
} 

  /******************************************************************************************** 
* 函數名稱:Timer2_Server() 
* 功    能:定時器2溢出中斷服務程序。1/2000 秒中斷1次。 
* 入口參數:無   
* 出口參數:無   
*********************************************************************************************/ 
void Timer2_Server(void) interrupt 5   
{ 
  static uchar tt;                               // tt用來保存當前時間在1秒中的比例位置 
   
  TF2=0; 
   
  tt++; 
  if(tt==10)                                     // 每1/200秒整開始輸出低電平 
   { 
     tt=0; 
  if(scale_0!=0)                              // 加入該句的目的是避免滅燈時發生閃爍 
   { 
     P1_7=0; 
     P1_6=0; 
     P1_2=0; 
   } 
   } 
  if(scale_0==tt)                                // 按照當前占空比切換輸出高電平 
   { 
     P1_7=1; 
     P1_6=1; 
     P1_2=1; 
   } 
} 


void delay(void)  //長延時,18b20在執行溫度轉換操作的時候需要耗費較長時間 
{      //在這段時間里18b20需要測溫,做模數轉換,并將轉換的二進制數值存儲到自帶的臨時寄存區里去 
  uchar i,j; 
for(i=0;i<200;i++)   //具體需要多長時間芯片手冊上有介紹,這個要繼續深入了解 /*************************??******/ 
  for(j=0;j<100;j++) 
  ; 
} 

unsigned char Read18B20(void)  //最基本的讀18b20的函數,并向主函數返回讀到的那個字節 
{ 
unsigned char ch; //相當于串行緩存器 
    unsigned char q ; //循環計數器 
    for(q=0;q<8;q++)   //循環8次,讀出串行的8位數據,先讀到的是數據的最低位 
        //因此要從ch的最高位存起,然后依次將ch向右移,就像火車進站那樣 
    {       //    7 6 5 4 3 2 1 0   (ch) 
        // MSB-6-5-4-3-2-1-LSB  ---->      (數據) 
  ch=ch>>1;   //先移位再賦值,出現賦值8次但是只移位7次的效果 
      DQ=0;    //單線總線的要求,要讀器件,就要產生一個上升沿,然后釋放總線,現在要回到低電平 
      _nop_();   // 稍微停頓,讓器件探測到電平已經變低了 

      DQ=1;    //拉高總線產生上升沿,同時,在某種意義上,對單片機的端口寫1,也就是讓端口處于待讀的狀態,一舉兩得 
      _nop_();_nop_(); //4個空操作函數,等待,給18b20響充分的時間響應,具體需要多久的時間要看器件手冊 
  _nop_();_nop_();  // 讀響應是多久,需要繼續深入了解        /********************??*****/     
       //而且這個-nop-()函數到底會延時多長時間,要深入了解 /****************??***/ 
      if(DQ==1)      //開始讀端口,如果為1,則將ch最高位寫為1 
        { ch=ch|0x80;}  //ch|0x80就是 XXXX XXXX | 1000 0000 每一位相或的結果就是得到 1XXX XXXX,火車開始進站了 
     else      //如果讀到的數是0,那么就把ch的最高位置為0 
  { ch=ch&0x7f;}  // ch & 0x7f 就是 XXXX XXXX & 0111 1111 ,結果自然就是 0XXX XXXX,數字最低位就進站好了 
      Delay15(3);    //延時少少,延時多長要繼續深入了解    /****************??*****/ 
    DQ=1;     //讀完之后再次置端口為1,好為下一次讀做準備,其實很關鍵的一步 
     }   
  return (ch);  //將讀到的數據返回給主函數,這就我們想要的結果了 
} 
void Write18B20(uchar ch)  //寫18b20的函數 
{   
uchar i;     //一個循環計數變量 
for(i=0;i<8;i++)   //循環8次,每次一位二進制 
{ 
  DQ=0;   //從讀和寫函數的比較可以得知,產生讀/寫的條件都是要先產生低電平,只是低電平的維持時間長短不一 
    Delay15(1);  //寫操作需要的低電平持續時間比讀操作要長的多 
    DQ=ch &0x01; //向總線上寫ch的最低位,跟讀的操作類似,只是這時“車站”是18b20,而“列車”是ch 
    Delay15(3);  //           7 6 5 4 3 2 1 0  (18b20) 
      // MSB-6-5-4-3-2-1-LSB  ---->      (ch) 
      // ch & 0x01 就是 xxxx xxxx & 0000 0001,結果是0000 000x 
      //為什么可以用一個位變量  DQ= 0000 000x,這個問題需要繼續深入了解 /*************??****/ 
    DQ=1;   //寫完一位后,將總線抬高,為下一次拉低做準備 
    ch=ch >>1;  //將ch第二低位推到最低位,等待發射出去 
    _nop_();  //等待一段時間 
} 
} 
void Init18B20(void) //初始化18b20 
{ 
DQ=0;    //初始化操作同樣是由低電平開始,但是這個初始化低電平要持續得最久 
    Delay15(30);//至少延時480us,到底是多少,要找到-nop-()函數源碼,反匯編之后才知道/*******************??****/ 
    DQ=1;    //抬高總線,一舉兩得,可以準備接受18b20的存在低電平 
    Delay15(10);//至少延時100us 
} 
void Delay15(uchar n)  //貌似滿精確的延時程序 
{         //具體要在 intrins.h頭文件中找到它,那么首先就要找到intrins.h /****************??*****/ 
  do 
{ 
  _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
        _nop_(); _nop_(); _nop_(); 
   
    n--; 
   
    }while(n); 
} 
/* 
bit LCDbusy() 
{ 
  bit flag; 
  RS=0;         //寄存器為LOW 
  RW=1;         //是否讀寫為high 
  E=1;          //使能端為high 
  if(lcd_flag==1) flag=1; 
  E=0; 
  return flag; 
} 
*/ 
void WriteLCDcom(uchar ch) 
{ 
   // while(LCDbusy()); 
RS=0; 
RW=0; 
E=0; 
P2=ch; 
delay(); 
E=1; 
E=0; 
} 
void WriteLCDdat(uchar ch) 
{ 
   // while(LCDbusy()); 
RS=1; 
RW=0; 
E=0; 
P2=ch; 
delay(); 
E=1; 
E=0; 
} 

不明白為什么加了檢測1602是否忙的程序進去,為什么P2口就沒有數據了呢?液晶就不能顯示了呢?  
關閉窗口

相關文章

亚洲乱码一区av黑人高潮| 91传媒免费视频| 亚洲国产欧美一区二区三区同亚洲 | 亚洲一区三区在线观看| 国内精品视频在线| 日韩欧美一级片| 亚洲欧美一区二区三区国产精品 | 欧美精品一区二区三区在线| 亚洲色图在线播放| 精品一区二区三区视频| 日韩片欧美片| 综合久久伊人| 欧美韩日亚洲| 白白色在线发布| 66av国产| 少妇av在线播放| 欧美三级一区二区三区| 亚洲精品视频大全| 色婷婷成人在线| 国产女人18毛片| 久久精品日韩| 国产美女精品免费电影| 久久综合久久88| 亚洲国产成人久久综合| 91国偷自产一区二区三区观看| 99re在线精品| 卡一卡二国产精品 | 欧美日韩一区二区三区不卡| 国产精品另类一区| 国产精品亚洲人在线观看| 伊人成人网在线看| 日韩精品四区| 日韩精品免费一区二区夜夜嗨| 在线男人天堂| 污视频免费在线观看| 色视频在线观看| 羞羞小视频视频| 在线观看视频h| 久草在线最新视频| 亚洲大尺度视频| 中国黄色一级视频| 在线能看的av| 538精品在线视频| 任我爽在线视频精品一| 国产精品永久在线| 2019中文在线观看| 精品中文字幕在线观看| 亚洲欧美国产日韩中文字幕| 欧美一二三四在线| 欧美图片一区二区三区| 精品国产老师黑色丝袜高跟鞋| 国产欧美视频在线观看| 成人的网站免费观看| 另类综合日韩欧美亚洲| 日韩电影免费一区| 亚洲欧美日韩国产一区二区| 一区在线免费| 午夜激情一区| 午夜国产精品视频免费体验区| 日韩欧美在线中字| 91综合在线| 日本女优一区| 亚洲男男gay视频| 国产9色视频| 国产精品日日爱| 国产欧美一区二区三区小说| 久久久久久久美女| 性欧美性free| 欧美6699| 91av看片| 2021天天操| 日本五十路在线| 中文字幕在线永久在线视频| 影音先锋电影在线观看| 校园春色欧美| av在线收看| 日本在线视频www鲁啊鲁| 超碰人人在线| 天堂网在线最新版www中文网| 蜜桃麻豆影像在线观看| 欧美日韩女优| 中文字幕一区二区三区四区久久 | 污网站免费在线观看| 神马精品久久| 免费在线观看黄| 在线免费观看的av| 无人区在线高清完整免费版 一区二| 中文字幕在线看片| 国产精品一区二区美女视频免费看| 一区二区三区四区高清视频| 要久久电视剧全集免费| 五月天久久777| 99在线观看免费视频精品观看| 亚欧美中日韩视频| 国产大陆a不卡| 国产亚洲成av人在线观看导航 | 亚洲自拍偷拍色图| 黄色国产精品一区二区三区| 日本一区二区三区精品视频| www.黄色网址.com| 国产aaaaa毛片| 亚洲综合自拍网| 欧美激情图片小说| 国产情侣免费视频| 亚洲高清在线免费| 免费福利在线| 在线免费观看你懂的| 亚洲搞黄视频| 写真福利精品福利在线观看| 99精品国产高清一区二区麻豆| 精品理论电影| 日韩极品在线观看| 久久久久国产精品麻豆ai换脸 | 国产卡一卡二卡三| 国产激情视频网址| 99久久亚洲| 狠狠操天天操夜夜操| 色就是色亚洲色图| 国内激情视频在线观看| 91亚洲精品视频在线观看| 99久久99热这里只有精品| 日韩制服丝袜av| 久久久精品蜜桃| 在线日韩av片| 中文字幕日韩精品在线| 国产精品成av人在线视午夜片| 精品视频高清无人区区二区三区| 久久99中文字幕| 稀缺小u女呦精品呦| 国产无码精品一区二区| 日韩一区二区三区在线观看视频| 猛性xxxxx| 黄色片网站在线| 亚洲码欧美码一区二区三区| 亚洲每日更新| 中文子幕无线码一区tr | 精品久久久久久久久久久| 日韩欧美国产小视频| 欧美乱大交做爰xxxⅹ性3| 91青青草免费在线看| 日韩xxxx视频| 欧美亚洲色综久久精品国产| 丰满人妻一区二区三区四区| 国产吧在线视频| 77导航福利在线| 97久久综合精品久久久综合| 国产精品一区亚洲| 中文字幕一区二区日韩精品绯色| 日韩午夜精品视频| 日韩女优人人人人射在线视频| 视频一区不卡| 欧类av怡春院| 国产剧情久久久| 成人黄色激情网站| 丁香花视频在线观看| 一区二区三区视频免费观看| 麻豆精品一二三| 色香蕉久久蜜桃| 欧美日韩国产成人在线观看| 久久伊人一区二区| 亚洲高清av一区二区三区| 国产一级片播放| 国产美女自拍| 欧洲成人综合网| 日产午夜精品一线二线三线| gogogo免费视频观看亚洲一| 欧美一区国产二区| 国产精品人成电影| 91传媒久久久| 国产成人精品亚洲男人的天堂| 国产精品亚洲色图| 调教一区二区| 亚洲蜜桃视频| 亚洲乱码国产乱码精品精的特点 | 国产精品伦理在线| 亚洲欧美国产精品va在线观看| 亚洲xxxx做受欧美| 久久6免费视频| 国产精品美女一区| 在线看黄的网站| 久久久久久久久久久久久久久久久久久久 | 精品999日本| 亚洲激情av在线| 久久国产精彩视频| 老司机激情视频| 久久精品www人人爽人人| 九色蝌蚪国产| 岛国在线视频网站| 天堂av在线一区| 欧美日韩国产综合一区二区三区| 国产欧美最新羞羞视频在线观看| 一区二区xxx| 国产情侣在线播放| 黄色大片在线看| 午夜激情久久| 亚洲综合999| 日韩av高清不卡| www.com久久久| 成人无码一区二区三区| 国产片在线观看| 欧美三级特黄| 色婷婷香蕉在线一区二区| 国产精品视频xxxx| 中文字幕一区二区三区人妻在线视频 | 欧美裸体bbwbbwbbw| 5g影院天天爽成人免费下载| 制服丝袜在线第一页| 亚洲免费视频在线| 草草在线视频| 国产中文字幕一区| 国产网站欧美日韩免费精品在线观看 | 丝袜美腿中文字幕| 国产精品久久精品牛牛影视| 国产精品专区免费| 精品亚洲成a人在线观看| 精品国产三级a在线观看| 欧美lavv| 日韩毛片在线播放| 最新在线地址| 欧美福利影院| 欧美伦理视频网站| 日韩一本精品| 免费看一级视频| 91美女视频在线| 久久国产99| 亚洲精品成人av| 国产女教师bbwbbwbbw| 亚洲综合五月天婷婷丁香| 日韩精品毛片| 日本不卡一区二区三区高清视频| 亚洲激情成人网| 国产免费黄色小视频| 国产剧情精品在线| 国产精品论坛| 99精品视频免费在线观看| 色综合天天综合网国产成人网 | 国新精品乱码一区二区三区18| 日韩精品一区二区三区在线视频| 国产福利电影在线观看| 97精品一区| 91精品国产丝袜白色高跟鞋| 亚洲伊人久久综合| 国精品无码一区二区三区| 免费在线黄色av| 亚洲在线久久| 欧美日韩国产一区二区三区地区| 天天人人精品| 国产一区二区视频免费| 欧美激情办公室videoshd| 老司机精品视频一区二区三区| 亚洲视频在线免费看| 男人天堂手机在线视频| 国内精品久久久久久久久久| www久久日com| 国产在线精品不卡| 久久影院在线观看| 日本高清久久久| 69欧美性猛交| 蜜桃国内精品久久久久软件9| 欧美日韩中文在线| 亚洲精品白虎| 精品国产亚洲AV| 在线毛片观看| 亚洲老司机在线| 99国产在线观看| 天天干天天干天天干天天| 蜜芽在线免费观看| 高清不卡一区二区| 热re91久久精品国99热蜜臀| 娇妻被老王脔到高潮失禁视频| 国产福利电影网| 伊人成年综合电影网| 日韩高清有码在线| 亚洲欧美国产中文| 手机在线色视频| 欧美三级美国一级| 精品国产髙清在线看国产毛片| 草草久久久无码国产专区| 日日夜夜中文字幕| 欧美日韩在线二区| 精品国产免费人成电影在线观看四季| 欧美视频在线观看视频| 亚洲天堂国产| 日韩国产一区| 日韩视频在线你懂得| 给我免费播放片在线观看| 四虎4hu影库永久地址| 综合国产视频| 日韩av最新在线观看| 国产探花在线看| 91九色porny视频| 亚洲女人av| 久久久久久国产免费| www成人啪啪18软件| 黄色动漫在线| av色综合久久天堂av综合| 成人夜晚看av| 一区二区视频网| 999久久精品| 亚洲国产精品国自产拍av秋霞| 爱情岛论坛亚洲自拍| 99久热re在线精彩视频| 国产精品小仙女| 动漫精品视频| 天天躁日日躁狠狠躁伊人| 精品视频国产| 精品久久国产精品| 久久久精品国产sm调教| 午夜久久中文| 欧美色欧美亚洲另类二区| 国产成人黄色网址| 亚洲一区在线日韩在线深爱| 久久久天堂av| 国产成人精品免费看在线播放| 青娱乐在线视频观看| 久久国产精品区| 国产精品美女久久久久av福利| 性猛交xxxx| 欧美日韩一区二区高清| 欧美中文字幕视频在线观看| 亚洲天堂视频在线| 欧州一区二区| 久久久久久97| 狠狠躁夜夜躁人人爽视频| 欧美激情网址| 欧美成人免费小视频| 婷婷激情五月网| 欧美国产不卡| 日韩精品免费在线播放| 91在线无精精品白丝| 黑人巨大亚洲一区二区久| 欧美久久一二区| 久久久久久久久久久久| 毛片在线网站| 欧美日韩精品电影| 九色porny自拍视频| 51av在线| 精品卡一卡二卡三卡四在线| 免费看黄色三级| 日韩电影免费观| 精品动漫一区二区三区在线观看| 免费黄色国产视频| 日本成人手机在线| 久久久精品免费视频| 韩国av中文字幕| 国产亚洲欧美日韩在线观看一区二区 | 精品一区二区三区免费毛片爱| 九九九九精品九九九九| 美女免费视频网站| 91丨九色丨黑人外教| 野外做受又硬又粗又大视频√| 在线国产一级| 午夜精品在线看| 黄色性生活一级片| 精品美女一区| 日韩一级黄色av| 国产欧美熟妇另类久久久| 成入视频在线观看| 日韩精品一区二区三区在线观看| 欧美日韩国产一二三区| 超碰地址久久| 欧美一级大片在线免费观看| 成人毛片视频免费看| 日日夜夜免费精品| 丝袜美腿玉足3d专区一区| 免费免费啪视频在线观看| 亚洲综合色区另类av| 一级黄色片毛片| 成人做爰视频www| 久久久999精品免费| 亚洲国产精彩视频| 日本aⅴ精品一区二区三区 | 久久久中文字幕| 午夜一区在线观看| 国产在线一区二区| 免费看黄在线看| 国产在线观看91| 亚洲国产精品悠悠久久琪琪| 日本熟妇一区二区| 91成人观看| 欧美激情www| 中文字幕av在线| 欧美日韩一级二级三级| 青娱乐av在线| 一区二区蜜桃| 日韩精品一区二区三区四区五区| 日韩资源在线| 欧美va亚洲va| 樱花视频在线免费观看| 国产日本在线观看| 精品国产一区二区三区不卡 | 日本美女高清在线观看免费| 在线成人免费视频| 天天操天天干视频| 亚洲永久字幕| 九九热只有这里有精品| 免费在线国产视频| 在线视频精品一| 中文字幕jux大岛优香| www久久精品|