(收集加修改)當溫度高于10度,低于-3.5度時,報警指示燈(紅燈)亮。
0.png (15.51 KB, 下載次數(shù): 76)
下載附件
2017-11-20 21:05 上傳
0.png (10.02 KB, 下載次數(shù): 46)
下載附件
2017-11-20 21:05 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code lednum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//數(shù)碼管字0~9
- uint temp;
- uchar g,s,b,q; //個十百千位
- //uchar data disdata[5];
- uint Tvalue; //溫度值
- uchar Tflag; //溫度正負標志
- char t=0;//溫度 ,初始設定0
- sbit p0=P0^0;//控制紅色報警燈
- sbit P34=P3^4;
- sbit P35=P3^5;
- sbit P36=P3^6;
- sbit DQ=P3^7;//ds18b20與單片機連接口
- sbit P17=P1^7;
- sbit P24=P2^4;
- /*****************延時函數(shù)********************/
- void delay(uint x)
- { uchar k;
- while(x--)
- for(k=0;k<250;k++) ;
- }
- /*****************數(shù)碼管掃描********************/
- void ledscan(void)
- { uchar k;
- for(k=0;k<150;k++)
- { //顯示DS18B20 小數(shù)點一位,含負溫度顯示
- P1=lednum[g];P2=0x0e;delay(1);P1=0x00;
- P1=lednum[s];P17=1;P2=0x0d;delay(1);P1=0x00;
- P1=lednum[b];P2=0x0b;delay(1);P1=0x00;
- P1=lednum[q];P2=0x07;delay(1);P1=0x00;
- }
- }
- /******************************DS18B20程序(定義開始)***************************************/
- void delay_18B20(unsigned int i)//延時2微秒
- {
- while(i--);
- }
- /*****************ds1820復位****************/
- void DS18B20_RST()
- { unsigned char x=0;
- DQ = 1; //DQ復位
- delay_18B20(8); //延時
- DQ = 0; //DQ拉低
- delay_18B20(80); //精確延時大于480us
- DQ = 1; //拉高
- delay_18B20(14);
- x=DQ;
- delay_18B20(20);
- }
- /*****************讀數(shù)據(jù)*******************/
- uchar DS18B20_RD()
- { unsigned char i=0;
- unsigned char R_data= 0;
- for (i=8;i>0;i--)
- { DQ = 0; //給脈沖信號
- R_data>>=1; //
- DQ = 1; //給脈沖信號
- if(DQ)
- R_data|=0x80;
- delay_18B20(4);
- }
- return(R_data);
- }
- /*******************寫數(shù)據(jù)*******************/
- void DS18B20_WR(uchar W_data)
- {
- unsigned char i=0;
- for (i=8; i>0; i--)
- { DQ = 0;
- DQ = W_data&0x01;
- delay_18B20(5);
- DQ = 1;
- W_data>>=1; //
- }
- delay_18B20(4);
- }
- /****************讀取溫度值并轉(zhuǎn)換***************/
- read_temp()
- { uchar a,b;
- DS18B20_RST();
- DS18B20_WR(0xcc); //*跳過讀序列號*/
- DS18B20_WR(0x44); //*啟動溫度轉(zhuǎn)換*/
- DS18B20_RST();
- DS18B20_WR(0xcc); //*跳過讀序列號*/
- DS18B20_WR(0xbe); //*讀取溫度*/
- a=DS18B20_RD();
- b=DS18B20_RD();
- Tvalue=b;
- Tvalue<<=8; //
- Tvalue=Tvalue|a;
- if(Tvalue<0x0fff)
- Tflag=0;
- else
- {
- Tvalue=~Tvalue+1;
- Tflag=1;
- }
- Tvalue=Tvalue*(0.625);//溫度值擴大10倍,精確到1位小數(shù)
- return(Tvalue);
- }
- /****************溫度值顯示***************/
- void DS1820disp()
- {
- b=Tvalue/100%10;//十位數(shù)
- s=Tvalue/10%10; //個位數(shù)
- g=Tvalue%10; //小數(shù)位
- t=b|s;//t中是溫度的整數(shù)部分
- if(Tflag==0)
- q=Tvalue/1000; //正溫度不顯示符號,顯示百位數(shù)
- else
- q=10;//負溫度顯示負號:-
-
- }
- /******************************DS18B20程序(定義結(jié)束)***************************************/
- /*****************主函數(shù)********************/
- void main()
- {
- P0=0xff;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
數(shù)字溫度計.rar
(67.52 KB, 下載次數(shù): 36)
2017-11-20 14:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|