1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
/*********************************************************************************
* 实验:DHT11温湿度传感器(按键有些迟钝)
* 步骤及现象:程序下载前,选择stc-isp的IRC频率:12MHz。下载完成后,1602第
* 一行显示:“Temperature:30C”第二行显示:“Humidity :09RH”。这时
* 按按键0(sw1),进入温湿度上下限设置界面,1602第一行显示:“TH:30 TL:15 1 ”
* 第二行显示:“HH:15 HL:05 ”,温度上下限(TH、TL),湿度上下限(HH、HL)。
* 第一行最右侧那个1表示此时可以对温度上限进行设置(按按键2(sw9)加,按按键3
* (sw13)减);这时按按键1(sw5),第一行最右侧1变成数字2,表示此时可以对温 度
* 下限,进行设置(加减与上同);再按按键1,这时第一行最右侧数字消失,而第二
* 行最右侧出现数字3,表示此时可以对湿度上限进行设置;接着按按键1,数字3变成
* 数字4,这时设置湿度下限。当数字是4时,再按一次按键1,退出界限设置界面;在
* 界限设置界面无论数字是几,按按键0都可以退出设置界面。
*********************************************************************************/
#include <stc8.h>
#include "1602.h"
#include "displayandset.h"
#include "key.h"
sbit beep = P1^3; // 蜂鸣器
bit flg = 0; // 清屏标志位
extern unsigned char rhh,rhl,rth,rtl,rcc; // 用于接收DHT11测得的数据
extern uchar tempH, tempL, humiH, humiL; // 用于设置温湿度上下限
void Timer0Init(void) // 5毫秒@12.000MHz
{
AUXR |= 0x80; // 定时器时钟1T模式
TMOD &= 0xF0; // 设置定时器模式
TL0 = 0xA0; // 设置定时初值
TH0 = 0x15; // 设置定时初值
TF0 = 0; // 清除TF0标志
TR0 = 1; // 定时器0开始计时
ET0 = 1;
EA = 1;
}
/********** 主函数 **********/
void main()
{
uchar keyvalue=16; // 用于接收键值
LCD_Init(); // 1602初始化
Timer0Init(); // 定时器0初始化
while(1)
{
keyvalue = key_scan(); // 获取按键值
if(keyvalue==0) // 按按键0,进入设置界面
setHL();
main_Display(); // 不按按键,进入显示温湿度界面
if(rhh > humiH || rhh < humiL || rth > tempH || rth < tempL) // 报警
beep = ~beep; // 蜂鸣器电平翻转
else
beep = 1;
}
}
void T0_isr() interrupt 1
{
static uchar i=0;
i++; // 进一次中断加1,5ms进一次中断
if(i == 200) // 进200次中断,即1s
{
i = 0;
flg = 1; // 清屏标志置1
}
else
flg = 0;
}
点C文件目录.jpg
全部资料51hei下载地址:
基于1602的温湿度报警系统.rar
(88.9 KB, 下载次数: 89)
|