c语言自动浇花代码.docx
- 文档编号:23479593
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:19
- 大小:17.90KB
c语言自动浇花代码.docx
《c语言自动浇花代码.docx》由会员分享,可在线阅读,更多相关《c语言自动浇花代码.docx(19页珍藏版)》请在冰豆网上搜索。
c语言自动浇花代码
/***************************头文件***********************/
#include
/************************数据类型宏定义******************/
#defineucharunsignedchar
#defineuintunsignedint
#definelcdP0//液晶数据口
/***********************声明控制引脚*********************/
sbitrs=P3^0;//LCD1602控制端口
sbiten=P3^1;
sbitjh=P3^2;//继电器控制端
sbitk1=P1^0;//按键
sbitk2=P1^1;
sbitk3=P1^2;
sbitk4=P1^3;
sbitk5=P1^4;
/**************************数组定义********************/
ucharcodetable0[]="Modle:
Automatic";//用于LCD1602显示
ucharcodetable1[]="T1=12minT2=20s";
uchartable2[]="Automatic";
uchartable3[]="Manual";
uchartable4[]="00";
uchartable5[]="00";
uchartable6[]="";
/**********************s声明全局变量*******************/
uchar_50ms,t1=15,t2=30;//每50ms加一次的变量;间隔时间min;浇花时间s;
uints,T_s;//1s时间到;总定时时间
ucharflag=0,flag1=0,flag2=0,flag3=0;//时间切换标志。
自动/手动切换标志,时间间隔和浇花时间调节标志,浇花与不浇花标志
/*************************延时程序*********************/
voiddelay(uintcount)//1ms延时
{
uinti,j;
for(i=0;i for(j=0;j<120;j++); } /*************************液晶驱动程序*************************/ voidw_cmd(ucharcom)//lcd1602写命令 { rs=0; lcd=com; en=1; delay(5); en=0; } voidw_data(uchardat)//lcd1602读数据 { rs=1; lcd=dat; en=1; delay(5); en=0; } voidw_str(uchar*s)//lcd1602写字符串 { while(*s)w_data(*s++); } voidlcd_int()//lcd1602初始化 { en=0; w_cmd(0x38); w_cmd(0x0c); w_cmd(0x06); w_cmd(0x01); w_cmd(0x80+0x00); w_str(table0); w_cmd(0xc0+0x00); w_str(table1); } /*******************定时器0初始化程序******************/ voidTimer0_Init(void)//其中没ET0是为以后控制暂停用的 { TMOD=TMOD|0X01;//定时方式1 TH0=0X3C;//50ms TL0=0XB0; TR0=1; ET0=1; _50ms=0; s=0; } /*******************定时器0中断程序********************/ voidTimer0(void)interrupt1 { TR0=0;//停止计数 TH0=0X3C;//重装定时器值 TL0=0XB0; TR0=1; _50ms++; if(_50ms==20)//1s到 { _50ms=0; s++; //count++; if(! flag)//间隔时间内 { if(s==T_s)//时间间隔到 { s=0; flag=1; jh=0;//开始浇花 } } if(flag)//浇花时间内 { if(s==t2) { s=0; flag=0; flag3=0; jh=1;//停止浇花 } } } } /******************判断模式选择***********************/ voidjudge() { if(k1==0)//判断模式 { delay(10); if(k1==0) { while(! k1); flag1=~flag1; } } } /*****************调节时间****************************/ voidtiaojie() { table4[0]=t1/10+48; table4[1]=t1%10+48; table5[0]=t2/10+48; table5[1]=t2%10+48; w_cmd(0xc0+0x03); w_str(table4); w_cmd(0xc0+0x0c); w_str(table5);//液晶显示 if(k2==0)//判别调节间隔时间还是浇花时间 { delay(10); if(k2==0) { while(! k2); flag2=~flag2; } } if(flag2==0)//调节间隔时间 { if(k3==0) { delay(10); if(k3==0) { while(! k3); t1++; if(t1>150)t1=150; } } if(k4==0) { delay(10); if(k4==0) { while(! k4); t1--; if(t1<12)t1=12; } } } if(flag2)//调节浇花时间 { if(k3==0) { delay(10); if(k3==0) { while(! k3); t2++; if(t2>120)t2=120; } } if(k4==0) { delay(10); if(k4==0) { while(! k4); t2--; if(t2<20)t2=20; } } } } /*******************主函数**********************************/ voidmain() { lcd_int(); Timer0_Init(); while (1) { judge();//判断模式 if(! flag1)//自动模式 { w_cmd(0x80+0x07); w_str(table2);//液晶显示 tiaojie();//调节时间 T_s=t1*60;//自动模式间隔时间,默认12分钟 EA=1;//开定时器 } if(flag1)//手动模式 { w_cmd(0x80+0x07); w_str(table3);//液晶显示 if(k5==0)//判定是否按下浇水开关 { delay(10); /***************************头文件***********************/ #include /************************数据类型宏定义******************/ #defineucharunsignedchar #defineuintunsignedint #definelcdP0//液晶数据口 /***********************声明控制引脚*********************/ sbitrs=P3^0;//LCD1602控制端口 sbiten=P3^1; sbitjh=P3^2;//继电器控制端 sbitk1=P1^0;//按键 sbitk2=P1^1; sbitk3=P1^2; sbitk4=P1^3; sbitk5=P1^4; /**************************数组定义********************/ ucharcodetable0[]="Modle: Automatic";//用于LCD1602显示 ucharcodetable1[]="T1=12minT2=20s"; uchartable2[]="Automatic"; uchartable3[]="Manual"; uchartable4[]="00"; uchartable5[]="00"; uchartable6[]=""; /**********************s声明全局变量*******************/ uchar_50ms,t1=15,t2=30;//每50ms加一次的变量;间隔时间min;浇花时间s; uints,T_s;//1s时间到;总定时时间 ucharflag=0,flag1=0,flag2=0,flag3=0;//时间切换标志。 自动/手动切换标志,时间间隔和浇花时间调节标志,浇花与不浇花标志 /*************************延时程序*********************/ voiddelay(uintcount)//1ms延时 { uinti,j; for(i=0;i for(j=0;j<120;j++); } /*************************液晶驱动程序*************************/ voidw_cmd(ucharcom)//lcd1602写命令 { rs=0; lcd=com; en=1; delay(5); en=0; } voidw_data(uchardat)//lcd1602读数据 { rs=1; lcd=dat; en=1; delay(5); en=0; } voidw_str(uchar*s)//lcd1602写字符串 { while(*s)w_data(*s++); } voidlcd_int()//lcd1602初始化 { en=0; w_cmd(0x38); w_cmd(0x0c); w_cmd(0x06); w_cmd(0x01); w_cmd(0x80+0x00); w_str(table0); w_cmd(0xc0+0x00); w_str(table1); } /*******************定时器0初始化程序******************/ voidTimer0_Init(void)//其中没ET0是为以后控制暂停用的 { TMOD=TMOD|0X01;//定时方式1 TH0=0X3C;//50ms TL0=0XB0; TR0=1; ET0=1; _50ms=0; s=0; } /*******************定时器0中断程序********************/ voidTimer0(void)interrupt1 { TR0=0;//停止计数 TH0=0X3C;//重装定时器值 TL0=0XB0; TR0=1; _50ms++; if(_50ms==20)//1s到 { _50ms=0; s++; //count++; if(! flag)//间隔时间内 { if(s==T_s)//时间间隔到 { s=0; flag=1; jh=0;//开始浇花 } } if(flag)//浇花时间内 { if(s==t2) { s=0; flag=0; flag3=0; jh=1;//停止浇花 } } } } /******************判断模式选择***********************/ voidjudge() { if(k1==0)//判断模式 { delay(10); if(k1==0) { while(! k1); flag1=~flag1; } } } /*****************调节时间****************************/ voidtiaojie() { table4[0]=t1/10+48; table4[1]=t1%10+48; table5[0]=t2/10+48; table5[1]=t2%10+48; w_cmd(0xc0+0x03); w_str(table4); w_cmd(0xc0+0x0c); w_str(table5);//液晶显示 if(k2==0)//判别调节间隔时间还是浇花时间 { delay(10); if(k2==0) { while(! k2); flag2=~flag2; } } if(flag2==0)//调节间隔时间 { if(k3==0) { delay(10); if(k3==0) { while(! k3); t1++; if(t1>150)t1=150; } } if(k4==0) { delay(10); if(k4==0) { while(! k4); t1--; if(t1<12)t1=12; } } } if(flag2)//调节浇花时间 { if(k3==0) { delay(10); if(k3==0) { while(! k3); t2++; if(t2>120)t2=120; } } if(k4==0) { delay(10); if(k4==0) { while(! k4); t2--; if(t2<20)t2=20; } } } } /*******************主函数**********************************/ voidmain() { lcd_int(); Timer0_Init(); while (1) { judge();//判断模式 if(! flag1)//自动模式 { w_cmd(0x80+0x07); w_str(table2);//液晶显示 tiaojie();//调节时间 T_s=t1*60;//自动模式间隔时间,默认12分钟 EA=1;//开定时器 } if(flag1)//手动模式 { w_cmd(0x80+0x07); w_str(table3);//液晶显示 if(k5==0)//判定是否按下浇水开关 { delay(10); if(k5==0) { while(! k5); flag3=~flag3; } } if(flag3==0)//不浇花 { jh=1; EA=0;//关定时器 } if(flag3)//浇花 { jh=0;//开继电器 //count=0;//浇花计时 EA=1;//开定时器 flag=1;//浇花标志 t2=50;//浇花不超过50s } } } }if(k5==0) { while(! k5); flag3=~flag3; } } if(flag3==0)//不浇花 { jh=1; EA=0;//关定时器 } if(flag3)//浇花 { jh=0;//开继电器 //count=0;//浇花计时 EA=1;//开定时器 flag=1;//浇花标志 t2=50;//浇花不超过50s } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 自动 浇花 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)