本帖最后由 jinglixixi_457498010 于 2023-7-7 22:56 编辑

这里就以Telink B91开发板来驱动一个8*8点阵的显示模块,当然在级联的情况下它就可显示更多的内容。
点阵模块与开发板的具体连接关系为:
CS ---PB5
为输出高低电平,所作的定义为:
#defineCLK_high   gpio_set_level(GPIO_PB4, 1)
#defineCLK_low    gpio_set_level(GPIO_PB4, 0)
#defineDIN_high   gpio_set_level(GPIO_PB5, 1)
#defineDIN_low    gpio_set_level(GPIO_PB5, 0)
#defineCS_high   gpio_set_level(GPIO_PB6, 1)
#defineCS_low    gpio_set_level(GPIO_PB6, 0)
以GPIO口方式串行字节数据的函数为:
  1. voidWrite_Max7219_byte(unsignedchar DATA)
  2. {
  3.         unsignedchar i;
  4.         CS_low;
  5.         for(i=8;i>=1;i--)
  6.     {
  7.          CLK_low;
  8.          if(DATA&0x80)
  9.                  DIN_high;
  10.          else
  11.              DIN_low;
  12.          DATA=DATA<<1;
  13.          CLK_high;
  14.      }
  15. }
Max7219向指定地址发送控制字的函数为:
  1. void Write_Max7219(unsignedchar address,unsignedchar dat)
  2. {
  3.          CS_low;
  4.          Write_Max7219_byte(address);
  5.      Write_Max7219_byte(dat);
  6.      CS_high;
  7. }
对Max7219进行初始化的函数为:
  1. voidInit_MAX7219(void)
  2. {
  3.      Write_Max7219(0x09, 0x00);
  4.      Write_Max7219(0x0a, 0x03);
  5.      Write_Max7219(0x0b, 0x07);
  6.      Write_Max7219(0x0c, 0x01);
  7.      Write_Max7219(0x0f, 0x00);
  8. }
为了进行显示,所配置的字库结构为:
  1. unsignedchar disp1[38][8]=
  2. {
  3. {0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0
  4. {0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1
  5. {0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E},//2
  6. ...
  7. {0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22},//A
  8. {0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0},//B
  9. {0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0},//C
  10. ...
  11. {0x8,0x7F,0x49,0x49,0x7F,0x8,0x8,0x8},//中
  12. {0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//国
  13. };
实现点阵模块显示测试的主程序为:
  1. intmain (void)
  2. {
  3.         unsignedchar i,j;
  4.         sys_init(LDO_1P4_LDO_1P8, VBAT_MAX_VALUE_GREATER_THAN_3V6);
  5.         user_read_flash_value_calib();
  6.         CCLK_24M_HCLK_24M_PCLK_24M;
  7.         user_init();
  8.         Init_MAX7219();
  9.         while(1)
  10.         {
  11.             for(j=0;j<38;j++)
  12.             {
  13.                 for(i=1;i<9;i++)
  14.                     Write_Max7219(i,disp1[j][i-1]);
  15.                 delay_ms(1000);
  16.             }
  17.         }
  18.         return 0;
  19. }
经程序的编译与下载,其显示效果如图1至图3所示。
image.png
图1显示数字
image.png
图2 显示字符
image.png
图3显示汉字