jinglixixi 发表于 2024-1-21 01:03

【SoC 6 BLE原型开发板】+串行数码管显示驱动篇

<div class='showpostmsg'><p>上次尝试利用扩展接口对GPIO口的使用,这次就利用其中的GPIO口来为开发板配置一个串行数码管显示模块,以实现数据显示的作用。</p>

<p >该串行数码管模块如图1所示,其主控芯片为MAX7219,是一种将串行信号转换为并行信号的芯片。</p>

<p >该显示模块共有5个引脚,除电源占用的2个引脚外,其余3个引脚的作用及连接关系为:</p>

<p >DIN----数据引脚---P5.2</p>

<p >CLK----时钟引脚---P5.3</p>

<p >CS ----片选引脚---P5.5</p>

<p align="left" >&nbsp; &nbsp;&nbsp;</p>

<p align="left" >图1 串行数码管模块</p>

<p align="left" >&nbsp;</p>

<p align="left" >为实现高低电平信号的输出,所做的语句定义为:</p>

<p align="left" >#defineDIN_SetHigh()&nbsp;&nbsp; Cy_GPIO_Set(P5_2_PORT, P5_2_NUM)</p>

<p align="left" >#defineDIN_SetLow()&nbsp;&nbsp;&nbsp; Cy_GPIO_Clr(P5_2_PORT, P5_2_NUM)</p>

<p align="left" >#defineCLK_SetHigh()&nbsp;&nbsp; Cy_GPIO_Set(P5_3_PORT, P5_3_NUM)</p>

<p align="left" >#defineCLK_SetLow()&nbsp;&nbsp;&nbsp; Cy_GPIO_Clr(P5_3_PORT, P5_3_NUM)</p>

<p align="left" >#defineCS_SetHigh()&nbsp;&nbsp;&nbsp; Cy_GPIO_Set(P5_5_PORT, P5_5_NUM)</p>

<p align="left" >#defineCS_SetLow()&nbsp;&nbsp;&nbsp;&nbsp; Cy_GPIO_Clr(P5_5_PORT, P5_5_NUM)</p>

<p align="left" >&nbsp;</p>

<p align="left" >为保证输出信号的稳定和可靠,所配置的延时函数为:</p>

<pre>
<code class="language-cpp">void delay_ns(unsignedint n)
{
    unsignedint i;
    unsignedint count=4;
    for(i=0;i&lt;n; i++)
    {
          count=4;
          while(count--);
    }
}</code></pre>

<p align="left" >实现字节数据串行发送的函数为:</p>

<pre>
<code class="language-cpp">void Write_Max7219_byte(char DATA)
{
   char i;
   CS_SetLow();
   delay_ns(100);
   for(i=8;i&gt;=1;i--)
   {
       CLK_SetLow();
       delay_ns(100);
       if(DATA&amp;0x80)
           DIN_SetHigh();
       else
           DIN_SetLow();
       delay_ns(100);
       DATA=DATA&lt;&lt;1;
       CLK_SetHigh();
       delay_ns(100);
   }
}</code></pre>

<p align="left" >向指定单元发送数据的函数为:</p>

<pre>
<code class="language-cpp">void Write_Max7219(char address,char dat)
{
     CS_SetLow();
     delay_ns(100);
     Write_Max7219_byte(address);
     Write_Max7219_byte(dat);
     CS_SetHigh();
     delay_ns(100);
}</code></pre>

<p align="left" >对串行数码管模块进行初始化的函数为:</p>

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

<p align="left" >实现串行数码管驱动测试的主程序为:</p>

<pre>
<code class="language-cpp">int main(void)
{
    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);
}</code></pre>

<p align="left" >经程序的编译和下载,其运行的显示效果如图2所示。</p>

<p align="left" > &nbsp;&nbsp;&nbsp;</p>

<p>图2 串行数码管测试效果</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2024-1-21 07:31

<p>主控max7219这个IC应该是串行输入/输出共阴极数码管点阵的驱动芯片,大厂的IC还是比较好用的</p>

jinglixixi 发表于 2024-1-21 09:57

Jacktang 发表于 2024-1-21 07:31
主控max7219这个IC应该是串行输入/输出共阴极数码管点阵的驱动芯片,大厂的IC还是比较好用的

<p>没错!!!</p>
页: [1]
查看完整版本: 【SoC 6 BLE原型开发板】+串行数码管显示驱动篇