进入设置模式按数字键可直接修改上下限
单片机源程序如下:
- /*
- *Target:功能描述
- * 模拟“温度采集与控制装置”用于实现温度的实时监测与控制。单片机采集DS18B20温度传感器
- * 的输出信号,并送到数码管进行显示;通过传感器得到的温度数据将与用户设定温度上限、下
- * 限做比较,再由单片机启动或控制报警电路。
- *Author:作者:重口辣泡菜
- *Date:日期: 2018/7/1
- */
- #include <reg52.h>
- #include "display.h"
- #include "delay.h"
- #include "18b20.h"
- #include "key.h"
- /*******************函数申明**********************/
- 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;
- /*******************数码管显示变量**********************/
- 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];
- /*******************主函数**********************/
- 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; //温度区间判断
- 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) //正常显示状态
- {
- 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, 下载次数: 47)
|