极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 34492|回复: 11

arduino学习笔记36 - Arduino LCD 1602 Keypad Shield v2.0 扩展板测试实验

[复制链接]
发表于 2012-5-16 10:23:14 | 显示全部楼层 |阅读模式
      
本模块其实就是由arduino商家自行设置的一个LCD1602扩展板,主要就是为了方便和Arduino配合使用,实现即插即用的效果!



1602LCD主要技术参数

显示容量为16×2个字符;
芯片工作电压为4.5~5.5V;
工作电流为2.0mA(5.0V);
模块最佳工作电压为5.0V;
字符尺寸为2.95×4.35(W×H)mm。

1602液晶接口引脚定义

14.jpg


接口说明:

1、两组电源 一组是模块的电源 一组是背光板的电源 一般均使用5V供电。本次试验背光使用3.3V供电也可以工作。
2、VL是调节对比度的引脚,串联不大于5KΩ的电位器进行调节。本次实验使用1KΩ的电阻来设定对比度。其连接分高电位与低电位接法,本次使用低电位接法,串联1KΩ电阻后接GND。
3、RS 是很多液晶上都有的引脚 是命令/数据选择引脚 该脚电平为高时表示将进行数据操作;为低时表示进行命令操作。
4、RW 也是很多液晶上都有的引脚 是读写选择端 该脚电平为高是表示要对液晶进行读操作;为低时表示要进行写操作。
5、E 同样很多液晶模块有此引脚 通常在总线上信号稳定后给一正脉冲通知把数据读走,在此脚为高电平的时候总线不允许变化。
6、D0—D7 8 位双向并行总线,用来传送命令和数据。
7、BLA是背光源正极,BLK是背光源负极。

现在介绍一下这个扩展板的定义和描述:

Arduino LCD1602字符液晶扩展板v2.0       集国内外多款扩展板优点于一体所设计,PCB沉金工艺加工,用料十足,主板采用全新  优质2行16个字符液晶  ,不仅具有对比度调节旋钮、背光灯选择开关,还具4个方向按键、1个选择按键和一个复位按键;4个传感器模拟接口、 RB URF v1.1超声波传感器 接口、蓝牙模块接口、APC220无线数传模块通信接口、独立扩出更加易用方便。对于Arduino初学者来说,不必为繁琐复杂液晶驱动电路连线而头疼了,这款1602液晶扩展板真正意义上的将电路简化,直接将此板插到  Arduino Duemilanove或者UNO控制器  上即可,传感器也仅需一根通用3P传感器连接线(不分数字连接线与模拟连接线)连接,可轻松实现传感器数据的记录显示。

  LCD Keypad Shield输入输出扩展板使用2行16个字符液晶,具有对比度调节和背光灯,使用1个模拟口便完成5个按键的输入,1个复位按键,未使用的IO口都扩展出来备用,充分利用IO口。占用数字端口:PIN4(DB4),5(DB5),6(DB6),7(DB7),8(RS),9(E),10(背光控制),模拟按键端口A0。

将LCD Keypad Shield插接到Arduino控制器上,然后需要下载LCD4Bit_mod.h(右键另存为)库文件到arduino-0015\hardware\libraries中,接着编译下面的一个测试程序再下载到Arduino中,初次使用LCD Keypad Shield,先观察LCD有没有显示字符,如果没有显示字符那可能是对比度不正确,可以使用一字起子调节RP1(顺时针旋转),调到出现清晰地字符即可。


看一下整个模块的效果图:



1602 V2.0.jpg




如果你想了解这个扩展板的定义,请看一下这两个图片的引脚定义。


1602-1.jpg



1602-2.jpg



上面这两个功能图解就能说明问题了,IIC接口是A4与A5两个接口,那扩展板上A4、A5的接口也就是插接IIC设备的数据通信接口,这部分接口复用,就想串口那些接口一样,既可以当数字接口输出高低电平也可以串行通信.


以下就是测试代码:


  1. //example use of LCD4Bit_mod library

  2. #include <LCD4Bit_mod.h>
  3. //create object to control an LCD.  
  4. //number of lines in display=1
  5. LCD4Bit_mod lcd = LCD4Bit_mod(2);

  6. //Key message
  7. char msgs[5][18] = {"fiveKeyNoProblem ",
  8.                     "threeKeyNoProblem",
  9.                     "fourKeyNoProblem ",
  10.                     "twoKeyNoProblem",
  11.                     "oneKeyNoProblem" };
  12. int  adc_key_val[5] ={30, 150, 360, 535, 760 };
  13. int NUM_KEYS = 5;
  14. int adc_key_in;
  15. int key=-1;
  16. int oldkey=-1;

  17. void setup() {
  18.   pinMode(13, OUTPUT);  //we'll use the debug LED to output a heartbeat

  19.   lcd.init();
  20.   //optionally, now set up our application-specific display settings, overriding whatever the lcd did in lcd.init()
  21.   //lcd.commandWrite(0x0F);//cursor on, display on, blink on.  (nasty!)
  22.    lcd.clear();
  23.   lcd.printIn("geeetech.com");
  24.    
  25. }

  26. void loop() {

  27.         adc_key_in = analogRead(0);    // read the value from the sensor  
  28.   digitalWrite(13, HIGH);  
  29.   key = get_key(adc_key_in);                        // convert into key press
  30.        
  31.         if (key != oldkey)                                    // if keypress is detected
  32.         {
  33.     delay(50);                // wait for debounce time
  34.                 adc_key_in = analogRead(0);    // read the value from the sensor  
  35.     key = get_key(adc_key_in);                        // convert into key press
  36.     if (key != oldkey)                               
  37.     {                       
  38.       oldkey = key;
  39.       if (key >=0){
  40.       lcd.cursorTo(2, 0);  //line=2, x=0
  41.                           lcd.printIn(msgs[key]);
  42.       }
  43.     }
  44.   }
  45.   
  46.   //delay(1000);
  47.   digitalWrite(13, LOW);
  48.   


  49.   
  50.   
  51. }

  52. // Convert ADC value to key number
  53. int get_key(unsigned int input)
  54. {
  55.         int k;
  56.    
  57.         for (k = 0; k < NUM_KEYS; k++)
  58.         {
  59.                 if (input < adc_key_val[k])
  60.                 {
  61.            
  62.     return k;
  63.         }
  64.         }
  65.    
  66.     if (k >= NUM_KEYS)
  67.         k = -1;     // No valid key pressed
  68.    
  69.     return k;
  70. }
