#include "main.h"
uchar time_set[] = {0x00,0x41,0x15,0x05,0x03,0x02,0x24};
uchar time_now[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar LED[] = {0,0,0,0,0,0,0,0};
uchar SMG[] = {0,0,0,0,0,0,0,0};
uchar dot[] = {0,0,0,0,0,0,0,0};
uchar temp_set = 30;
uchar temp = 0,temp_old = 0,temp_max = 0;
uchar hum = 0,hum_old = 0,hum_max = 0;
uint hum_count = 0;
uint hum_arr = 0;
uint temp_count = 0;
uint temp_arr = 0;
uchar hum_error = 0;
uchar hum_num = 0;
uchar temp_num = 0;
uchar key;
uchar trigger = 0;
uchar display_state1 = 0;
uchar display_state2 = 0;
uchar display_state3 = 0;
uchar flag = 1;
uchar trigger_flag;
uchar hum_pro()
{
uchar dat;
if(fre < 200 || fre >2000)
{
hum_error = 1;
dat = 0;
}
else
{
hum_error = 0;
dat = (int)((2/45.0)*fre +(2/9.0));
}
return dat;
}
void data_pro()
{
trigger = pcf8591_read(0x01);
if(trigger < 20 && flag == 1 && display_state3 == 0)
{
flag = 0;
display_state3 = 1;
hum_old = hum;
temp_old = temp;
hum = hum_pro();
temp = ds18b20_read(0);
hum_num++;
temp_num++;
if(hum_error == 1)
hum_num--;
hum_count = hum_count + hum;
if(hum_max < hum)
hum_max = hum;
if(hum_num == 0)
hum_arr = 0;
else
hum_arr = (int)(hum_count/1.0/hum_num*10);
temp_count = temp_count + temp;
if(temp_max < temp)
temp_max = temp;
if(temp_num == 0)
temp_arr = 0;
else
temp_arr = (int)(temp_count/1.0/temp_num*10);
}
else if(trigger > 100 && flag == 0)
{
flag = 1;
}
}
void time_display()
{
ds1302_read();
SMG[7] = time_now[0]%16;
SMG[6] = time_now[0]/16;
SMG[5] = 17;
SMG[4] = time_now[1]%16;
SMG[3] = time_now[1]/16;
SMG[2] = 17;
SMG[1] = time_now[2]%16;
SMG[0] = time_now[2]/16;
dot[6] = 0;
}
void echo_temp()
{
SMG[0] = 12;
if(temp_num == 0)
{
SMG[1] = 16;
SMG[2] = 16;
SMG[3] = 16;
SMG[4] = 16;
SMG[5] = 16;
SMG[6] = 16;
SMG[7] = 16;
}
else
{
SMG[1] = 16;
SMG[2] = temp_max/10;
SMG[3] = temp_max%10;
SMG[4] = 17;
SMG[5] = temp_arr/100;
SMG[6] = temp_arr%100/10;
dot[6] = 1;
SMG[7] = temp_arr%10;
}
}
void echo_hum()
{
SMG[0] = 18;
if(temp_num == 0)
{
SMG[1] = 16;
SMG[2] = 16;
SMG[3] = 16;
SMG[4] = 16;
SMG[5] = 16;
SMG[6] = 16;
SMG[7] = 16;
}
else
{
SMG[1] = 16;
SMG[2] = hum_max/10;
SMG[3] = hum_max%10;
SMG[4] = 17;
SMG[5] = hum_arr/100;
SMG[6] = hum_arr%100/10;
dot[6] = 1;
SMG[7] = hum_arr%10;
}
}
void echo_time()
{
SMG[0] = 15;
SMG[1] = temp_num/10;
SMG[2] = temp_num%10;
if(temp_num == 0)
{
SMG[3] = 16;
SMG[4] = 16;
SMG[5] = 16;
SMG[6] = 16;
SMG[7] = 16;
}
else
{
SMG[3] = time_now[2]/16;
SMG[4] = time_now[2]%16;
SMG[5] = 17;
SMG[6] = time_now[1]/16;
SMG[7] = time_now[1]%16;
}
dot[6] = 0;
}
void parameter()
{
SMG[0] = 19;
SMG[1] = 16;
SMG[2] = 16;
SMG[3] = 16;
SMG[4] = 16;
SMG[5] = 16;
SMG[6] = temp_set/10;
SMG[7] = temp_set%10;
dot[6] = 0;
}
void temp_hum_dispaly()
{
SMG[0] = 14;
SMG[1] = 16;
SMG[2] = 16;
SMG[3] = temp/10;
SMG[4] = temp%10;
SMG[5] = 17;
if(hum_error == 1)
{
SMG[6] = 10;
SMG[7] = 10;
}
else
{
SMG[6] = hum/10;
SMG[7] = hum%10;
}
dot[6] = 0;
}
void led_pro()
{
if(display_state1 == 0 && display_state3 == 0)
LED[0] = 1;
else
LED[0] = 0;
if(display_state1 == 1 && display_state3 == 0)
LED[1] = 1;
else
LED[1] = 0;
if(display_state3 == 1)
LED[2] = 1;
else
LED[2] = 0;
if(temp > temp_set)
{
if(led_flag == 0)
LED[3] = 1;
else
LED[3] = 0;
}
else
LED[3] = 0;
if(hum_error == 1)
LED[4] = 1;
else
LED[4] = 0;
if(temp_num >= 2)
{
if(hum > hum_old && temp > temp_old)
LED[5] = 1;
else
LED[5] = 0;
}
else
LED[5] = 0;
led(LED);
}
void smg_pro()
{
if(display_state3 == 0)
{
switch(display_state1)
{
case 0:time_display();
break;
case 1:
{
if(display_state2 == 0)
echo_temp();
else if(display_state2 == 1)
echo_hum();
else if(display_state2 == 2)
echo_time();
}
break;
case 2:parameter();
break;
}
}
else
temp_hum_dispaly();
display(SMG,dot);
}
void key_pro()
{
key = key_scan();
switch(key)
{
case 1:display_state2 = (++display_state2)%3;
break;
case 2:
{
if(display_state1 == 2)
temp_set--;
if(temp_set == 255)
temp_set = 99;
}
break;
case 3:display_state1 = (++display_state1)%3;display_state2 = 0;
break;
case 4:
{
if(display_state1 == 2)
temp_set++;
if(temp_set == 100)
temp_set = 0;
}
break;
}
if(clear == 1)
{
temp_num = 0;
temp_max = 0;
temp_count = 0;
temp_old = 0;
temp_arr = 0;
hum_num = 0;
hum_max = 0;
hum_count = 0;
hum_old = 0;
hum_arr = 0;
temp_set = 30;
clear = 0;
}
}
void main()
{
sys_init();
ds1302_init();
Timer0Init_count();
Timer1Init();
temp = ds18b20_read(0);
delayus(750);
temp = 0;
EA = 1;
while(1)
{
led_pro();
smg_pro();
key_pro();
data_pro();
}
}
第十四届蓝桥杯单片机程序(完整工程文件)
需积分: 0 43 浏览量
2024-03-17
19:23:29
上传
评论
收藏 81KB 7Z 举报
symzap
- 粉丝: 0
- 资源: 6
最新资源
- 【老生谈算法】matlab实现非线性整数规划的遗传算法.doc
- MTB020C04RQ8-VB一款N+P-Channel沟道SOP8的MOSFET晶体管参数介绍与应用说明
- MTA40B03Q8-VB一款2个P-Channel沟道SOP8的MOSFET晶体管参数介绍与应用说明
- data.json全国省市区县 json数据
- MTA100N10KRN3-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Unity 单机版斗地主游戏源码
- MacOs Sonoma懒人版镜像包附VM-unlock最新版
- Unity 插件之移动端影子生成插件(Mobile Fast Shadow 1.0.6)
- MTA025N03KSN3-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MT4953ACTR-VB一款2个P-Channel沟道SOP8的MOSFET晶体管参数介绍与应用说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