} }
}
show_time(); //液晶显示数据
if(flag==2)//100后flag为2,进行比较 {
if(a==U8T_data_H&&b==U8RH_data_H) while(a==U8T_data_H&&b==U8RH_data_H); flag=0; Setkey(); jiaoshui();
//扫描各功能键 //湿度小于38%
} if(ff<38)K1=0;
P1=0x00; PH(); }
4.3 12864 LCD显示子程序设计
12864LCD显示屏有着自己的指令集,基本指令集有11条指令。它的指令是通过选择RS的高低电平来区别所从DB0~DB7输入的是数据还是指令, RW的高低电平来选择对现实屏是读操作还是写操作。CS1、CS2不同组合代表选择左半屏或者右半屏。数据或者指令的代码从DB0~DB7输入。对12864LCD写程序的步骤如下:
(1)开启两个半屏 (2)清左半屏和右半屏 (3)选择左半屏 (4)设置页和起始行 (5)写左半屏
显示屏显示子程序流程图如图4-2所示:
30
开始显示屏初始化清屏选择左或右半屏设置起始行、起始列写字否半屏写完?是结束
图4-2 显示屏显示子程序流程图
显示屏显示子程序: void show_time() {
if(pp==2) {
gotoxy(1,0);
print(\ \ gotoxy(2,0);
print(\系统初始化中, \显示时间 gotoxy(3,0);
print(\请稍候.... \显示日期
31
gotoxy(4,0);
print(\ \ RH(); delay1(3000); } else {
DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据 TimeToStr(&CurrentTime); //时间数据转换液晶字符 DateToStr(&CurrentTime); //日期数据转换液晶字符 if(pp==0) {
gotoxy(2,0); print(\时间:\ gotoxy(2,3);
print(CurrentTime.TimeString); //显示时间 gotoxy(1,3);
print(CurrentTime.DateString); //显示日期 gotoxy(1,0); print(\星期\ gotoxy(1,2);
print(week_value); //显示星期 } if(pp==1) {
gotoxy(1,0);
print(\智能灌溉系统 \ gotoxy(2,0);
print(\电机状态:工作 \ }
gotoxy(3,0); print(\温湿度:\
32
gotoxy(3,4); //液晶字符显示位置 write_dht11(U8T_data_H); print(dht_11); gotoxy(3,5); print(\℃\ /*gotoxy(3,5); print(\湿度:\ //gotoxy(4,2); gotoxy(3,6);
write_dht11(U8RH_data_H); print(dht_11); gotoxy(3,7); print(\ if(ft==1) {gotoxy(4,0);
print(\值:正常!\
} if(ft==2) {gotoxy(4,0);
print(\值:异常!\ } }
经过调试,本设计实现基本功能,本设计采用闭环控制,温湿度传感器一直采集实时数据,若所测湿度高于警戒值时,步进电机停止,液晶显示屏会实时显示此时温度和湿度,并显示时钟,且此时土壤PH值设定为正常,液晶屏显示状态如图4-3所示。
}
mdelay(500); //扫描延时
33
图4-3湿度大于警戒值
若所测湿度小于警戒值时,电机就会自启动,如图4-4所示,直到所测湿度高于警戒值之后,步进电机就会自动停止,且此时PH值呈碱性,显示为异常。
图4-4湿度小于警戒值
34