在线时间382 小时
UID251816
注册时间2010-12-3
NXP金币0
TA的每日心情 | 开心 2024-4-5 11:15 |
---|
签到天数: 1061 天 连续签到: 1 天 [LV.10]以坛为家III
金牌会员
 
- 积分
- 4979
- 最后登录
- 2024-5-31
|
本帖最后由 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界面电击“新建”
根据提示框,选择平台,这里是LPCXpresso11U68,模板是Blinky LED Hello World,工程名我没改,直接用的mbed_blinky,点击“OK”后,系统创建一个基本工程。
为了使用LCD keypad shield模块,我们首先驱动lcd,mbed功能强大啊,支持的库那时相当的多阿,我们搜索一个叫做TextLCD的库
如图中4步,将搜索到的库添加到刚才建立的基本工程中,工程中会多出一个类库,叫做“TextLCD”。
打开main.cpp文件,添加头文件
创建一个lcd对象
- TextLCD lcd(D8, D9, D4, D5, D6, D7); // RS, E, D4-D7, LCDType=LCD16x2, BL=NC, E2=NC, LCDTCtrl=HD44780
复制代码 这几个引脚位置是固定的,arduion模块决定的。每个引脚的意义参见下图中的帮助。
对象建立后就初始化完成了,我们直接可以使用。
- lcd.printf(" Hello world!\n");
- lcd.printf(" OM13058UL ");
复制代码 这里的LCD的操作就基本完成了,下面完成key的读取,前面提到,key是同过读取AD的数据判断出来的,非常有意思且高效率。
我们首先要创建一个AD对象,读取的AD引脚为AD0,这个也是arduino模块决定的
定义按键名称和对应的AD区间
- char msgs[5][16] = {"Right Key OK ",
- "Up Key OK ",
- "Down Key OK ",
- "Left Key OK ",
- "Select Key OK"
- };
- int adc_key_val[5] = {50, 200, 400, 600, 800 };
复制代码 编写一个根据AD采样值判断输入按键的函数
- // Convert ADC value to key number
- int get_key(unsigned int input)
- {
- int k;
- for (k = 0; k < NUM_KEYS; k++) {
- if (input < adc_key_val[k]) {
- return k;
- }
- }
- if (k >= NUM_KEYS)k = -1; // No valid key pressed
- return k;
- }
复制代码 接下来我们可以获取key按键了
- adc_key_in = keyread*700; // read the value from the sensor
- key = get_key(adc_key_in); // convert into key press
- if (key != oldkey) { // if keypress is detected
- wait(0.1); // wait for debounce time
- adc_key_in = keyread * 700; // read the value from the sensor
- key = get_key(adc_key_in); // convert into key press
- if (key != oldkey) {
- lcd.locate(0, 1);
- oldkey = key;
- if (key >=0) {
- lcd.printf(msgs[key]);
- }
- }
复制代码 看看实际的运行效果
https://v.youku.com/v_show/id_XM ... m=a2hzp.8253869.0.0
|
|