[LKS32 硬件] [ LKS32MC037E开发板评测 ]+ GPIO口使用及OLED屏显示驱动

[复制链接]
 楼主| jinglixixi 发表于 2023-1-3 08:37 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-1-4 08:28 编辑

由于开发板是为控制电机而设计的,因此在开发板上除了电源指示灯外,并无其它可供观察的器件,故其上电效果十分简单,见图1所示。
1.jpg
1 上电效果


其实,换个角度看还可见到功率底板上也有一个LED灯被点亮,见图2所示。
2.jpg
2 上电效果

那么是否能点亮其它的LED灯来掌握GPIO口的使用呢?

方法倒是有,那就是为开发板外挂一个LED灯模块。为此,将一个LED模块的控制引脚连接到了P1.6以控制该LED模块的亮灭,详见图3所示。
3.jpg
3 外挂LED模块


然后再为它编写一个控制LED灯的主程序,其内容如下:
  1. int main(void) {

  2.     SoftDelay(50000);
  3.     __disable_irq();
  4.     Hardware_init();
  5.     sys_init();
  6.     while(1)
  7.     {
  8.                     GPIO_WriteBit(GPIO1, GPIO_Pin_6,0);
  9.                     SoftDelay(500000);
  10.                     GPIO_WriteBit(GPIO1, GPIO_Pin_6,1);
  11.                     SoftDelay(500000);
  12.     }
  13. }


经程序的编译下载,该LED模块就可以闪烁起来,GPIO口输出功能的测试也就解决了。

以此为基础,再来尝试一下I2C接口OLED屏的显示驱动。
该显示屏是一款0.96寸双色屏,其显示分辨率为128*64像素点,它与开发板的连接关系为:
SCL---P1. 4
SDA---P1. 6
为这2个引脚输出高低电平的语句定义为:
#define SCL_high  GPIO_WriteBit(GPIO1, GPIO_Pin_4,1)
#define SCL_low   GPIO_WriteBit(GPIO1, GPIO_Pin_4,0)
#define SDA_high  GPIO_WriteBit(GPIO1, GPIO_Pin_6,1)
#define SDA_low   GPIO_WriteBit(GPIO1, GPIO_Pin_6,0)
相应的引脚功能配置引脚为:
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_6;
GPIO_InitStruct.GPIO_PuPd =  GPIO_PuPd_UP;
GPIO_Init(GPIO1, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_4;
GPIO_InitStruct.GPIO_PuPd =  GPIO_PuPd_UP;
GPIO_Init(GPIO1, &GPIO_InitStruct);


为了快速检测程序的驱动正确性,这里将清屏函数改造为一个显示水平线的函数,其程序内容如下:
  1. void OLED_ line(void)
  2. {
  3.     uint8_t i,n;
  4.     for(i=0;i<8;i++)
  5.     {
  6.         OLED_WR_Byte (0xb0+i,OLED_CMD);
  7.         OLED_WR_Byte (0x00,OLED_CMD);
  8.         OLED_WR_Byte (0x10,OLED_CMD);
  9.         for(n=0;n<128;n++) OLED_WR_Byte(0xf0,OLED_DATA);
  10.     }
  11. }


相应的测试主程序为:
  1. int main(void) {

  2.     SoftDelay(50000);
  3.     __disable_irq();
  4.     Hardware_init();
  5.     sys_init();
  6.     __enable_irq();
  7.     OLED_Init();
  8.     OLED_line();
  9.     while(1);
  10. }

经下载测试,其显示效果如图4所示。
4.jpg
4 显示水平线条

由此说明它是可以驱动OLED屏进行显示的,随后又对字符串的显示功能进行测试。

实现字符串显示的函数为:
  1. void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
  2. {
  3.     unsigned char j=0;
  4.     while (chr[j]!='\0')
  5.     {
  6.             OLED_ShowChar(x,y,chr[j],Char_Size);
  7.             x+=8;
  8.             if(x>120){x=0;y+=2;}
  9.             j++;
  10.     }
  11. }


实现字符串显示的主程序为:
  1. int main(void) {

  2.     SoftDelay(50000);
  3.     __disable_irq();
  4.     Hardware_init();
  5.     sys_init();
  6.     __enable_irq();
  7.     OLED_Init();
  8.     OLED_Clear();
  9.     OLED_ShowString(20,0,"0123456789",16);
  10.     while(1);
  11. }


经程序的下载测试,其显示效果如图5所示。
5.jpg
5 显示数字字符串

但稍感遗憾的是LKS32MC037E的存储空间只有32KB,所以在程序中存放字符库时,会提示已超出存储空间。为此,只好对字库进行裁剪,在使用6*8的字符库时,可通过程序编译。

相应的显示测试主程序为:
  1. int main(void) {

  2.     SoftDelay(50000);
  3.     __disable_irq();
  4.     Hardware_init();
  5.     sys_init();
  6.     __enable_irq();
  7.     OLED_Init();
  8.     OLED_Clear();
  9.     OLED_ShowString(20,0,"LKS32MC037E",8);
  10.     OLED_ShowString(20,2,"OLED Test",8);
  11.     OLED_ShowString(20,6,"jinglixixi",8);
  12.     while(1);
  13. }

在程序下载后,其显示效果如图6所示。
6.jpg
6 字符串显示

caigang13 发表于 2023-1-4 00:05 来自手机 | 显示全部楼层
这个显示屏的出镜率有点高啊。
jf101 发表于 2023-1-4 11:12 | 显示全部楼层
感觉挺实用的,从外部掌握内部
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部