打印

LP-MSPM0L1306开发板试用体验---数码管显示驱动篇

[复制链接]
333|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本打算先使用GPIO口实现一个I2C接口OLED屏的显示,在几经调试无果的情况下,只好先放弃这个选择。
为了确保能有所收获,就选取了串行数码管显示模块作为突破口,其实现的显示效果如下图所示。
显示效果图


该串行数码管显示模块与开发板的连接关系为:
SCL---PA27
SDA---PA26
CS---PA13

也就是说它借用了RGB_LED所使用的引脚,这也再次体现了开发板所采用的设计方式的好处。

为便于向串行数码管显示模块提供高低电平的输出,其定义的语句为:
#define CLK_SetHigh()   DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_27)
#define CLK_SetLow()    DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_27)

#define DIN_SetHigh()   DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_26)
#define DIN_SetLow()    DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_26)

#define CS_SetHigh()    DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_13)  //CS
#define CS_SetLow()     DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_13)


为确保输出信号的稳定与可靠,特配置了一个短时的延时函数,其内容为:
void delay(unsignedint n)
{
    unsignedint uci;
    unsignedint count=2;
    for(uci=0;uci<n;uci++)
    {
        count=4;
        while(count--);
    }
}

由于该串行数码管显示模块所使用的关键芯片为MAX7219,故为它配置了一个串行发送字节数据的函数,其内容为:
void Write_Max7219_byte(char DATA)
{
   char i;
   CS_SetLow();
   delay(10);
   for(i=8;i>=1;i--)
   {
        CLK_SetLow();
        if(DATA&0x80)
          DIN_SetHigh();
        else
          DIN_SetLow();
        delay(10);
        DATA=DATA<<1;
        CLK_SetHigh();
        delay(10);
   }
}

以函数Write_Max7219_byte()为基础,向指定地址发送数据的函数为:
voidWrite_Max7219(char address,char dat)
{
     CS_SetLow();
     Write_Max7219_byte(address);
     Write_Max7219_byte(dat);
     CS_SetHigh();
}

对于串行数码管显示模块,其初始化函数为:
voidInit_MAX7219(void)
{
   Write_Max7219(0x09, 0xff);
   Write_Max7219(0x0a, 0x02);
   Write_Max7219(0x0b, 0x07);
   Write_Max7219(0x0c, 0x01);
   Write_Max7219(0x0f, 0x00);
}

要实现串行数码管显示模块的测试,相应的主程序为:
int main(void)
{
    SYSCFG_DL_init();
    Init_MAX7219();
    Write_Max7219(1,1);
    Write_Max7219(2,2);
    Write_Max7219(3,3);
    Write_Max7219(4,4);
    Write_Max7219(5,5);
    Write_Max7219(6,6);
    Write_Max7219(7,7);
    Write_Max7219(8,8);
    while(1);
}

这样,就实现了串行数码管显示模块的驱动,后面再有数值显示的任务就可以交给它来解决了。

使用特权

评论回复
沙发
caigang13| | 2023-10-10 07:41 | 只看该作者
GPIO模拟IIC不是很easy嘛

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2023-10-10 08:35 | 只看该作者
caigang13 发表于 2023-10-10 07:41
GPIO模拟IIC不是很easy嘛

是呀,但是OLED屏一点反应也没有。

使用特权

评论回复
地板
lulugl| | 2023-10-10 18:46 | 只看该作者
是不是电平不对呀,用示波器看看电平对不对

使用特权

评论回复
5
jinglixixi|  楼主 | 2023-10-10 19:09 | 只看该作者
lulugl 发表于 2023-10-10 18:46
是不是电平不对呀,用示波器看看电平对不对

5V和3.3V的都试了,电阻上拉也试过,就是没戏。

使用特权

评论回复
6
Tristan_C| | 2023-10-11 13:39 | 只看该作者
可以逻辑分析仪再看看

使用特权

评论回复
7
jinglixixi|  楼主 | 2023-10-11 16:51 | 只看该作者
Tristan_C 发表于 2023-10-11 13:39
可以逻辑分析仪再看看

木有呀!

使用特权

评论回复
8
xyz549040622| | 2023-10-11 22:32 | 只看该作者
官方有基于I2C的程序,可以参考看看,还有那个延时函数,官方也有自己的延时函数,比较准确,不需要自己重新写的。

使用特权

评论回复
9
jinglixixi|  楼主 | 2023-10-12 09:00 | 只看该作者
xyz549040622 发表于 2023-10-11 22:32
官方有基于I2C的程序,可以参考看看,还有那个延时函数,官方也有自己的延时函数,比较准确,不需要自己重 ...

有标准的延时函数就太好了,其实搞I2C就是基于延时函数。

使用特权

评论回复
10
xyz549040622| | 2023-10-12 21:30 | 只看该作者
jinglixixi 发表于 2023-10-12 09:00
有标准的延时函数就太好了,其实搞I2C就是基于延时函数。

delay_cycles(cycles),官方的延时是基于这个函数的。

使用特权

评论回复
11
jinglixixi|  楼主 | 2023-10-13 08:42 | 只看该作者
xyz549040622 发表于 2023-10-12 21:30
delay_cycles(cycles),官方的延时是基于这个函数的。

好的,后面就用它了!

使用特权

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

本版积分规则

446

主题

2675

帖子

37

粉丝