|
單片機(jī)做的溫度報警:
電路圖如下
- /*
- 功能:溫度采集顯示和可調(diào)時鐘顯示,時鐘用中斷法實(shí)現(xiàn)
- s1:選擇要調(diào)節(jié)的時、分、秒位
- s2:時、分、秒加一
- s3:時、分、秒減一
- */
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar num,s1num,count;
- uchar shi,fen,miao;
- sbit rs=P2^0;
- sbit e=P2^1;
- sbit s1=P3^0;
- sbit s2=P3^1;
- sbit s3=P3^2; //按鍵定義
- sbit DQ =P2^2; //定義通信端口
- sbit beep=P1^0;
- bit flag;
- uchar code table1[]="Time: 00:00:00";
- uchar code table2[]="Temperature: 'C";//1602初始化字符
- void alarm(uchar num);
- void delay(uint z)//延時子函數(shù)
- {
- uint x,y;
- for(x=z; x>0; x--)
- for(y=110;y>0;y--);
- }
- #include<1602.h>
- #include<18b20.h>
- #include<clock_set.h>
- void main()
- {
- uchar temp;
- init_1602();
- while(1)
- { delay(500); //去除0秒和1秒之間顯示間隔跟正常1秒間隔相差過大
- if(miao==0) //每分鐘進(jìn)行溫度采集一次
- {
- TR0=0; //進(jìn)入溫度采集后,關(guān)閉定時器
- flag=1; //flag=1,標(biāo)志進(jìn)入溫度采集模式
- write_com(0x80+0x40+13);
- write_dat(0x30+1); //消除不顯示數(shù)字1
- temp=ReadTemperature(); //讀取DS18B20的溫度值
- alarm(temp);
- write_1602(12,temp); //向1602中寫入溫度值
- TR0=1; //溫度采集完成后,打開定時器
- delay(100);//等待miao不等零,跳出循環(huán)
- }
- flag=0; //flag=0,標(biāo)志在時鐘顯示模式下
- keyscan(); //調(diào)用鍵盤掃描子程序,用以調(diào)整時間
- }
- }
- void timer0() interrupt 1//定時器1的中斷服務(wù)程序,并向1602中寫時分秒顯示時間
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- count++;
- if (count==18)
- {
- count=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)
- {
- shi=0;
- }
- if(flag==0) //flag=0,標(biāo)志在時鐘顯示模式下,然后才顯示時間
- write_1602(6,shi);
- }
- if(flag==0)
- write_1602(9,fen);
- }
- if(flag==0)
- write_1602(12,miao);
- }
- }
- void alarm(uchar num) //報警
- {
- if(40>=num)
- beep=1; //在溫度允許范圍,不報警
- else
- beep=~beep;
- return(0);
- }
復(fù)制代碼
|
-
-
Desktop.zip
2015-12-9 12:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
21.68 KB, 下載次數(shù): 28, 下載積分: 黑幣 -5
評分
-
查看全部評分
|