我想通过按键切换lcd1602显示不同的界面,比如按key1的话lcd1602就会显示温湿度的界面,按key2的话显示光照的界面,按key3显示土壤湿度的界面。
u8 keyflag()
{
if(K1==0)
{
delay_ms(1000);
if(K1==0)
{
return 1;
}while(K1==0);
}
if(K2==0)
{
delay_ms(1000);
if(K2==0)
{
return 2;
}while(K2==0);
}
if(K3==0)
{
delay_ms(1000);
if(K3==0)
{
return 3;
}while(K3==0);
}
if(K4==0)
{
delay_ms(1000);
if(K4==0)
{
return 4;
}while(K4==0);
}
return 0;
}
void Scankey()
{
u8 temp=0;
while(1)
{
temp=keyflag();
switch(temp)
{
case 1:
ds1302function();
break;
case 2:
dht11_function();
break;
case 3:
illumi_fun();
break;
case 4:
yl69function();
default :
break;
}
}
}
void main()
{
lcd1602_init();
while(1)
{
keyflag();
Scankey();
}
}
上面是我的代码
出现的实现现象不符合我的要求;
首先是每一个模块都可以单独的在lcd1602上面显示,但是按键只有一次有效也就是说,我按key1的时候,lcd上会显示当前的界面,此时我在按key2,界面并没有改变,而按key3也是;但是当我重新烧入的时候按key2键会显示key2对应的界面,而按别的又会没有效果;我想问一下是什么原因?
我都是一个模块一个模块显示成功集成好的,实在不懂是什么原因?毕设这一关过不了,毕设就没有办法完成啦?
不要滥用无限循环否则影响其他执行,主函数已经循环执行Scankey()函数,Scankey()函数内就不该再用无限循环不结束。
不知道你这个问题是否已经解决, 如果还没有解决的话: