查看: 4190|回复: 0

[原创] 【LPC54114 Bonus任务】双核通信下的机智云功能板控制--LCD5110...

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
    发表于 2017-8-1 14:38:10 | 显示全部楼层 |阅读模式
    双核的LPC4114 Lite在功能方面已称的上十分丰富,如再与机智云的功能板结合在一起,那更会是锦上添花。首先我们来看一下机智云功能板有哪些资源,它共RGB_LED、小电机、红外感应器、小按键、温湿度传感器、WIFI模块及OLED接口等,如图1所示。限于时间的关系,这里就为RGB_LED、小电机、红外感应、小按键及OLED接口配上驱动,并利用双核间的功能将他们组合在一起以发挥功效。
    图片1.png
        图1 机智云功能板

    1.OLED接口
        利用功能板所提供的OLED接口,配上一块LCD5110屏来进行信息显示,该接口如图2所示。由于两者的接口并非一致,所以需稍加改造,具体的做法是将GNDNC引脚短接,这样就能给LCD5110SCE引脚提供所需的片选信号。其它引脚只需在定义上加以修改即可。
    图片2.png
    2 OLED接口

    LCD5110各引脚输出高低电平的定义语句如下:
    #define SetLCD_RST_High()   GPIO_WritePinOutput(GPIO, 0U, 12U, 1);
    #define SetLCD_RST_Low()           GPIO_WritePinOutput(GPIO, 0U, 12U, 0);
    #define SetLCD_DC_High()           GPIO_WritePinOutput(GPIO, 0U, 11U, 1);
    #define SetLCD_DC_Low()    GPIO_WritePinOutput(GPIO, 0U, 11U, 0);
    #define SetLCD_SDIN_High()  GPIO_WritePinOutput(GPIO, 0U, 14U, 1);
    #define SetLCD_SDIN_Low()   GPIO_WritePinOutput(GPIO, 0U, 14U, 0);
    #define SetLCD_SCLK_High()   GPIO_WritePinOutput(GPIO, 1U, 8U, 1);
    #define SetLCD_SCLK_Low()   GPIO_WritePinOutput(GPIO, 1U, 8U, 0);
    #define SetLCD_LED_High()   GPIO_WritePinOutput(GPIO, 1U, 9U, 1);
    #define SetLCD_LED_Low()           GPIO_WritePinOutput(GPIO, 1U, 9U, 0);
    LCD5110的引脚配置函数如下:
    1. void LCD_Configuration(void)
    2. {
    3.         CLOCK_EnableClock(kCLOCK_Gpio0);
    4. CLOCK_EnableClock(kCLOCK_Gpio1);
    5.         gpio_pin_config_t oled_config = {  kGPIO_DigitalOutput, 0,};
    6.         GPIO_PinInit(GPIO, 0U, 12U, &oled_config);
    7.         GPIO_PinInit(GPIO, 0U, 11U, &oled_config);
    8.         GPIO_PinInit(GPIO, 0U, 14U, &oled_config);
    9.         GPIO_PinInit(GPIO, 1U, 8U, &oled_config);
    10.         GPIO_PinInit(GPIO, 1U, 9U, &oled_config);        
    11. SetLCD_LED_High();
    12. SetLCD_RST_High();
    13. }

    14. void LCD_init(void)
    15. {
    16.         LCD_write_byte(0x21,0);
    17.         LCD_write_byte(0xc3,0);
    18.     LCD_write_byte(0x10,0);       
    19.         LCD_write_byte(0x20,0);
    20.         LCD_write_byte(0x0C,0);
    21.         LCD_clear();
    22. }

    23. void LCD_write_byte(uint8_t dt, uint8_t command)
    24. {
    25.         uint16_t i;
    26.         if(command)
    27.         {
    28.                 SetLCD_DC_High();
    29.         }
    30.         else
    31.         {
    32.                 SetLCD_DC_Low();
    33.         }
    34.   for(i=0;i<8;i++)
    35.   {   
    36.      if(dt & 0x80)      
    37.      { SetLCD_SDIN_High(); }     
    38.      else
    39.      { SetLCD_SDIN_Low(); }   
    40.      SetLCD_SCLK_High();
    41.       __NOP();
    42.      SetLCD_SCLK_Low();
    43.      dt<<=1;
    44.   }
    45. }

    46. void LCD_set_XY(uint8_t X, uint8_t Y)
    47. {
    48.         LCD_write_byte(0x40 | Y, 0);
    49.         LCD_write_byte(0x80 | X, 0);
    50. }

    51. void LCD_clear(void)
    52. {
    53.         uint8_t t;
    54.         uint8_t k;
    55.         LCD_set_XY(0,0);
    56.         for(t=0;t<6;t++)
    57.         {
    58.                 for(k=0;k<84;k++)
    59.                 {
    60.                         LCD_write_byte(0x00,1);
    61.                 }
    62.         }
    63. }

    64. void LCD_write_char(unsigned char c,char dis)
    65. {
    66.     unsigned char line;
    67.     c -= 32;
    68.     for (line=0; line<6; line++)
    69.           if(dis)
    70.           {
    71.       LCD_write_byte(~font6x8[c][line], 1);
    72.           }
    73.           else
    74.           {
    75.                   LCD_write_byte(font6x8[c][line], 1);
    76.           }
    77. }

    78. void LCD_write_english_string(unsigned char X,unsigned char Y,char *s,char dis)
    79. {
    80.         LCD_set_XY(X,Y);
    81.         while (*s)
    82.         {
    83.                 LCD_write_char(*s,dis);
    84.                 s++;
    85.         }
    86. }
    复制代码
    M4核的主程序下,放上如下代码则可产生图3的显示效果。
             LCD_Configuration();
             LCD_init();
             LCD_write_english_string(10,1,"LPC54114",0);
             LCD_write_english_string(36,2,"&",0);
             LCD_write_english_string(20,3,"IOTKIT",0);
             LCD_write_english_string(10,5,"2017.8.1",0);
    图片3.png
    3  LCD5110
    屏显示效果

    未完待续。。。

    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 00:18 , Processed in 0.080667 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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