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

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

51單片機18B20溫度與串口實驗

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

有圖有真相





溫度顯示在串口調速器上,此軟件可到 http://www.zg4o1577.cn/mcudown/ 單片機開發實用工具軟件這一欄下載
下面單片機部分的源代碼:
 

//11.0592晶振
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
code uchar seg[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};   //數碼管碼表
code uchar tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};   //數碼管位選

//sbit k8=P1^7;   //按鍵發送溫度值
sbit dec=P0^5;   //小數點顯示位
static uint count;     //延時發送溫度值變量
void delay(uint k)
{
 while(k--);
}
void show_temp(uint k)    //顯示溫度值函數
{
 P0=seg[k/100];
 P2=tab[2];
 delay(30);
 P0=0xff;
 P2=0xff;
 P0=seg[k%100/10];
 dec=0;       //顯示小數點
 P2=tab[1];
 delay(30);
 P0=0xff;
 P2=0xff;
 P0=seg[k%10];
 P2=tab[0];
 delay(30);
 P0=0xff;
 P2=0xff;
}
#include "18B20.h"        //18B20庫函數
 
uchar suf;      //存放串口收到的數據
uint temp;    //輸出溫度值
 
void serial_init()   //串口初始化
{
   TMOD|=0x20;   //定時器設定自動重撞在模式
   TH1=TL1=0xfd;  //9600波特率
   SM2=0;       //無多機處理位
   SM1=1;     // 8位可變波特率模式
   SM0=0;
   TR1=1;         //  定時器1打開
   REN=1;         //串口接收使能
}
void send_byte(uchar u)   //發送一個字節函數
{
   bit es;    //保存先前ES狀態變量,這樣可以不干擾其他用戶用它是現在的狀態
   es=ES;
   ES=0;     //暫時關閉串口中斷
   SBUF=u;    //數據放入SBUF緩沖器等待發送完成
   while(TI==0);   //等待發送完成
   TI=0;
   ES=es;     //恢復先前狀態
}
void send_str(uchar *p) //發送一串字符函數
{
   while(*p)
   {
 send_byte(*p);
 p++;
   }
}
void str_init()   //串口中斷初始化
{
 EA=1;
 ES=1;
}
void serial_event() interrupt 4   //串口中斷函數
{
   if(RI==1)   //在中斷里盡量只做需要的事情
   {
    suf=SBUF;
 RI=0;
   }
   else
   {
 ;
 }
}
void send_number(uchar *p,uint k)    //通過串口發送溫度值函數
{
 while(*p)
 {
  send_byte(*p);
  p++;
 }
 send_byte(' ');
 send_byte(' ');
 send_byte(k/100+48);
 send_byte(k%100/10+48);
 send_byte('.');
 send_byte(k%10+48);
 send_byte('\r');
 send_byte('\n');
}
/*
void key8()             //按鍵發送函數
{
  static uchar i,j;
  if(k8==0)
  {
 if(i==0)
 {
  j++;
  if(j>3)
  {
   i=1;j=0;
   send_number("the temperature is  ",temp);
  }
 }
  }
  else
  {
   i=0;
   j=0;
  }
}
*/
void main()
{
   serial_init();       //串口初始化
   send_byte(12);  //超級終端清屏
   send_str("serial_init is ok \r\n");    //初始化好壞標示字符串
   str_init();           //串口中斷初始化
   send_str("str_init is ok \r\n");
 while(1)               
 {
   count++;  
   temp=read_18b20();
   show_temp(temp);
   if(count>500)     //約沒3秒發送一次溫度值給串口
   {
   send_number("The temperature is ",temp);
   count=0;
   }
   else
   {
   }
 }
}
 
//-----------------------18B20----庫函數----------------
sbit dq=P3^4;   //18B20數據口
void send_1()  //發送1位1函數
{
  dq=0;
  dq=0;
  dq=0;
  dq=1;
  delay(2);
}
void send_0() //發送1位0函數
{
  dq=0; 
  delay(2);
  dq=1;
}
void Tsend_byte(uchar dat)
{
 uchar i;
 for(i=0;i<8;i++)
 {
  if(dat&0x01)send_1();
  else send_0();
  dat>>=1;
 }
}
uchar read_byte()   //18B20讀取數據函數
{
  uchar i,byte;
  for(i=0;i<8;i++)
  {
    dq=0;
 dq=0;
 dq=1;
 dq=1;
 byte>>=1;
 if(dq==1)
 {
  byte=byte+0x80;  //如果采樣為1則最高位為1
 }
 delay(3);
  }
  return byte;
}
uchar start_18b20() //啟動18b20實質上判斷有誤應答信號
{
  static uint cnt;
  dq=0;
  delay(62);
  dq=1;
  while(dq==1)  //等待拉低
  {
 cnt++;
 if(cnt>50000)
 {
 cnt=0;
 return 1;  //等待超時判斷說明器件壞了
 }
  }
   while(dq==0)             
   {
 cnt++;
 if(cnt>50000)
 {
  cnt=0;
  return 1;
 }
   }
   return 0;       //正常啟動返回0值
}
uint read_18b20()  //讀取溫度值函數
{
  uchar TH,TL;
  uint temp;
  start_18b20();
  Tsend_byte(0xcc);
  Tsend_byte(0x44);
  ;;
  start_18b20();
  Tsend_byte(0xcc);
  Tsend_byte(0xbe);
   TL=read_byte();
   TH=read_byte();
   temp=TH;
   temp<<=8;
   temp=temp+TL;
   /*if(temp&0xf800)   //如果最高位為1則是溫度為負值   .可以設置溫度負值符號
   {
 temp=~temp+1;
   }
   */
   temp=temp*0.0625*10;   //顯示小數部分
   return temp;
}
關閉窗口

相關文章

主站蜘蛛池模板: 久久成人免费视频 | www.4虎影院| 一区二区三区不卡视频 | 精品国产精品一区二区夜夜嗨 | 天堂一区在线观看 | 亚洲视频欧美视频 | 婷婷久 | 欧美精品在线视频 | 99精品欧美一区二区三区综合在线 | 久久国产精品99久久久大便 | 久久久综合 | 精品亚洲一区二区三区 | 91在线免费视频 | 久久久久久av | 亚洲免费一区 | 欧美精品一区二区三区视频 | 黄色免费在线网址 | 先锋av资源网 | 国产高清视频在线观看 | 日韩视频免费看 | www.中文字幕.com | av天天爽 | 色资源站| 欧美a级成人淫片免费看 | 一级欧美一级日韩片免费观看 | 日本高清不卡视频 | 一级欧美一级日韩片免费观看 | 黄色一级免费 | 人人干人人草 | 亚洲精品一区二区三区蜜桃久 | 久久91av| 免费观看黄色一级片 | 精产国产伦理一二三区 | 99久久久久国产精品免费 | 男女污网站 | 色综合久 | 欧美国产一区二区三区 | 免费一区二区 | 亚洲va欧美va天堂v国产综合 | 国产一区二区三区久久久久久久久 | 全免费a级毛片免费看视频免 |