| 本打算先使用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);
}
 这样,就实现了串行数码管显示模块的驱动,后面再有数值显示的任务就可以交给它来解决了。 
 |