请选择 进入手机版 | 继续访问电脑版
查看: 73|回复: 1

[原创] 【LPC11U68开发板】驱动LCD keypad shield模块

[复制链接]
  • TA的每日心情
    开心
    昨天 08:24
  • 签到天数: 166 天

    [LV.7]常住居民III

    19

    主题

    468

    帖子

    11

    金豆

    金牌会员

    Rank: 6Rank: 6

    积分
    1481
    最后登录
    1970-1-1
    发表于 5 天前 | 显示全部楼层 |阅读模式
    本帖最后由 story_xjj 于 2018-11-8 22:28 编辑

    LPC11U68 Xpresso具有arduino兼容的接口,因此原则上arduino的模块都是可以使用的,于是我找出来arduino模块LCD keypad shield,这个模块兼有一块1602的字符液晶显示器和多个按键,LCD的驱动需要6个引脚,4个DATA1个RS和1个E,Key设计非常特别,采用1路AD采样的方式,识别了5个按键,非常高效。
    为了实现这个测试我们首先需要建立一个基本工程,mbed提供的一个工程是blinky,建立过程相当简单,在Compiler界面电击“新建”
    a5.jpg
    根据提示框,选择平台,这里是LPCXpresso11U68,模板是Blinky LED Hello World,工程名我没改,直接用的mbed_blinky,点击“OK”后,系统创建一个基本工程。
    为了使用LCD keypad shield模块,我们首先驱动lcd,mbed功能强大啊,支持的库那时相当的多阿,我们搜索一个叫做TextLCD的库
    a3.jpg
    如图中4步,将搜索到的库添加到刚才建立的基本工程中,工程中会多出一个类库,叫做“TextLCD”。
    打开main.cpp文件,添加头文件
    1. #include "TextLCD.h"
    复制代码
    创建一个lcd对象
    1. TextLCD lcd(D8, D9, D4, D5, D6, D7); // RS, E, D4-D7, LCDType=LCD16x2, BL=NC, E2=NC, LCDTCtrl=HD44780
    复制代码
    这几个引脚位置是固定的,arduion模块决定的。每个引脚的意义参见下图中的帮助。
    a4.jpg
    对象建立后就初始化完成了,我们直接可以使用。
    1. lcd.printf("  Hello world!\n");
    2.    lcd.printf("   OM13058UL   ");
    复制代码
    这里的LCD的操作就基本完成了,下面完成key的读取,前面提到,key是同过读取AD的数据判断出来的,非常有意思且高效率。
    我们首先要创建一个AD对象,读取的AD引脚为AD0,这个也是arduino模块决定的
    1. AnalogIn keyread(A0);
    复制代码
    定义按键名称和对应的AD区间
    1. char msgs[5][16] = {"Right Key OK ",
    2.                     "Up Key OK    ",
    3.                     "Down Key OK  ",
    4.                     "Left Key OK  ",
    5.                     "Select Key OK"
    6.                    };

    7. int adc_key_val[5] = {50, 200, 400, 600, 800 };
    复制代码
    编写一个根据AD采样值判断输入按键的函数
    1. // Convert ADC value to key number
    2. int get_key(unsigned int input)
    3. {
    4.     int k;

    5.     for (k = 0; k < NUM_KEYS; k++) {
    6.         if (input < adc_key_val[k]) {
    7.             return k;
    8.         }
    9.     }

    10.     if (k >= NUM_KEYS)k = -1;  // No valid key pressed
    11.     return k;
    12. }
    复制代码
    接下来我们可以获取key按键了
    1. adc_key_in = keyread*700;    // read the value from the sensor
    2.         key = get_key(adc_key_in);  // convert into key press

    3.         if (key != oldkey) { // if keypress is detected
    4.             wait(0.1);  // wait for debounce time
    5.             adc_key_in = keyread * 700;    // read the value from the sensor
    6.             key = get_key(adc_key_in);    // convert into key press
    7.             if (key != oldkey) {
    8.         lcd.locate(0, 1);
    9.         oldkey = key;
    10.       if (key >=0) {
    11.                 lcd.printf(msgs[key]);
    12.        }
    13.             }
    复制代码
    看看实际的运行效果

    https://v.youku.com/v_show/id_XM ... m=a2hzp.8253869.0.0

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2018-6-27 09:39
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    227

    主题

    856

    帖子

    0

    金豆

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1254
    最后登录
    2018-11-13
    发表于 4 天前 | 显示全部楼层
    学习了,谢谢楼主的分享
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|恩智浦技术社区

    GMT+8, 2018-11-13 08:59 , Processed in 0.133107 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

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