#include<public.h>
#include<lcd1602.h>
#include<ds18b20.h>
#include<DAT.h>
#include<XPT2046.h>
sbit k1=P3^3;
sbit k2=P2^1;
sbit k3=P2^2;
sbit beep=P1^1;
sbit led1=P3^5;
sbit led2=P3^0;
sbit led3=P3^4;
sbit moto=P1^0;
u1 a,c;
u1 mode,flag;
u1 miao,num1;
u2 guangzhao;
u2 guangzhaoH=1600;
char temph=20,templ=5;
char humih=80,humil=20;
u1 code num[10]="0123456789";
u1 temp,humi,tempvalue;
u1 code str1[]="T:"; //温度
u1 code str2[]="H:"; //湿度
u1 code str3[]="Error";
u1 code str4[]="Success ";
u1 code str5[]="%RH";
u1 code str6[]="TempH:"; //设定温度上限显示
u1 code str7[]="TempL:"; //设定温度下限显示
u1 code str8[]="HumiH:"; //设定湿度上限显示
u1 code str9[]="HumiL:";
u1 code str10[]="G:";
u1 code str11[]="GuangZH:"; //设定湿度上限显示
u1 code str13[]="lux";
u1 code sy1[]="ICCS ";
u1 code sy2[]="1058";
u1 ds18b20_read_temp()
{
u1 b;
ds18b20_reset(); //复位
ds18b20_check();
ds18b20_write_byte(0xcc);//写入地址
ds18b20_write_byte(0x44); //开始转化命令
delay10us(100);
ds18b20_reset();//复位
ds18b20_check();
ds18b20_write_byte(0xcc);//写入地址
ds18b20_write_byte(0xbe);//写入存储器命令
a=ds18b20_read_byte();//读取温度低字节
b=ds18b20_read_byte();
b<<=4;
c=b&0x80;
b+=(a&0xf0)>>4;
a=a&0x0f;
return b;
}
u1 DAT_read_date(u1 *temp,u1 *humi)
{
u1 buf[5];
u1 i;
DAT_rest();
if(DAT_check()==0)
{
for(i=0;i<5;i++)
{
buf[i]=DAT_read_byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=buf[0];
*temp=buf[2];
}
}
else return 1;
return 0;
}
void sound()
{
u1 i=50;
while(i--)
{
beep=!beep;
delay1ms(2);
}
}
void key_scan()
{
if(k1==0)
{
delay1ms(10);
if(k1==0)
{
mode++;
if(mode==6)mode=0;
LCD1602_write_com(0x01);
}
while(!k1);
}
if(mode==1)
{
if(k2==0)
{
delay1ms(10);
if(k2==0)
{
temph++;
if(temph>=80)temph=80;
}
while(!k2);
}
if(k3==0)
{
delay1ms(10);
if(k3==0)
{
temph--;
if(temph<=0)temph=0;
}
while(!k3);
}
}
if(mode==2)
{
if(k2==0)
{
delay1ms(10);
if(k2==0)
{
templ++;
if(templ>=80)templ=80;
}
while(!k2);
}
if(k3==0)
{
delay1ms(10);
if(k3==0)
{
templ--;
if(templ<=0)templ=0;
}
while(!k3);
}
}
if(mode==4)
{
if(k2==0)
{
delay1ms(10);
if(k2==0)
{
humil++;
if(humil>=80)humil=80;
}
while(!k2);
}
if(k3==0)
{
delay1ms(10);
if(k3==0)
{
humil--;
if(humil<=0)humil=0;
}
while(!k3);
}
}
if(mode==5)
{
if(k2==0)
{
delay1ms(10);
if(k2==0)
{
guangzhaoH++;
if(guangzhaoH>=2300)guangzhaoH=2300;
}
while(!k2);
}
if(k3==0)
{
delay1ms(10);
if(k3==0)
{
guangzhaoH--;
if(guangzhaoH<=0)guangzhaoH=0;
}
while(!k3);
}
}
}
void lcd1602_inti_display()
{
u1 i;
LCD1602_write_com(0x80);
for(i=0;i<2;i++)
{
LCD1602_write_dat(str1[i]);
}
LCD1602_write_com(0xc0);
for(i=0;i<2;i++)
{
LCD1602_write_dat(str2[i]);
}
LCD1602_write_com(0xc8);
for(i=0;i<2;i++)
{
LCD1602_write_dat(str10[i]);
}
}
void baojinpros()
{
if((tempvalue>=temph)||(humi>=humih))
{
sound();
moto=1;
}
if(guangzhao<1200)
{
sound();
}
if(guangzhao<1100)
{
led1=0;
led2=0;
led3=0;
}
else if(guangzhao<1300)
{
led1=0;
led2=0;
led3=1;
}
else if(guangzhao<1800)
{
led1=0;
led2=1;
led3=1;
}
else
{
led1=1;
led2=1;
led3=1;
}
if((tempvalue<=templ)||(humi<=humil))
{
moto=0;
}
if((tempvalue>templ)&&(tempvalue<temph)&&(humi>humil)&&(humi<humih))
{
moto=0;
}
}
void time_inti()
{
TMOD|=0X01;
TH0=0XFC;
TL0=0X18;
ET0=1;
EA=1;
TR0=1;
}
void main()
{
u2 i=0;
led1=1;
led2=1;
led3=1;
moto=0;
LCD1602_inti();
time_inti();
while(miao<=3)
{
LCD1602_write_com(0x1c);
for(i=0;i<13;i++)
{
LCD1602_write_com(0x80+i);
LCD1602_write_dat(sy1[i]);
}
for(i=0;i<4;i++)
{
LCD1602_write_com(0x80+0x40+i);
LCD1602_write_dat(sy2[i]);
}
delay1ms(300);
}
LCD1602_inti();
while(DAT_inti())
{
for(i=0;i<5;i++)
{
LCD1602_write_com(0x80+i);
LCD1602_write_dat(str3[i]);
}
}
LCD1602_write_com(0x01);
i=0;
while(1)
{
i++;
key_scan();
baojinpros();
if(i==11)
{
i=0;
data_pros();
}
delay10us(100);
}
}
void time_inti0() interrupt 1
{
static u2 i;
TH0=0XFC;
TL0=0X18;
i++;
if(i==1000)
{
i=0;
miao++;
num1++;
if(num1==2)
{
num1=0;
flag=1;
}
if(miao>=3)
{
miao=4;
}
}
}
• 9 月 20 日 8:00 竞赛正式开始。
• 参赛者必须是有正式学籍的全日制在校本、专科学生,应携带能够证明参赛者学生身份的有
效证件(如学生证)随时备查。每队严格限制 2 人。
• 参赛队必须在指定的竞赛场进行独立设计和制作,不得携带电子存储设备和手机等上网通讯
设备,不得以任何方式与他人交流,包括教师在内的非参赛队员必须回避,对违纪参赛队取
消参赛资格,按零分计算。
• 9 月 20 日 12:00 竞赛结束,离开现场,12:50 评委按照抽签顺序评测,每组出一名同学现场
演示,签字确认结果。(每个测评组 2 名专家组成)
• 作品评测过程中,只做功能演示,不与裁判员交流,裁判员以作品实际功能演示结果作为依
据。评测过程中,如遇故障,参赛队员可在一分钟内调整,每超时一分钟扣 5 分,超过 3 分
钟则评测结束。
智能农业大棚控制系统(A 平台)
一、任务
设计并制作智能农业大棚控制系统。开机后,屏幕第一行显示“ICCS”,第
二行显示“抽签号后 4 位数”(如 1085),并自下而上滚动,3 秒后停止滚动。画
出系统各组件连接图,并简要说明,画出键盘图并标注各键功能。画出全部程序流
程图。
二、基本功能要求
(1)以 12864 点阵屏作为显示终端,显示大棚温湿度(单位摄氏度、相对湿
度)、光照(单位 lux)信息;显示补光灯、鼓风机(电机模拟)工作状态(开启或
关闭)。其中大棚温湿度来自于温湿度传感器、光照来自于光敏电阻或其他传感器、
补光灯为高亮 LED 输出。
(2)温湿度数据、光照数据每隔 2 秒动态刷新;采用合理方式调整温湿度、
光照信号变化,以产生可见动态效果。
(3)当大棚温湿度高于某限定值,语音模块报警(报警内容:温湿度超
限),同时鼓风机(电机模拟)工作 5 秒并关闭;当光照低于某限定值,语音模块报
警(报警内容:光照亮度偏低),补光灯亮起,高于某限定值,补光灯灭。
三、发挥要求
(1)当补光灯亮起后,具有自动调节亮度功能,分为三档“弱、中、强”,根
据不同光照强度切换对应档位。
(2)设计键盘输入,设置室温、湿、光照限定值报警功能,并实现声、光报
警。
(3)设计 RFID 射频 IC 卡功能,可以设置卡的级别:管理卡,用户卡。刷
“管理卡”,屏幕显示管理卡,同时可以制作用户卡;刷“用户卡”,屏幕显示用户
卡。
(4)刷“用户卡”,按下功能按键,实现历史数据查询功能,可以记录 30 秒数
据(共 15 次),通过翻页等可实现数据历史查询。
无偿分享,可交流QQ1494728092