#include "timer.h"
#include "lcd.h"
#include "ds1302.h"
#include "dht11.h"
u8 year_shi,year_ge;
u8 month_shi,month_ge;
u8 day_shi,day_ge;
u8 hour_shi,hour_ge;
u8 min_shi,min_ge;
u8 sec_shi,sec_ge;
u8 smogH = 50;
u8 flag_receive = 0;
uchar set_flag = 0;
u8 set_time_flag = 0;
unsigned char idata year_flag = 0;
unsigned char idata month_flag = 0;
unsigned char idata day_flag = 0;
unsigned char idata hour_flag = 0;
unsigned char idata min_flag = 0;
unsigned char idata sec_flag = 0;
unsigned char idata year_sub_flag = 0;
unsigned char idata month_sub_flag = 0;
unsigned char idata day_sub_flag = 0;
unsigned char idata hour_sub_flag = 0;
unsigned char idata min_sub_flag = 0;
unsigned char idata sec_sub_flag = 0;
u8 key_state = 0;
u8 display_change = 0;
//-----------------------------------------------
/* define constants */
#define FOSC 11059200L
#define T1MS (65536-FOSC/12/1000) //1ms timer calculation method in 12T mode
/* define variables */
uint count = 20;
//按键扫描函数
//****************************************************
unsigned char key_scan(void)
{
if(key_set == 0 || key1 == 0 || key2 == 0 || key3 == 0)
{
delay_ms(15);
if(key_set == 0) {while(!key_set); return 1;}
else if(key1 == 0) {while(!key1); return 2;}
else if(key2 == 0) {while(!key2); return 3;}
else if(key3 == 0) {while(!key3); return 4;}
}
return 0;
}
void timer_init(void)
{
TMOD |= 0x01; //set timer0 as mode1 (16-bit)
TL0 = T1MS; //initial timer0 low byte
TH0 = T1MS >> 8; //initial timer0 high byte
TR0 = 1; //timer0 start running
ET0 = 1; //enable timer0 interrupt
EA = 1; //open global interrupt switch
}
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1
{
u8 key = 0;
static u16 time_num = 0;
TL0 = T1MS; //reload timer0 low byte
TH0 = T1MS >> 8; //reload timer0 high byte
time_num++;
TR0 = 0;
// if(time_num >= 1000)
// {
// DHT11_Read_Data(&temp,&humi);
// LcdDisplayString(8, 0, rec_dat);
// time_num = 0;
// }
if (count-- == 0) //1ms * 1000 -> 1s
{
count = 2; //reset counter
key = key_scan(); //按键扫描,判断哪个按键被按下
if(key == 1)
{
set_flag++;
if(set_flag >= 3) set_flag = 0;
display_change = 1; //清屏
}
if(set_flag == 1) /* 1:调时间 2:调MQ4阈值 */
{
if(key == 2)
{
set_time_flag++;
if(set_time_flag >= 7)
{
set_time_flag = 0;
}
}
switch(set_time_flag)
{
case 1:
if(key == 3)
{
year_shi = TIME[6]/16; //十位
year_ge = ((TIME[6])&0x0f); //个位
if(year_flag == 0)
{
if(year_shi == 0x09 && year_ge == 0x09)
{
TIME[6] = 0x99;
}
else
{
if(year_ge == 0x09)
{
year_flag = 1;
}
else TIME[6]+=1;
}
}
if(year_flag == 1)
{
if(year_shi == 9) TIME[6] = 0x99;
else
{
year_shi += 1;
year_ge = 0;
TIME[6] = year_shi * 16 + year_ge;
year_flag = 0;
}
}
key_state = 1;
}
if(key == 4)
{
year_shi = TIME[6]/16; //十位
year_ge = ((TIME[6])&0x0f); //个位
if(year_sub_flag == 0)
{
if(year_shi == 0x02 && year_ge == 0x02)
{
TIME[6] = 0x22;
}
else
{
if(year_ge == 0x00)
{
year_sub_flag = 1;
}
else TIME[6]-=1;
}
}
if(year_sub_flag == 1)
{
year_shi -= 1;
year_ge = 9;
TIME[6] = year_shi * 16 + year_ge;
year_sub_flag = 0;
}
key_state = 1;
}
break;
case 2:
if(key == 3)
{
month_shi = TIME[4]/16; //十位
month_ge = ((TIME[4])&0x0f); //个位
if(month_flag == 0)
{
if(month_shi == 0x01 && month_ge == 0x02)
{
TIME[4] = 0x12;
}
else
{
if(month_ge == 0x09)
{
month_flag = 1;
}
else TIME[4]+=1;
}
}
if(month_flag == 1)
{
month_shi += 1;
month_ge = 0;
TIME[4] = month_shi * 16 + month_ge;
month_flag = 0;
}
key_state = 1;
}
if(key == 4)
{
month_shi = TIME[4]/16; //十位
month_ge = ((TIME[4])&0x0f); //个位
if(month_sub_flag == 0)
{
if(month_shi == 0x00 && month_ge == 0x01)
{
TIME[4] = 0x01;
}
else
{
if(month_ge == 0x00)
{
month_sub_flag = 1;
}
else TIME[4]-=1;
}
}
if(month_sub_flag == 1)
{
month_shi -= 1;
month_ge = 9;
TIME[4] = month_shi * 16 + month_ge;
month_sub_flag = 0;
}
key_state = 1;
}
break;
case 3:
if(key == 3)
{
day_shi = TIME[3]/16; //十位
day_ge = ((TIME[3])&0x0f); //个位
if(day_flag == 0)
{
if(day_shi == 0x03 && day_ge == 0x01)
{
TIME[3] = 0x31;
}
else
{
if(day_ge == 0x09)
{
day_flag = 1;
}
else TIME[3]+=1;
}
}
if(day_flag == 1)
{
day_shi += 1;
day_ge = 0;
TIME[3] = day_shi * 16 + day_ge;
day_flag = 0;
}
key_state = 1;
}
if(key == 4)
{
day_shi = TIME[3]/16; //十位
day_ge = ((TIME[3])&0x0f); //个位
if(day_sub_flag == 0)
{
if(day_shi == 0x00 && day_ge == 0x01)
{
TIME[3] = 0x01;
}
else
{
if(day_ge == 0x00)
{
day_sub_flag = 1;
}
else TIME[3]-=1;
}
}
if(day_sub_flag == 1)
{
day_shi -= 1;
day_ge = 9;
TIME[3] = day_shi * 16 + day_ge;
day_sub_flag = 0;
}
key_state = 1;
}
break;
case 4:
if(key == 3)
{
hour_shi = TIME[2]/16; //十位
hour_ge = ((TIME[2])&0x0f); //个位
if(hour_flag == 0)
{
if(hour_shi == 0x02 && hour_ge == 0x03)
{
TIME[2] = 0x23;
}
else
{
if(hour_ge == 0x09)
{
hour_flag = 1;
}
else TIME[2]+=1;
}
}
if(hour_flag == 1)
{
hour_shi += 1;
hour_ge = 0;
TIME[2] = hour_shi * 16 + hour_ge;
hour_flag = 0;
}
key_state = 1;
}
if(key == 4)
{
hour_shi = TIME[2]/16; //十位
hour_ge = ((TIME[2])&0x0f); //个位
if(hour_sub_flag == 0)
{
if(hour_shi == 0x00 && hour_ge == 0x00)
{
TIME[2] = 0x00;
}
else
{
if(hour_ge == 0x00)
{
hour_sub_flag = 1;
}
else TIME[2]-=1;
}
}
if(hour_sub_flag == 1)
{
hour_shi -= 1;
hour_ge = 9;
TIME[2] = hour_shi * 16 + hour_ge;
hour_sub_flag = 0;
}
key_state = 1;
}
break;
case 5:
if(key == 3)
{
min_shi = TIME[1]/16; //十位
min_ge = ((TIME[1])&0x0f); //个位
if(min_flag == 0)
{
if(min_shi == 0x05 && min_ge == 0x09)
{
TIME[1] = 0x59;
}
else
{
if(min_ge == 0x09)
{
min_flag = 1;
没有合适的资源?快使用搜索试试~ 我知道了~
基于单片机的天然气气体泄露警报器设计
共55个文件
h:10个
obj:9个
c:9个
需积分: 0 2 下载量 39 浏览量
2023-09-25
11:11:35
上传
评论
收藏 5.75MB ZIP 举报
温馨提示
基于单片机的天然气气体泄露警报器设计
资源推荐
资源详情
资源评论
收起资源包目录
基于单片机的天然气气体泄露警报器设计.zip (55个子文件)
程序源码
dht11.h 350B
delay.OBJ 2KB
GPRS.__i 53B
dht11.LST 6KB
template.uvgui.dell 90KB
lcd.h 1KB
delay.LST 2KB
timer.OBJ 18KB
ds1302.h 779B
lcd.c 4KB
adc0832.LST 4KB
ds1302.LST 10KB
template.lnp 142B
timer.LST 37KB
ds1302.OBJ 11KB
ds1302.c 5KB
template.M51 59KB
template.build_log.htm 2KB
uart.h 170B
template 60KB
main.OBJ 14KB
adc0832.h 292B
GPRS.c 5KB
template_uvproj.bak 15KB
adc0832.OBJ 6KB
template.uvgui.lhsmd 97KB
lcd.OBJ 6KB
timer.c 10KB
lcd.LST 8KB
main.LST 9KB
timer.__i 54B
ds1302.__i 55B
common.h 141B
dht11.OBJ 6KB
main.h 349B
template_uvopt.bak 57KB
dht11.c 3KB
GPRS.h 795B
uart.LST 3KB
GPRS.OBJ 15KB
template.uvproj 15KB
delay.h 135B
uart.c 793B
timer.h 202B
dht11.__i 54B
delay.c 585B
template.hex 12KB
uart.OBJ 4KB
template.plg 0B
GPRS.LST 12KB
main.c 4KB
adc0832.c 1KB
template.uvopt 7KB
原理图.SchDoc 383KB
PCB.PcbDoc 6.37MB
共 55 条
- 1
资源评论
lantiandianzi
- 粉丝: 41
- 资源: 53
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功