【翌创ET6001测评】串行数码管显示驱动
<p>本打算用GPIO口实现一个I2C接口OLED屏的显示,在几经调试无果的情况下,只好先放弃这个选择。</p><p >于是选取了串行数码管显示模块作为突破口,经测试其显示效果良好。</p>
<p >该显示模块以MAX7219为主控芯片,可显示8位数值,并支持级联使用。除电源外,它只需3个GPIO口,故十分节省引脚资源。</p>
<p > </p>
<p>图1 串行数码管显示模块</p>
<p > </p>
<p >该显示模块与开发板的连接关系为:</p>
<p >SCL---GPIO2_2</p>
<p >SDA---GPIO2_3</p>
<p >CS---GPIO2_4</p>
<p > </p>
<p >为便于向串行数码管显示模块提供高低电平的输出,所定义的语句为:</p>
<p >#define CLK_SetLow GPIO_WritePin(GPIO2, GPIO_PIN_02, RESET)</p>
<p >#define CLK_SetHigh GPIO_WritePin(GPIO2, GPIO_PIN_02, SET)</p>
<p > </p>
<p >#define DIN_SetLow GPIO_WritePin(GPIO2, GPIO_PIN_03, RESET)</p>
<p >#define DIN_SetHigh GPIO_WritePin(GPIO2, GPIO_PIN_03, SET)</p>
<p > </p>
<p >#define CS_SetLow GPIO_WritePin(GPIO2, GPIO_PIN_04, RESET)</p>
<p >#define CS_SetHigh GPIO_WritePin(GPIO2, GPIO_PIN_04, SET)</p>
<p > </p>
<p>由于该串行数码管显示模块所使用的关键芯片为MAX7219,故为它配置了一个串行发送字节数据的函数,其内容为:</p>
<pre>
<code class="language-cpp">static void Write_Max7219_byte(char DATA)
{
char i;
CS_SetLow;
delay(10);
for(i=8;i>=1;i--)
{
CLK_SetLow;
if(DATA&0x80)
DIN_SetHigh;
else
DIN_SetLow;
delay(10);
DATA=(char)(DATA<<1);
CLK_SetHigh;
delay(10);
}
}</code></pre>
<p> </p>
<p>以函数Write_Max7219_byte()为基础,向指定地址发送数据的函数为:</p>
<pre>
<code class="language-cpp">static void Write_Max7219(char address,char dat)
{
CS_SetLow;
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
CS_SetHigh;
}</code></pre>
<p> </p>
<p>对于串行数码管显示模块,其初始化函数为:</p>
<pre>
<code class="language-cpp">static 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> </p>
<p>要实现串行数码管显示模块的测试,相应的主程序为:</p>
<pre>
<code class="language-cpp">int main(void)
{
EVB_LEDInit();
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);
while (1)
{
GPIO_TogglePin(GPIO_LED_PORT, GPIO_LED_PIN);
__Delay(0x5FFFFF);
}
}</code></pre>
<p> </p>
<p>经程序编译与运行,其效果如图2所示。</p>
<p> </p>
<p>图2 显示效果图</p>
<p > </p>
<p >这样,就实现了串行数码管模块的显示驱动,后面再有数值显示的需要就可以交它来完成。</p>
<p>模拟IIC接口呢?硬件不同的芯片不同的问题 </p>
秦天qintian0303 发表于 2024-10-27 12:25
模拟IIC接口呢?硬件不同的芯片不同的问题
<p>模拟的,这样移植使用时比较方便。</p>
页:
[1]