wdb_9955 发表于 2014-6-6 15:06:46

求高手帮我写一段程序

本人新手琢磨的好几天,精神都错乱了还是不行,求高手帮助。
我的主程序是让液晶屏显示123;但我想通过按钮让液晶屏切换显示456;456要保持到我下次按按钮。再按一次按钮回到123的界面。程序应该怎么写?高手给点提示或者直接帮我写好我复制过去,不胜感激!

隨風大俠 发表于 2014-6-6 16:04:47

至少貼個程式碼吧,沒程式碼怎幫= =??

benbenqi 发表于 2014-6-6 16:20:59

电路连接图诶。那种LCD?按键接哪个端口?高有效/低有效。ARDUINO 板子型号?

wdb_9955 发表于 2014-6-6 16:36:35

隨風大俠 发表于 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的界面。另外还有什么其他方法能更好的实现。先谢谢了!

wdb_9955 发表于 2014-6-6 16:44:20

benbenqi 发表于 2014-6-6 16:20 static/image/common/back.gif
电路连接图诶。那种LCD?按键接哪个端口?高有效/低有效。ARDUINO 板子型号?

测试程序贴下面了,谢谢了,按钮没做防抖,不过接了下拉电阻,不知道有没有效果,帮我看看吧

benbenqi 发表于 2014-6-6 17:58:22

给个思路:
用按键翻转改变EEPROM一个单元的状态,然后主循环根据EEPROM单元状态决定显示内容。掉电都不怕。

茕兔 发表于 2014-6-6 20:25:34

很简单啊,设置一个标志位来判断显示123还是显示456,用按键来改变标志位

i7456 发表于 2014-6-6 20:49:16

本帖最后由 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,恢复初始状态,等待下一次按键。


}

wdb_9955 发表于 2014-6-9 14:00:51

benbenqi 发表于 2014-6-6 17:58 static/image/common/back.gif
给个思路:
用按键翻转改变EEPROM一个单元的状态,然后主循环根据EEPROM单元状态决定显示内容。掉电都不怕 ...

大哥,能给点程序代码或者资料学习学习吗?我还是个新手

wdb_9955 发表于 2014-6-9 14:11:36

i7456 发表于 2014-6-6 20:49 static/image/common/back.gif
#include   
#include
#include


测试了下,开机屏幕空白,按一次后显示123,再按一次456,然后始终停留在456界面了,可能需要修改,我自己还在努力的理解你的程序。谢谢了

i7456 发表于 2014-6-9 15:44:30

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)))

wdb_9955 发表于 2014-6-11 15:39:18

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;


}

i7456 发表于 2014-6-11 15:53:32

wdb_9955 发表于 2014-6-11 15:39 static/image/common/back.gif
经过几天的学习,试着在您的程序里在加个判断,可问题出现了,不明白问题出哪了,求指教,正好可以加深理 ...

看8楼的程序吧,我加了注释,
页: [1]
查看完整版本: 求高手帮我写一段程序