仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include "reg52.h"
- #include "display.h"
- #include "adc.h"
- sbit key1 =P1^0;
- sbit key2 =P1^1;
- sbit key3 =P1^2;
- sbit buzz =P1^3;
- sbit p=P3^6;
- sbit j=P3^7;
- unsigned char fresh;
- unsigned char Setflag;
- unsigned char Setsdup=37;//设置的湿度
- unsigned char Setsddown=27;//设置的湿度
- unsigned char Hum;
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
- EA=1; //总中断打开
- ET0=1; //定时器中断打开
- TR0=1; //定时器开关打开
- }
- void main()
- {
- Init_Timer0();//初始化定时器
- while(1)
- {
- Hum=adc0832(0);
- if(Setflag==0)Display_num2(Hum,fresh);//显示温度
- if(Setflag==1)Display_num2(Setsdup,fresh);//显示设定的值
- if(Setflag==2)Display_num2(Setsddown,fresh);//显示设定的值
- if(Hum>Setsdup)
- {
- buzz=0;
- p=0;
- j=1;
- }
- else if(Setsddown>Hum)
- {
- buzz=0;
- j=0;
- p=1;
- }
- else
- {
- buzz=1;
- j=1;
- p=1;
- }
- }
- }
- void Timer0_isr(void) interrupt 1
- {
- static unsigned char key1num;//按键一按下标志
- static unsigned char key2num;//按键二按下标志
- static unsigned char key3num;//按键三按下标志
- static unsigned char num;
- TH0=(65536-20000)/256; //重新赋值 2ms
- TL0=(65536-20000)%256;
-
- num++;
- if(num>18)
- {
- num=0;
- if(Setflag)fresh=!fresh;
- }
- if(key1==0)key1num=1;
- else if(key1num==1)
- {
- key1num=0;
- Setflag++;
- if(Setflag==3)Setflag=0;
- if(Setflag==0)fresh=0;
- }
- if(key2==0)key2num=1;
- else if(key2num==1)
- {
- key2num=0;
- if(Setflag==1)if(Setsdup<100)Setsdup++;
- if(Setflag==2)if(Setsddown<Setsdup)Setsddown++;
- }
- if(key3==0)key3num=1;
- else if(key3num==1)
- {
- key3num=0;
- if(Setflag==1)if(Setsdup>Setsddown)Setsdup--;
- if(Setflag==2)if(Setsddown>0)Setsddown--;
- }
- }
复制代码
所有资料51hei提供下载:
粮仓湿度检测.zip
(81.13 KB, 下载次数: 53)
|