仿真原理圖如下(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, 下載次數(shù): 53)
2021-5-1 17:00 上傳
點擊文件名下載附件
|