在线时间163 小时
UID388081
注册时间2012-9-11
NXP金币0
TA的每日心情 | 开心 2018-7-24 08:30 |
---|
签到天数: 50 天 连续签到: 1 天 [LV.5]常住居民I
金牌会员
 
- 积分
- 1713
- 最后登录
- 2019-12-7
|
本帖最后由 haifeng-388081 于 2017-4-14 14:40 编辑
本节使用单片机的8个口连接4x4矩阵键盘,键盘直接使用了成品的薄膜键盘,按下键盘上的按键可以在5110显示屏最下面一行显示,5110屏显示的帖子可以去下面的链接
https://www.nxpic.org.cn/module/forum/thread-610143-1-1.html
按键原理图如下,使用上ARDUINO的接口,
实物图,有点乱
引脚配置
按键处理部分程序
按键值处理程序
主程序
- int main(void)
- {
-
- /* Init board hardware. */
- uint8_t key;
- BOARD_InitBootPins();
- BOARD_InitBootClocks();
- BOARD_InitDebugConsole();
- #ifdef SDK_PRIMARY_CORE
- BOARD_StartSecondaryCore();
- #endif
- CLOCK_EnableClock(kCLOCK_Gpio0);//开启GPIO时钟
- LCD_init();//LCD初始化
- /* Add your code here */
-
- // gpio_pin_config_t config={kGPIO_DigitalOutput,0,};//默认输出0
- // GPIO_PinInit(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN,&config);//初始化引脚
- // GPIO_PinInit(BOARD_INITPINS_GPIO_SPI_MOSI_GPIO,BOARD_INITPINS_GPIO_SPI_MOSI_PORT,BOARD_INITPINS_GPIO_SPI_MOSI_GPIO_PIN,&config);//初始化引脚
- // GPIO_SetPinsOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN);
- while(1)
- { /* Infinite loop to avoid leaving the main function */
- // __asm("NOP"); /* something to use as a breakpoint stop while looping */
- // GPIO_WritePinOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN,1);//输出1
- // GPIO_SetPinsOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,1U<<BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN);//输出1
- // Delay_ms(500);
- //
- // GPIO_ClearPinsOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,1U<<BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN);//输出0
- //// GPIO_WritePinOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN,0);//输出0
- // Delay_ms(500);
- // GPIO_SetPinsOutput(BOARD_INITPINS_GPIO_SPI_MOSI_GPIO,BOARD_INITPINS_GPIO_SPI_MOSI_PORT,1U<<BOARD_INITPINS_GPIO_SPI_MOSI_GPIO_PIN);//输出1
- // Delay_us(100);
- // GPIO_ClearPinsOutput(BOARD_INITPINS_GPIO_SPI_MOSI_GPIO,BOARD_INITPINS_GPIO_SPI_MOSI_PORT,1U<<BOARD_INITPINS_GPIO_SPI_MOSI_GPIO_PIN);//输出0
- //// GPIO_WritePinOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN,0);//输出0
- // Delay_us(100);
- // LCD_write_english_string(22,1,"NXP");
- LCD_write_chinese_string(22,0,6,3,0,0);
- LCD_write_chinese_string(42,0,12,2,3,0);
- LCD_write_english_string(6,2,"NXP LPC54114");
- LCD_write_english_string(1,4,"haifeng-388081");
-
- // KEY_Scan();
- key=KeyPro();
- if(key!='G')
- LCD_write_one_char(0,5,key);
-
- }
- }
复制代码 按键程序- uint8_t KEY_Scan()
- {
- static uint8_t key_value,key_line;// 存储按键值
- uint32_t cord_h,cord_l,cord_l_1,cord_l_2,temp;
-
- // CLOCK_EnableClock(kCLOCK_Gpio0);//开启GPIO0时钟
- // CLOCK_EnableClock(kCLOCK_Gpio1);//开启GPIO1时钟
- gpio_pin_config_t config={kGPIO_DigitalOutput,0};//输出
- gpio_pin_config_t config_input={kGPIO_DigitalInput};//输入
-
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,&config);//配置按键的8个引脚
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,&config);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,&config);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,&config);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_1_PORT,BOARD_INITPINS_KEY_L_1_GPIO_PIN,&config);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_2_PORT,BOARD_INITPINS_KEY_L_2_GPIO_PIN,&config);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_3_GPIO_PIN,&config);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_4_GPIO_PIN,&config);
-
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,1);//行线输出1
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,1);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,1);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,1);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_1_PORT,BOARD_INITPINS_KEY_L_1_GPIO_PIN,0);//列线输出0
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_2_PORT,BOARD_INITPINS_KEY_L_2_GPIO_PIN,0);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_3_GPIO_PIN,0);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_4_PORT,BOARD_INITPINS_KEY_L_4_GPIO_PIN,0);
-
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,&config_input);//行线上拉输入
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,&config_input);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,&config_input);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,&config_input);
-
- temp=GPIO_ReadPinsInput(GPIO,BOARD_INITPINS_KEY_H_1_PORT);//读取按键
- cord_h=temp&0X0000000F;//取出行线值
- if(cord_h!=0X0000000F)
- {
- Delay_ms(10);
- temp=GPIO_ReadPinsInput(GPIO,BOARD_INITPINS_KEY_H_1_PORT);//再读取一次按键
- if((temp&0X0000000F)!=0X0000000F)
- {
- cord_h=temp&0X0000000F;//取出行线值
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,&config);//行线改为输出
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,&config);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,&config);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,&config);
-
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,0);//行线输出0
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,0);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,0);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,0);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_1_PORT,BOARD_INITPINS_KEY_L_1_GPIO_PIN,1);//列线输出1
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_2_PORT,BOARD_INITPINS_KEY_L_2_GPIO_PIN,1);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_3_GPIO_PIN,1);
- GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_4_PORT,BOARD_INITPINS_KEY_L_4_GPIO_PIN,1);
-
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_1_PORT,BOARD_INITPINS_KEY_L_1_GPIO_PIN,&config_input);//列线上拉输入
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_2_PORT,BOARD_INITPINS_KEY_L_2_GPIO_PIN,&config_input);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_3_GPIO_PIN,&config_input);
- GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_4_PORT,BOARD_INITPINS_KEY_L_4_GPIO_PIN,&config_input);
-
- temp=GPIO_ReadPinsInput(GPIO,BOARD_INITPINS_KEY_H_1_PORT);//读取一次按键
- cord_l=temp&0X00000C30;//取出行线值
- while(((GPIO_ReadPinsInput(GPIO,BOARD_INITPINS_KEY_H_1_PORT))&0X00000C30)!=0X00000C30);
- cord_l_1=cord_l&0X00000C00;
- cord_l_1>>=4;
- cord_l_2=cord_l&0X00000030;
- cord_l=cord_l_1|cord_l_2;
-
- return (uint8_t)(cord_h|cord_l);
- }
- }
- }
- uint8_t KeyPro()
- {
- switch (KEY_Scan())
- {
- case 0XEE: return '7';break;//7
- case 0XDE: return '8';break;//8
- case 0XBE: return '9';break;//9
- case 0X7E: return 'C';break;//C
- case 0XED: return '*';break;//*
- case 0XDD: return '0';break;//0
- case 0XBD: return '#';break;//#
- case 0X7D: return 'D';break;//D
- case 0XEB: return '4';break;//4
- case 0XDB: return '5';break;//
- case 0XBB: return '6';break;//6
- case 0X7B: return 'B';break;//B
- case 0XE7: return '1';break;//
- case 0XD7: return '2';break;//2
- case 0XB7: return '3';break;//3
- case 0X77: return 'A';break;//A
- default: return 'G';break;
- }
- }
复制代码 附录程序
Project5_cm4_KEY.zip
(6.45 MB, 下载次数: 1)
|
|