【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" > </p>
<p align="left" >图1 串行数码管模块</p>
<p align="left" > </p>
<p align="left" >为实现高低电平信号的输出,所做的语句定义为:</p>
<p align="left" >#defineDIN_SetHigh() Cy_GPIO_Set(P5_2_PORT, P5_2_NUM)</p>
<p align="left" >#defineDIN_SetLow() Cy_GPIO_Clr(P5_2_PORT, P5_2_NUM)</p>
<p align="left" >#defineCLK_SetHigh() Cy_GPIO_Set(P5_3_PORT, P5_3_NUM)</p>
<p align="left" >#defineCLK_SetLow() Cy_GPIO_Clr(P5_3_PORT, P5_3_NUM)</p>
<p align="left" >#defineCS_SetHigh() Cy_GPIO_Set(P5_5_PORT, P5_5_NUM)</p>
<p align="left" >#defineCS_SetLow() Cy_GPIO_Clr(P5_5_PORT, P5_5_NUM)</p>
<p align="left" > </p>
<p align="left" >为保证输出信号的稳定和可靠,所配置的延时函数为:</p>
<pre>
<code class="language-cpp">void delay_ns(unsignedint n)
{
unsignedint i;
unsignedint count=4;
for(i=0;i<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>=1;i--)
{
CLK_SetLow();
delay_ns(100);
if(DATA&0x80)
DIN_SetHigh();
else
DIN_SetLow();
delay_ns(100);
DATA=DATA<<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" > </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> <p>主控max7219这个IC应该是串行输入/输出共阴极数码管点阵的驱动芯片,大厂的IC还是比较好用的</p>
Jacktang 发表于 2024-1-21 07:31
主控max7219这个IC应该是串行输入/输出共阴极数码管点阵的驱动芯片,大厂的IC还是比较好用的
<p>没错!!!</p>
页:
[1]