求高手帮我写一段程序
本人新手琢磨的好几天,精神都错乱了还是不行,求高手帮助。我的主程序是让液晶屏显示123;但我想通过按钮让液晶屏切换显示456;456要保持到我下次按按钮。再按一次按钮回到123的界面。程序应该怎么写?高手给点提示或者直接帮我写好我复制过去,不胜感激! 至少貼個程式碼吧,沒程式碼怎幫= =?? 电路连接图诶。那种LCD?按键接哪个端口?高有效/低有效。ARDUINO 板子型号?
隨風大俠 发表于 2014-6-6 16:04 static/image/common/back.gif
至少貼個程式碼吧,沒程式碼怎幫= =??
#include <Wire.h>
#include <math.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{ pinMode(2,INPUT);
lcd.init();
Wire.begin();
}
void loop()
{ lcd.init();
lcd.backlight();
lcd.setCursor(0,1);
lcd.print("123");
ceshi();
delay(5000);
}
void ceshi()
{ for(int var=0;digitalRead(2)==HIGH;var++)
{switch(var)
{case 1:
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("456");
case 2:
break;
}
}
}
能切换过来,但是主程序的延迟时间一到就会刷新到原来的123界面,有什么办法让他停留在456的界面。另外还有什么其他方法能更好的实现。先谢谢了! benbenqi 发表于 2014-6-6 16:20 static/image/common/back.gif
电路连接图诶。那种LCD?按键接哪个端口?高有效/低有效。ARDUINO 板子型号?
测试程序贴下面了,谢谢了,按钮没做防抖,不过接了下拉电阻,不知道有没有效果,帮我看看吧 给个思路:
用按键翻转改变EEPROM一个单元的状态,然后主循环根据EEPROM单元状态决定显示内容。掉电都不怕。
很简单啊,设置一个标志位来判断显示123还是显示456,用按键来改变标志位 本帖最后由 i7456 于 2014-6-11 15:52 编辑
wdb_9955 发表于 2014-6-6 16:36 static/image/common/back.gif
#include
#include
#include
#include <Wire.h>
#include <math.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
int flag = 0;
void setup()
{ pinMode(2,INPUT);
lcd.init();
Wire.begin();
lcd.backlight();
}
void loop()
{
if((flag==0)&&(digitalRead(2))) //flag = 0,初始状态;按键按下,D2为高电平
{
flag = 1; //flag = 1, 表示按键第一次被按下
lcd.setCursor(0,1); //屏幕上显示“123”
lcd.print("123");
delay(100); //加延时,目的是消除按键抖动
}
if((flag==1)&&(!digitalRead(2))) //如果按键被按下过一次(flag =1),并且D2为低电平(按键弹起)
{ flag = 2; delay(100);} //flag = 2,按键第一次弹起
if((flag==2)&&(digitalRead(2))) //如果按键弹起过一次(flag=2),并且D2为高电平(按键按下)
{
flag = 3; //flag = 3, 按键第二次被按下
lcd.setCursor(0,1); //屏幕上显示“456”
lcd.print("456");
delay(100); //延时,按键消抖
}
if((flag==3)&&(!digitalRead(2)))//如果按键被第二次按下过,并且D2为低电平(按键弹起)
{flag = 0;delay(100);} //flag = 0,恢复初始状态,等待下一次按键。
} benbenqi 发表于 2014-6-6 17:58 static/image/common/back.gif
给个思路:
用按键翻转改变EEPROM一个单元的状态,然后主循环根据EEPROM单元状态决定显示内容。掉电都不怕 ...
大哥,能给点程序代码或者资料学习学习吗?我还是个新手 i7456 发表于 2014-6-6 20:49 static/image/common/back.gif
#include
#include
#include
测试了下,开机屏幕空白,按一次后显示123,再按一次456,然后始终停留在456界面了,可能需要修改,我自己还在努力的理解你的程序。谢谢了 wdb_9955 发表于 2014-6-9 14:11 static/image/common/back.gif
测试了下,开机屏幕空白,按一次后显示123,再按一次456,然后始终停留在456界面了,可能需要修改,我自己 ...
8楼第34行程序
if((flag==4)&&(!digitalRead(2)))
改为
if((flag==3)&&(!digitalRead(2))) i7456 发表于 2014-6-9 15:44 static/image/common/back.gif
8楼第34行程序
if((flag==4)&&(!digitalRead(2)))
经过几天的学习,试着在您的程序里在加个判断,可问题出现了,不明白问题出哪了,求指教,正好可以加深理解。谢谢!
#include <Wire.h>
#include <math.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
int flag = 0;
int flag1 = 0;
void setup()
{pinMode(2,INPUT);
pinMode(7,INPUT);
lcd.init();
Wire.begin();
lcd.backlight();
}
void loop()
{
if((flag==0)&&(digitalRead(2)))
{
flag = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("123");
delay(100);
}
if((flag==1)&&(!digitalRead(2)))
flag = 2;
if((flag==2)&&(digitalRead(2)))
{
flag = 3;
lcd.clear();
lcd.setCursor(0,1);
lcd.print("456");
if((flag1==0)&&(digitalRead(7)))
{ flag1=1;
lcd.clear();
lcd.setCursor(0,0);
lcd.blink();
delay(100);
}
delay(100);
}
if((flag==3)&&(!digitalRead(7)))
flag = 0;
} wdb_9955 发表于 2014-6-11 15:39 static/image/common/back.gif
经过几天的学习,试着在您的程序里在加个判断,可问题出现了,不明白问题出哪了,求指教,正好可以加深理 ...
看8楼的程序吧,我加了注释,
页:
[1]