jinglixixi 发表于 2021-8-29 10:42

【AB32VG1开发板测评】串行点阵模块显示驱动

<p style="margin-bottom:16px">串行点阵模块是一种以MAX7219为控制芯片的点阵显示模块,在单级使用的情况下,一片MAX7219可控制一块8*8点阵的显示块,若采用级联的方式,则可驱动多个点阵块,以实现多个字符的同时显示,实现点阵信息屏的显示效果。</p>

<p>该模块的电路原理图如图1所示:</p>

<p>图1&nbsp;&nbsp;&nbsp;模块电路图</p>

<p>点阵模块与开发板的连接关系为:</p>

<p>DIN-- PE2</p>

<p>CS&nbsp; --PA0</p>

<p>CLK-- PE3</p>

<p>&nbsp;</p>

<p>MAX7219的初始化函数为:</p>

<pre>
<code class="language-cpp">void Init_MAX7219(void)
{
  Write_Max7219(0x0b, 0x07);
  Write_Max7219(0x0c, 0x01);
  Write_Max7219(0x0f, 0x00);
}</code></pre>

<p style="text-align:justify">其它2个辅助函数为:</p>

<pre>
<code class="language-cpp">void Write_Max7219_byte(unsigned char DATA)
{
  unsigned char i;
  rt_pin_write(pin_cs, PIN_LOW);
  for(i=8;i&gt;=1;i--) {
  rt_pin_write(pin_scl, PIN_LOW);
  if(DATA&amp;0x80)  rt_pin_write(pin_sda, PIN_HIGH);
  else  rt_pin_write(pin_sda, PIN_LOW);
  DATA=DATA&lt;&lt;1;
  rt_pin_write(pin_scl, PIN_HIGH);
  }
}


void Write_Max7219(char address,char dat)
{
   rt_pin_write(pin_cs, PIN_LOW);
   Write_Max7219_byte(address);
   Write_Max7219_byte(dat);
   rt_pin_write(pin_cs, PIN_HIGH);
}</code></pre>

<p style="text-align:justify">相关显示的字模被存放在数组中,其结构为:</p>

<p>unsigned char disp={</p>

<p>{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0</p>

<p>{0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1</p>

<p>{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E},&nbsp; //2</p>

<p>...</p>

<p>}</p>

<p>实现图2所示显示效果的主程序为:</p>

<pre>
<code class="language-cpp">int main(void)
{
    uint32_t cnt = 0;
    uint32_t i,j;
    pin = rt_pin_get("PE.1");
    rt_pin_mode(pin, PIN_MODE_OUTPUT);
    pin_cs = rt_pin_get("PA.0");
    pin_scl = rt_pin_get("PE.3");
    pin_sda = rt_pin_get("PE.2");
    rt_pin_mode(pin_cs, PIN_MODE_OUTPUT);
    rt_pin_mode(pin_scl, PIN_MODE_OUTPUT);
    rt_pin_mode(pin_sda, PIN_MODE_OUTPUT);
    Init_MAX7219();
    while(1)
    {
        for(j=0;j&lt;38;j++)
        {
            for(i=1;i&lt;9;i++)
            Write_Max7219(i,disp);
            rt_pin_write(pin, PIN_LOW);
            rt_thread_mdelay(500);
            rt_pin_write(pin, PIN_HIGH);
            rt_thread_mdelay(500);
        }
    }
}</code></pre>

<p>其中,内层的循环是为了完成单个字符的显示,而外层的循环则是负责将字符库中的内容遍寻显示一轮。</p>

<p>在显示过程中,每显示完一个字符,板上的LED就切换一次显示状态。</p>

<p style="text-align:justify">图2 显示效果</p>

Jacktang 发表于 2021-8-29 13:36

<p>看效果点阵信息屏的显示效果还行</p>

<p>&nbsp;</p>

jinglixixi 发表于 2021-8-30 00:11

Jacktang 发表于 2021-8-29 13:36
看效果点阵信息屏的显示效果还行

&nbsp;

<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/handshake.gif" width="48" /></p>

w494143467 发表于 2021-8-30 09:53

<p>不错不错!</p>

se7ens 发表于 2021-9-2 14:22

<p>这个是类似I2C写点阵数据吗</p>

<p>我之前看了一个用AiP650控制多个点阵模块的方案也是用I2C来控制的</p>

jinglixixi 发表于 2021-9-2 23:40

se7ens 发表于 2021-9-2 14:22
这个是类似I2C写点阵数据吗

我之前看了一个用AiP650控制多个点阵模块的方案也是用I2C来控制的

<p>可以视为带片选的I2C吧</p>
页: [1]
查看完整版本: 【AB32VG1开发板测评】串行点阵模块显示驱动