查看: 4760|回复: 1

[原创] 【LPC54114】学习+4x4矩阵键盘使用5110显示

[复制链接]
  • TA的每日心情
    开心
    2018-7-24 08:30
  • 签到天数: 50 天

    连续签到: 1 天

    [LV.5]常住居民I

    22

    主题

    817

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1713
    最后登录
    2019-12-7
    发表于 2017-4-14 12:26:10 | 显示全部楼层 |阅读模式
    本帖最后由 haifeng-388081 于 2017-4-14 14:40 编辑

    本节使用单片机的8个口连接4x4矩阵键盘,键盘直接使用了成品的薄膜键盘,按下键盘上的按键可以在5110显示屏最下面一行显示,5110屏显示的帖子可以去下面的链接
    https://www.nxpic.org.cn/module/forum/thread-610143-1-1.html

    按键原理图如下,使用上ARDUINO的接口,
    硬件原理图.jpg LCD.jpg

    实物图,有点乱
    QQ图片20170414122028.jpg
    QQ图片20170414122032.jpg
    引脚配置
    接口1.png
    接口2.jpg

    按键处理部分程序
    按键处理.jpg
    按键值处理程序
    按键值处理.jpg
    主程序
    1. int main(void)
    2. {
    3.         
    4.   /* Init board hardware. */
    5.         uint8_t key;
    6.         BOARD_InitBootPins();
    7.         BOARD_InitBootClocks();
    8.         BOARD_InitDebugConsole();
    9.         #ifdef SDK_PRIMARY_CORE
    10.         BOARD_StartSecondaryCore();
    11.         #endif
    12.         CLOCK_EnableClock(kCLOCK_Gpio0);//开启GPIO时钟
    13.         LCD_init();//LCD初始化
    14.   /* Add your code here */
    15.         
    16. //        gpio_pin_config_t config={kGPIO_DigitalOutput,0,};//默认输出0
    17. //        GPIO_PinInit(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN,&config);//初始化引脚
    18. //        GPIO_PinInit(BOARD_INITPINS_GPIO_SPI_MOSI_GPIO,BOARD_INITPINS_GPIO_SPI_MOSI_PORT,BOARD_INITPINS_GPIO_SPI_MOSI_GPIO_PIN,&config);//初始化引脚
    19. //        GPIO_SetPinsOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN);
    20.         while(1)
    21.         { /* Infinite loop to avoid leaving the main function */
    22. //    __asm("NOP"); /* something to use as a breakpoint stop while looping */
    23. //                GPIO_WritePinOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN,1);//输出1
    24. //                GPIO_SetPinsOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,1U<<BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN);//输出1
    25. //                Delay_ms(500);
    26. //        
    27. //                GPIO_ClearPinsOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,1U<<BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN);//输出0
    28. ////                GPIO_WritePinOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN,0);//输出0
    29. //                Delay_ms(500);
    30. //                GPIO_SetPinsOutput(BOARD_INITPINS_GPIO_SPI_MOSI_GPIO,BOARD_INITPINS_GPIO_SPI_MOSI_PORT,1U<<BOARD_INITPINS_GPIO_SPI_MOSI_GPIO_PIN);//输出1
    31. //                Delay_us(100);
    32. //                GPIO_ClearPinsOutput(BOARD_INITPINS_GPIO_SPI_MOSI_GPIO,BOARD_INITPINS_GPIO_SPI_MOSI_PORT,1U<<BOARD_INITPINS_GPIO_SPI_MOSI_GPIO_PIN);//输出0
    33. ////                GPIO_WritePinOutput(BOARD_INITPINS_GPIO_SPI_CS0_GPIO,BOARD_INITPINS_GPIO_SPI_CS0_PORT,BOARD_INITPINS_GPIO_SPI_CS0_GPIO_PIN,0);//输出0
    34. //                Delay_us(100);
    35. //                LCD_write_english_string(22,1,"NXP");
    36.                 LCD_write_chinese_string(22,0,6,3,0,0);  
    37.                 LCD_write_chinese_string(42,0,12,2,3,0);  
    38.                 LCD_write_english_string(6,2,"NXP LPC54114");
    39.                 LCD_write_english_string(1,4,"haifeng-388081");
    40.                
    41. //                KEY_Scan();

    42.                 key=KeyPro();
    43.                 if(key!='G')
    44.                 LCD_write_one_char(0,5,key);
    45.                
    46.         }
    47. }
    复制代码
    按键程序
    1. uint8_t KEY_Scan()
    2. {
    3.         static uint8_t key_value,key_line;// 存储按键值
    4.         uint32_t cord_h,cord_l,cord_l_1,cord_l_2,temp;
    5.         
    6. //        CLOCK_EnableClock(kCLOCK_Gpio0);//开启GPIO0时钟
    7. //        CLOCK_EnableClock(kCLOCK_Gpio1);//开启GPIO1时钟
    8.     gpio_pin_config_t config={kGPIO_DigitalOutput,0};//输出
    9.         gpio_pin_config_t config_input={kGPIO_DigitalInput};//输入
    10.          
    11.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,&config);//配置按键的8个引脚
    12.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,&config);
    13.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,&config);
    14.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,&config);
    15.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_1_PORT,BOARD_INITPINS_KEY_L_1_GPIO_PIN,&config);
    16.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_2_PORT,BOARD_INITPINS_KEY_L_2_GPIO_PIN,&config);
    17.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_3_GPIO_PIN,&config);
    18.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_4_GPIO_PIN,&config);
    19.         
    20.         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,1);//行线输出1
    21.         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,1);
    22.         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,1);
    23.         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,1);
    24.         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_1_PORT,BOARD_INITPINS_KEY_L_1_GPIO_PIN,0);//列线输出0
    25.         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_2_PORT,BOARD_INITPINS_KEY_L_2_GPIO_PIN,0);
    26.         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_3_GPIO_PIN,0);
    27.         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_4_PORT,BOARD_INITPINS_KEY_L_4_GPIO_PIN,0);
    28.         
    29.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,&config_input);//行线上拉输入
    30.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,&config_input);
    31.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,&config_input);
    32.         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,&config_input);
    33.         
    34.         temp=GPIO_ReadPinsInput(GPIO,BOARD_INITPINS_KEY_H_1_PORT);//读取按键
    35.         cord_h=temp&0X0000000F;//取出行线值
    36.         if(cord_h!=0X0000000F)
    37.         {
    38.                 Delay_ms(10);
    39.                 temp=GPIO_ReadPinsInput(GPIO,BOARD_INITPINS_KEY_H_1_PORT);//再读取一次按键
    40.                 if((temp&0X0000000F)!=0X0000000F)
    41.                 {
    42.                         cord_h=temp&0X0000000F;//取出行线值
    43.                         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,&config);//行线改为输出
    44.                         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,&config);
    45.                         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,&config);
    46.                         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,&config);
    47.                         
    48.                         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_1_PORT,BOARD_INITPINS_KEY_H_1_GPIO_PIN,0);//行线输出0
    49.                         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_2_PORT,BOARD_INITPINS_KEY_H_2_GPIO_PIN,0);
    50.                         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_3_PORT,BOARD_INITPINS_KEY_H_3_GPIO_PIN,0);
    51.                         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_H_4_PORT,BOARD_INITPINS_KEY_H_4_GPIO_PIN,0);
    52.                         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_1_PORT,BOARD_INITPINS_KEY_L_1_GPIO_PIN,1);//列线输出1
    53.                         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_2_PORT,BOARD_INITPINS_KEY_L_2_GPIO_PIN,1);
    54.                         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_3_GPIO_PIN,1);
    55.                         GPIO_WritePinOutput(GPIO,BOARD_INITPINS_KEY_L_4_PORT,BOARD_INITPINS_KEY_L_4_GPIO_PIN,1);
    56.                         
    57.                         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_1_PORT,BOARD_INITPINS_KEY_L_1_GPIO_PIN,&config_input);//列线上拉输入
    58.                         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_2_PORT,BOARD_INITPINS_KEY_L_2_GPIO_PIN,&config_input);
    59.                         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_3_PORT,BOARD_INITPINS_KEY_L_3_GPIO_PIN,&config_input);
    60.                         GPIO_PinInit(GPIO,BOARD_INITPINS_KEY_L_4_PORT,BOARD_INITPINS_KEY_L_4_GPIO_PIN,&config_input);
    61.                         
    62.                         temp=GPIO_ReadPinsInput(GPIO,BOARD_INITPINS_KEY_H_1_PORT);//读取一次按键
    63.                         cord_l=temp&0X00000C30;//取出行线值
    64.                         while(((GPIO_ReadPinsInput(GPIO,BOARD_INITPINS_KEY_H_1_PORT))&0X00000C30)!=0X00000C30);
    65.                         cord_l_1=cord_l&0X00000C00;
    66.                         cord_l_1>>=4;
    67.                         cord_l_2=cord_l&0X00000030;
    68.                         cord_l=cord_l_1|cord_l_2;
    69.                
    70.                         return (uint8_t)(cord_h|cord_l);
    71.                 }
    72.         }
    73. }

    74. uint8_t KeyPro()
    75. {
    76.     switch (KEY_Scan())
    77.     {
    78.         case 0XEE: return '7';break;//7
    79.         case 0XDE: return '8';break;//8
    80.         case 0XBE: return '9';break;//9
    81.         case 0X7E: return 'C';break;//C
    82.         case 0XED: return '*';break;//*
    83.         case 0XDD: return '0';break;//0
    84.         case 0XBD: return '#';break;//#
    85.         case 0X7D: return 'D';break;//D
    86.         case 0XEB: return '4';break;//4
    87.         case 0XDB: return '5';break;//
    88.         case 0XBB: return '6';break;//6
    89.         case 0X7B: return 'B';break;//B
    90.         case 0XE7: return '1';break;//
    91.         case 0XD7: return '2';break;//2
    92.         case 0XB7: return '3';break;//3
    93.         case 0X77: return 'A';break;//A
    94.         default: return 'G';break;
    95.     }
    96. }
    复制代码
    附录程序 Project5_cm4_KEY.zip (6.45 MB, 下载次数: 1)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
    发表于 2018-5-18 11:45:50 | 显示全部楼层
    支持一下
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 12:55 , Processed in 0.083130 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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