复制代码




下面来一个和GP2D12测距的代码!


  1. #include <LCD4Bit_mod.h>

  2. LCD4Bit_mod lcd = LCD4Bit_mod(2);

  3. char GP2D12;
  4. char a,b;
  5. char str1[]="Renge:";
  6. char str2[]="   Renge Over   ";
  7. char str3[]="cm";

  8. void setup()
  9. {
  10.   lcd.init();
  11.   lcd.clear();
  12.   lcd.printIn("GP2D12 testing...");
  13. }

  14. void loop()
  15. {
  16.       GP2D12=read_gp2d12_range(1);
  17.       if(GP2D12>80||GP2D12<10)
  18.         {
  19.           lcd.cursorTo(2,0);
  20.           lcd.printIn(str2);     
  21.         }
  22.       else
  23.         {
  24.           a=0x30+GP2D12/10;
  25.           b=0x30+GP2D12%10;         
  26.           lcd.cursorTo(2, 3);
  27.           lcd.printIn(str1);   
  28.           lcd.print(a);   
  29.           lcd.print(b);
  30.           lcd.printIn(str3);                    
  31.         }   
  32.     delay(50);
  33. }

  34. float read_gp2d12_range(byte pin)
  35. {
  36. int tmp;
  37. tmp = analogRead(pin);
  38. if (tmp < 3)return -1;
  39. return (6787.0 /((float)tmp - 3.0)) - 4.0;
  40. }
复制代码
回复

使用道具 举报

发表于 2012-5-26 21:55:25 | 显示全部楼层
很好的资料,谢谢分享!
回复 支持 反对

使用道具 举报

发表于 2012-7-26 11:07:48 | 显示全部楼层
这个也有,比起在淘宝买的教程舒服多了!
回复 支持 反对

使用道具 举报

发表于 2013-1-20 15:58:43 | 显示全部楼层
#include <LCD4Bit_mod.h>
找不到这个文件...

请问怎么办??

我用的IDE是:
arduino-1.5.1r2
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-21 09:20:12 | 显示全部楼层
StrongZhu 发表于 2013-1-20 15:58
#include  
找不到这个文件...

是一个头文件来的,但是我现在电脑上也没有这个函数了!
回复 支持 反对

使用道具 举报

发表于 2013-1-21 12:40:49 | 显示全部楼层
Randy 发表于 2013-1-21 09:20
是一个头文件来的,但是我现在电脑上也没有这个函数了!

我后来搜索到了另一个例子。
直接可以用

http://blog.sina.com.cn/s/blog_6243051e01014ly8.html
回复 支持 反对

使用道具 举报

发表于 2013-3-23 14:03:52 | 显示全部楼层
6楼的我也用过,新版本Arduino直接可以用!
回复 支持 反对

使用道具 举报

发表于 2013-4-19 10:25:42 | 显示全部楼层
你好 我也有一个这样的扩展板子。但是有几个问题,液晶的rs ,en,还有db引脚具体都是和arduino的哪些数字io口相连呢?
回复 支持 反对

使用道具 举报

发表于 2013-4-19 10:30:45 | 显示全部楼层
machine1 发表于 2013-4-19 10:25
你好 我也有一个这样的扩展板子。但是有几个问题,液晶的rs ,en,还有db引脚具体都是和arduino的哪些数字io口 ...

看到6楼推荐的文章 问题解决了
回复 支持 反对

使用道具 举报

发表于 2014-12-11 22:37:51 | 显示全部楼层
您好,这个板子我试了试,结果只有0-13接口能程序控制,其他的都不能使用啊,比如21就不能用!感觉是不是需要特定版本呢
回复 支持 反对

使用道具 举报

发表于 2016-5-9 18:18:58 | 显示全部楼层
好资料,研究下,
回复 支持 反对

使用道具 举报

发表于 2016-5-9 18:19:24 | 显示全部楼层
好资料,研究下,
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-1-21 00:04 , Processed in 0.052532 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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