双核的LPC4114 Lite在功能方面已称的上十分丰富,如再与机智云的功能板结合在一起,那更会是锦上添花。首先我们来看一下机智云功能板有哪些资源,它共RGB_LED、小电机、红外感应器、小按键、温湿度传感器、WIFI模块及OLED接口等,如图1所示。限于时间的关系,这里就为RGB_LED、小电机、红外感应、小按键及OLED接口配上驱动,并利用双核间的功能将他们组合在一起以发挥功效。 图1 机智云功能板
1.OLED接口 利用功能板所提供的OLED接口,配上一块LCD5110屏来进行信息显示,该接口如图2所示。由于两者的接口并非一致,所以需稍加改造,具体的做法是将GND与NC引脚短接,这样就能给LCD5110的SCE引脚提供所需的片选信号。其它引脚只需在定义上加以修改即可。 图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的引脚配置函数如下: - void LCD_Configuration(void)
- {
- CLOCK_EnableClock(kCLOCK_Gpio0);
- CLOCK_EnableClock(kCLOCK_Gpio1);
- gpio_pin_config_t oled_config = { kGPIO_DigitalOutput, 0,};
- GPIO_PinInit(GPIO, 0U, 12U, &oled_config);
- GPIO_PinInit(GPIO, 0U, 11U, &oled_config);
- GPIO_PinInit(GPIO, 0U, 14U, &oled_config);
- GPIO_PinInit(GPIO, 1U, 8U, &oled_config);
- GPIO_PinInit(GPIO, 1U, 9U, &oled_config);
- SetLCD_LED_High();
- SetLCD_RST_High();
- }
- void LCD_init(void)
- {
- LCD_write_byte(0x21,0);
- LCD_write_byte(0xc3,0);
- LCD_write_byte(0x10,0);
- LCD_write_byte(0x20,0);
- LCD_write_byte(0x0C,0);
- LCD_clear();
- }
- void LCD_write_byte(uint8_t dt, uint8_t command)
- {
- uint16_t i;
- if(command)
- {
- SetLCD_DC_High();
- }
- else
- {
- SetLCD_DC_Low();
- }
- for(i=0;i<8;i++)
- {
- if(dt & 0x80)
- { SetLCD_SDIN_High(); }
- else
- { SetLCD_SDIN_Low(); }
- SetLCD_SCLK_High();
- __NOP();
- SetLCD_SCLK_Low();
- dt<<=1;
- }
- }
- void LCD_set_XY(uint8_t X, uint8_t Y)
- {
- LCD_write_byte(0x40 | Y, 0);
- LCD_write_byte(0x80 | X, 0);
- }
- void LCD_clear(void)
- {
- uint8_t t;
- uint8_t k;
- LCD_set_XY(0,0);
- for(t=0;t<6;t++)
- {
- for(k=0;k<84;k++)
- {
- LCD_write_byte(0x00,1);
- }
- }
- }
- void LCD_write_char(unsigned char c,char dis)
- {
- unsigned char line;
- c -= 32;
- for (line=0; line<6; line++)
- if(dis)
- {
- LCD_write_byte(~font6x8[c][line], 1);
- }
- else
- {
- LCD_write_byte(font6x8[c][line], 1);
- }
- }
- void LCD_write_english_string(unsigned char X,unsigned char Y,char *s,char dis)
- {
- LCD_set_XY(X,Y);
- while (*s)
- {
- LCD_write_char(*s,dis);
- s++;
- }
- }
复制代码在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);
未完待续。。。
|