進入設置模式按數(shù)字鍵可直接修改上下限
單片機源程序如下:
- /*
- *Target:功能描述
- * 模擬“溫度采集與控制裝置”用于實現(xiàn)溫度的實時監(jiān)測與控制。單片機采集DS18B20溫度傳感器
- * 的輸出信號,并送到數(shù)碼管進行顯示;通過傳感器得到的溫度數(shù)據(jù)將與用戶設定溫度上限、下
- * 限做比較,再由單片機啟動或控制報警電路。
- *Author:作者:重口辣泡菜
- *Date:日期: 2018/7/1
- */
- #include <reg52.h>
- #include "display.h"
- #include "delay.h"
- #include "18b20.h"
- #include "key.h"
- /*******************函數(shù)申明**********************/
- void Timer0_Init(void);
- void Temp_deal(void);
- void Display_mod1(void);
- void Display_mod2(void);
- void key_deal(void);
- /*******************led引腳**********************/
- sbit led1=P2^7;
- sbit led2=P2^6;
- /*******************數(shù)碼管顯示變量**********************/
- unsigned char mod,level,m=3,n=0,p=2,q=0,i;
- /*******************溫度讀取變量**********************/
- unsigned int Temp_read_value,temp;
- unsigned char Tmax=30,Tmin=20;
- bit ReadTempFlag;
- bit clearflag;
- /*******************按鍵值變量**********************/
- unsigned char key_read_value,key_value;
- unsigned char templimit[8];
- /*******************主函數(shù)**********************/
- void main()
- {
- Timer0_Init();
- while(1)
- {
- Temp_deal();
- if( mod==0 ) Display_mod1();
- else Display_mod2();
- key_deal();
- }
- }
- void key_deal(void) //按鍵消息處理
- {
- key_read_value = key_read();
- if( key_read_value!=0xFF )
- {
- switch( key_read_value )
- {
- case 13: mod++; if( mod==2 ) mod = 0; break;
- case 14: clearflag = 1; break;
- case 0: key_value = 0; i++; break;
- case 1: key_value = 1; i++; break;
- case 2: key_value = 2; i++; break;
- case 3: key_value = 3; i++; break;
- case 4: key_value = 4; i++; break;
- case 5: key_value = 5; i++; break;
- case 6: key_value = 6; i++; break;
- case 7: key_value = 7; i++; break;
- case 8: key_value = 8; i++; break;
- case 9: key_value = 9; i++; break;
- default:
- break;
- }
- }
- }
- void Temp_deal(void)
- {
- if( ReadTempFlag==1 ) //18b20讀取溫度值處理
- {
- ReadTempFlag = 0;
- Temp_read_value = ReadTemperature();
- temp = Temp_read_value>>4;
- }
- if( temp<Tmin ) level = 1; //溫度區(qū)間判斷
- else if( (temp>=Tmin)&&(temp<=Tmax) ) level = 2;
- else if( temp>Tmax ) level = 3;
- if( Tmin>Tmax ) led2=0; //下限大于上限led2常亮提示
- else led2=1;
- }
- void Display_mod1(void) //正常顯示狀態(tài)
- {
- TempData[0] = 0x40;
- TempData[1] = tabledu[ level ];
- TempData[2] = 0x40;
- TempData[6] = tabledu[ (temp%100)/10 ];
- TempData[7] = tabledu[ (temp%100)%10 ];
- }
- void Display_mod2(void) //設置模式
- {
- TempData[0] = 0x40;
- TempData[1] = tabledu[ Tmax/10 ];
- TempData[2] = tabledu[ Tmax%10 ];
- TempData[5] = 0x40;
- TempData[6] = tabledu[ Tmin/10 ];
- TempData[7] = tabledu[ Tmin%10 ];
- if( (mod==1)&&(dispcom==1)&&(i==1) ) m = key_value; //按鍵值0~9改變上下限,設置模式下才能更改
- if( (mod==1)&&(dispcom==2)&&(i==2) ) n = key_value;
- if( (mod==1)&&(dispcom==6)&&(i==3) ) p = key_value;
- if( (mod==1)&&(dispcom==7)&&(i==4) ) q = key_value;
-
- if( (mod==1)(clearflag==1) ) //輸入錯誤按下清零
- { clearflag = 0; m = 0; n = 0; p = 0; q = 0; i=0; }
-
- Tmax = (10*m)+n; Tmin = (10*p)+q;
- }
- void Timer0_Init(void)
- {
- TMOD = 0x01;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void Timer0(void) interrupt 1
- {
- static unsigned int count,ledcount;
- TH0 = (65536-2200)/256;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
簡易18b20溫度采集與控制.zip
(53.51 KB, 下載次數(shù): 47)
2018-7-1 14:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|