<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于18B20和單片機89C52的測溫程序

基于18B20和單片機89C52的測溫程序

作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò ) 收藏
#include
#include#include"KEY.h"#include"IIC.h"#define uint unsigned int#define uchar unsigned char#define IICADDR 0x20  //存儲地址#define LEDIO    P0             //P0掃描段碼,P2掃描位選信號 #define LEDCHIP   P2sbit  DQ=P3^2; //18B20接口sbit BEEP=P3^7; // 蜂鳴器接口uchar i=0,mod=0; //掃描變量uchar key1,key2=20;    //按鍵寄存uchar Tmp_max=10,Tmp_min=5,Tmp;    //溫度寄存uint k=0,p=0,num=5000;    //有關(guān)掃描的變量/****************溫度小數部分用查表法*********************/uchar code LedTab[14]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x063};/***共陰數碼管段碼表  0    1    2    3    4    5    6    7    8    9    不亮  -    °  */uchar code selchip[6]={0x01,0x02,0x04,0x08,0x10,0x20};//列掃描位選信號uchar data temp_data[2]={0x00,0x00};//讀出溫度暫放uchar data display[3][7]={{0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x00},  //顯示單元數據,共6個(gè)數據一個(gè)用作運算                   {0x00,0x3f,0x3f,0x3f,0x3f,0x76,0x00},  //顯示H設置最大值{0x00,0x3f,0x3f,0x3f,0x3f,0x38,0x00}};  //顯示L設置最小值///////////////////////////////////////////////////////////////////////////////void Delay_tmp(uchar time)   //延時(shí)10us  {while(time--){_nop_();_nop_();}}void Delay_2s()    //延時(shí)兩秒開(kāi)機檢測數碼管{unsigned char a,b,c;for(c=23;c>0;c--)for(b=216;b>0;b--)for(a=184;a>0;a--);}/*********************定時(shí)器初始化***********************************/void TimerInit(){TMOD=0x01; //定時(shí)器1定時(shí)掃描ET0=1;EA=1;TH0=0xfc;TL0=0xd8;TR0=1;}/******************定時(shí)器中斷掃描程序**********************/void timedis() interrupt 1{if(mod) //閃爍程序,提醒用戶(hù)正在設置{if(num--)  //自動(dòng)退出閃爍,返回主界面{if(k++<190){P2=0x00;}else{LEDIO=display[mod][i];LEDCHIP=selchip[i];if(i>=5)i=0;else i++;if(p++>190){p=0;k=0;}}}elsemod=0;}else   //正常數碼管掃描顯示{LEDIO=display[mod][i];LEDCHIP=selchip[i];if(i>=5)i=0;else i++;}TH0=0xfc;TL0=0xd8;}/*********************DS18B20復位函數*****************************/void Temp_Reset(void){EA=0;CY = 1;while (CY){DQ = 0;                     //送出低電平復位信號Delay_tmp(48);              //延時(shí)至少480usDQ = 1;                     //釋放數據線(xiàn)Delay_tmp(6);               //等待60usCY = DQ;                    //檢測存在脈沖Delay_tmp(42);              //等待設備釋放數據線(xiàn)}EA=1;}/************************寫(xiě)一字節********************/void Temp_Write_byte(uchar val){uchar i;EA=0;for (i=8;i>0;i--){DQ=0;_nop_();_nop_();val >>=1;; //寫(xiě)數據DQ=CY;Delay_tmp(6); //延時(shí)66us等待采樣結束DQ=1; //右移一位}EA=1;}/***********************讀一字節****************************/char Temp_Read_byte(){uchar i;uchar value=0;EA=0;for(i=0;i<8;i++){value >>=1; //18B20右移一位DQ=0;_nop_();_nop_();   //2usDQ=1;_nop_();_nop_(); //2usif(DQ) //讀出來(lái)的是1value |=0x80;Delay_tmp(6);    //66us}DQ=1;EA=1;return value;}/***********************讀出溫度函數*****************************************/void Read_temp(){Temp_Reset();  //總線(xiàn)復位Temp_Write_byte(0xcc);//發(fā)skip ROM命令Temp_Write_byte(0xbe);//發(fā)讀命令temp_data[0]=Temp_Read_byte();//讀低8位temp_data[1]=Temp_Read_byte();//讀高8位Temp_Reset();Temp_Write_byte(0xcc);//發(fā)skip ROM命令Temp_Write_byte(0x44); //溫度變換while(!DQ);}/************************溫度數據處理函數************************************/void Temp_Change(){bit n=0,n1=0,n2=0;Tmp= ((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4); //記錄當前的溫度值,用于比較if(temp_data[1]>127) // 溫度為負時(shí){temp_data[1]=(256-temp_data[1]);  //負溫度求補碼temp_data[0]=(256-temp_data[0]);n=1;}                                                                  display[0][6]=temp_data[0]&0x0f;display[0][4]=LedTab[(uchar)display[0][6]*5/8]; //小數部分display[0][6]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);  //整數部分display[0][1]=LedTab[display[0][6]/100]; //十六進(jìn)制轉BCD碼display[0][6]=display[0][6]%100;display[0][2]=LedTab[display[0][6]/10]; //十位段碼display[0][3]=LedTab[(display[0][6]%10)]|0x80;    //個(gè)位段碼帶小數點(diǎn)display[0][5]=LedTab[12]; //顯示度if(display[0][1]==LedTab[0]) //最高位為零時(shí)都不顯示{display[0][1]=LedTab[10];if(display[0][2]==LedTab[0]) //次高位處理{display[0][2]=LedTab[10];}}         				   
				
            
                
			
							
上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 18B20單片機89C52測溫程

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>