[N32WB031_STB开发板测评]+点阵模块显示驱动
<div class='showpostmsg'> 本帖最后由 jinglixixi 于 2023-5-6 09:31 编辑<p>有了GPIO口的支持,就可以拿点阵模块来试一试手了。</p>
<p>所用的点阵模块是一块8*8点阵的显示模块,共有5个引脚,除电源引脚外,另外3个引脚与开发板的连接关系为:</p>
<p>SCL ---PB8</p>
<p>SDA ---PB4</p>
<p>CS ---PB5</p>
<p>对所用引脚的工作模式配置函数为:</p>
<pre>
<code class="language-cpp">void MAX7219_Init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin =GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_8;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
}
</code></pre>
<p>Max7219发送字节数据的函数为:</p>
<pre>
<code class="language-cpp">void Write_Max7219_byte(char DATA)
{
char i;
GPIO_ResetBits(GPIOB, GPIO_PIN_5); //CS
for(i=8;i>=1;i--)
{
GPIO_ResetBits(GPIOB, GPIO_PIN_8);//SCL
if(DATA&0x80)
{
GPIO_SetBits(GPIOB, GPIO_PIN_4); // SDA;
}
else
{
GPIO_ResetBits(GPIOB, GPIO_PIN_4);
}
DATA=DATA<<1;
GPIO_SetBits(GPIOB, GPIO_PIN_8);
}
}
</code></pre>
<p>Max7219向指定地址发送数据的函数为:</p>
<pre>
<code class="language-cpp">void Write_Max7219(char address,char dat)
{
GPIO_ResetBits(GPIOB, GPIO_PIN_5);
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
GPIO_SetBits(GPIOB, GPIO_PIN_5);
}
</code></pre>
<p>对Max7219进行初始化的函数为:</p>
<pre>
<code class="language-cpp">void Init_MAX7219_D(void)
{
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}
</code></pre>
<p>以此为基础,实现点阵模块显示的主程序为:</p>
<pre>
<code class="language-cpp">int main(void)
{
unsigned char i,j;
MAX7219_Init();
Init_MAX7219_D();
while(1)
{
for(j=0;j<38;j++)
{
for(i=1;i<9;i++)
{
Write_Max7219(i,disp);
}
Delay(0x28FFFF);
}
}
}
</code></pre>
<p>经程序的编译与下载,其运行的效果如图1至图3所示。</p>
<p> 图1 显示数字</p>
<p> 图2 显示字符</p>
<p></p>
<p>图3 显示汉字</p>
<p>显示这些内容的字库结构为:</p>
<p>const 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>...</p>
<p>{0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22},//A</p>
<p>{0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0},//B</p>
<p>...</p>
<p>{0x8,0x7F,0x49,0x49,0x7F,0x8,0x8,0x8},//?</p>
<p>{0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//?</p>
<p>};</p>
<p> </p>
<p>由于该点阵模块是可以级联来使用,故为了同时可以显示出更多的内容,可将几个同样的点阵模块串联起来来使用。 </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> 哇,李老师又玩出新花样了,感谢分享! <p>模拟SPI走起 </p>
<p>看起来真是不错,这板子值得玩啊</p>
lugl4313820 发表于 2023-5-1 14:44
哇,李老师又玩出新花样了,感谢分享!
<p>先试试水,打算驱动一个16*64点阵的屏。</p>
jinglixixi 发表于 2023-5-2 00:27
先试试水,打算驱动一个16*64点阵的屏。
<p>强了哦,期待精彩继续!</p>
页:
[1]