极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16106|回复: 12

求高手帮我写一段程序

[复制链接]
发表于 2014-6-6 15:06:46 | 显示全部楼层 |阅读模式
本人新手琢磨的好几天,精神都错乱了还是不行,求高手帮助。
我的主程序是让液晶屏显示123;但我想通过按钮让液晶屏切换显示456;456要保持到我下次按按钮。再按一次按钮回到123的界面。程序应该怎么写?高手给点提示或者直接帮我写好我复制过去,不胜感激!
回复

使用道具 举报

发表于 2014-6-6 16:04:47 | 显示全部楼层
至少貼個程式碼吧,沒程式碼怎幫= =??
回复 支持 反对

使用道具 举报

发表于 2014-6-6 16:20:59 | 显示全部楼层
电路连接图诶。那种LCD?按键接哪个端口?高有效/低有效。ARDUINO 板子型号?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-6 16:36:35 | 显示全部楼层
隨風大俠 发表于 2014-6-6 16:04
至少貼個程式碼吧,沒程式碼怎幫= =??

#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的界面。另外还有什么其他方法能更好的实现。先谢谢了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-6 16:44:20 | 显示全部楼层
benbenqi 发表于 2014-6-6 16:20
电路连接图诶。那种LCD?按键接哪个端口?高有效/低有效。ARDUINO 板子型号?

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

使用道具 举报

发表于 2014-6-6 17:58:22 | 显示全部楼层
给个思路:
用按键翻转改变EEPROM一个单元的状态,然后主循环根据EEPROM单元状态决定显示内容。掉电都不怕。
回复 支持 反对

使用道具 举报

发表于 2014-6-6 20:25:34 | 显示全部楼层
很简单啊,设置一个标志位来判断显示123还是显示456,用按键来改变标志位
回复 支持 反对

使用道具 举报

发表于 2014-6-6 20:49:16 | 显示全部楼层
本帖最后由 i7456 于 2014-6-11 15:52 编辑
wdb_9955 发表于 2014-6-6 16:36
#include     
#include
#include

  1. #include <Wire.h>   
  2. #include <math.h>
  3. #include <LiquidCrystal_I2C.h>
  4. LiquidCrystal_I2C lcd(0x27,20,4);
  5. int flag = 0;
  6. void setup()
  7. { pinMode(2,INPUT);
  8.    lcd.init();
  9.    Wire.begin();
  10.    lcd.backlight();
  11. }
  12. void loop()
  13. {

  14. if((flag==0)&&(digitalRead(2)))   //flag = 0,初始状态;按键按下,D2为高电平
  15.    {
  16.      flag = 1;                                //flag = 1, 表示按键第一次被按下
  17.      lcd.setCursor(0,1);                //屏幕上显示“123”
  18.      lcd.print("123");
  19.      delay(100);                           //加延时,目的是消除按键抖动
  20.    }

  21. if((flag==1)&&(!digitalRead(2)))   //如果按键被按下过一次(flag =1),并且D2为低电平(按键弹起)
  22.    { flag = 2; delay(100);}           //flag = 2,按键第一次弹起

  23. if((flag==2)&&(digitalRead(2)))   //如果按键弹起过一次(flag=2),并且D2为高电平(按键按下)
  24.    {
  25.      flag = 3;                               //flag = 3, 按键第二次被按下
  26.      lcd.setCursor(0,1);               //屏幕上显示“456”
  27.      lcd.print("456");
  28.      delay(100);                          //延时,按键消抖
  29.    }

  30. if((flag==3)&&(!digitalRead(2)))  //如果按键被第二次按下过,并且D2为低电平(按键弹起)
  31.     {flag = 0;delay(100);}           //flag = 0,恢复初始状态,等待下一次按键。


  32. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 14:00:51 | 显示全部楼层
benbenqi 发表于 2014-6-6 17:58
给个思路:
用按键翻转改变EEPROM一个单元的状态,然后主循环根据EEPROM单元状态决定显示内容。掉电都不怕 ...

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

使用道具 举报

 楼主| 发表于 2014-6-9 14:11:36 | 显示全部楼层
i7456 发表于 2014-6-6 20:49
#include     
#include
#include

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

使用道具 举报

发表于 2014-6-9 15:44:30 | 显示全部楼层
wdb_9955 发表于 2014-6-9 14:11
测试了下,开机屏幕空白,按一次后显示123,再按一次456,然后始终停留在456界面了,可能需要修改,我自己 ...

8楼第34行程序
if((flag==4)&&(!digitalRead(2)))

改为
if((flag==3)&&(!digitalRead(2)))
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-11 15:39:18 | 显示全部楼层
i7456 发表于 2014-6-9 15:44
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;


}
回复 支持 反对

使用道具 举报

发表于 2014-6-11 15:53:32 | 显示全部楼层
wdb_9955 发表于 2014-6-11 15:39
经过几天的学习,试着在您的程序里在加个判断,可问题出现了,不明白问题出哪了,求指教,正好可以加深理 ...

看8楼的程序吧,我加了注释,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-13 22:57 , Processed in 0.040531 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表