打印
[LKS32 硬件]

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

[复制链接]
579|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2023-1-4 08:28 编辑

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


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

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

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


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

    SoftDelay(50000);
    __disable_irq();
    Hardware_init();
    sys_init();
    while(1)
    {
                    GPIO_WriteBit(GPIO1, GPIO_Pin_6,0);
                    SoftDelay(500000);
                    GPIO_WriteBit(GPIO1, GPIO_Pin_6,1);
                    SoftDelay(500000);
    }
}


经程序的编译下载,该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);


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


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

    SoftDelay(50000);
    __disable_irq();
    Hardware_init();
    sys_init();
    __enable_irq();
    OLED_Init();
    OLED_line();
    while(1);
}

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

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

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


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

    SoftDelay(50000);
    __disable_irq();
    Hardware_init();
    sys_init();
    __enable_irq();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(20,0,"0123456789",16);
    while(1);
}


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

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

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

    SoftDelay(50000);
    __disable_irq();
    Hardware_init();
    sys_init();
    __enable_irq();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(20,0,"LKS32MC037E",8);
    OLED_ShowString(20,2,"OLED Test",8);
    OLED_ShowString(20,6,"jinglixixi",8);
    while(1);
}

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

使用特权

评论回复
沙发
caigang13| | 2023-1-4 00:05 | 只看该作者
这个显示屏的出镜率有点高啊。

使用特权

评论回复
板凳
jf101| | 2023-1-4 11:12 | 只看该作者
感觉挺实用的,从外部掌握内部

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

2756

帖子

38

粉丝