在蜂鸟软核DEMO中,有一个点阵块的驱动示例,尽管所用点阵块型号不一定相同,但在了解原理的情况下还是可以统一到一起的。
本人使用的点阵块是LG7088BH,其引脚排列如下:
LG7088BH
注:L(列)低电平点亮,H(行)高电平点亮。
点阵块的行驱动函数为:
void write_line(int x)
{
GPIO_SET(D7,0,output);
GPIO_SET(JP1_2,0,output);
GPIO_SET(JP1_4,0,output);
GPIO_SET(D4,0,output);
GPIO_SET(D8,0,output);
GPIO_SET(JP1_1,0,output);
GPIO_SET(D9,0,output);
GPIO_SET(D12,0,output);
//高电平有效
if (x==0)
{
GPIO_SET(D7,1,output); //0
}
if (x==1)
{
GPIO_SET(JP1_2,1,output);//1
}
if (x==2)
{
GPIO_SET(JP1_4,1,output);//2
}
if (x==3)
{
GPIO_SET(D4,1,output); //3
}
if (x==4)
{
GPIO_SET(D8,1,output); //4
}
if (x==5)
{
GPIO_SET(JP1_1,1,output);//5
}
if (x==6)
{
GPIO_SET(D9,1,output); //6
}
if (x==7)
{
GPIO_SET(D12,1,output); //7
}
}
由此可分析出H1~H8与开发板的连接关系为:
H1-D7 H2-JP1-2 H3-JP1-4 H4- D4 H5-D8 H6-JP1-1 H7-D9 H8-D12
在函数调用时,每调用一次只发出一个指定行的点亮高电平。
点阵块的列驱动函数为:
void write_row(int x)
{
GPIO_SET(JP1_3,1,output);
GPIO_SET(D10,1,output);
GPIO_SET(D11,1,output);
GPIO_SET(D6,1,output);
GPIO_SET(D13,1,output);
GPIO_SET(D5,1,output);
GPIO_SET(D1_TX1,1,output);
GPIO_SET(D0_RX1,1,output);
//低电平有效
if (0x01&table[x]) {
GPIO_SET(JP1_3,0,output);
}
if ((0x01<<1)&table[x])
{
GPIO_SET(D10,0,output);
}
if ((0x01<<2)&table[x])
{
GPIO_SET(D11,0,output);
}
if ((0x01<<3)&table[x])
{
GPIO_SET(D6,0,output);
}
if ((0x01<<4)&table[x])
{
GPIO_SET(D13,0,output);
}
if ((0x01<<5)&table[x])
{
GPIO_SET(D5,0,output);
}
if ((0x01<<6)&table[x])
{
GPIO_SET(D1_TX1,0,output);
}
if ((0x01<<7)&table[x])
{
GPIO_SET(D0_RX1,0,output);
}
}
由此可分析出L1~L8与开发板的连接关系为:
L1-JP1-3 L2-D10 L3-D11 L4-D6 L5-D13 L6-D5 L7-D1 L8-D0
在函数调用时,每调用一次就发出指定行的各列点亮低电平。
点阵块的字符显示函数为:
void letter_display(void)
{
for (x=0;x<8;x++)
{
write_line(x);
write_row(x+skew);
}
}
由此可以分析出该函数的功能是每调用一次就显示一屏的内容,共8*8=64 dot。
此外,由于在write_row()函数中添加了变量skew,其作用相当于一个在字模间游走的偏移量,故可以产生显示字符在点阵块上水平运动的效果。
点阵块驱动的主函数为:
int main(int argc, char **argv)
{
PLIC_init(&g_plic,
PLIC_CTRL_ADDR,
PLIC_NUM_INTERRUPTS,
PLIC_NUM_PRIORITIES);
reset_demo();
while (1){
letter_display(); //字符显示
}
return 0;
}
由此可以分析出,该程序是通过调用显示函数letter_display()来维持显示,并产生字幕滚动效果的。
实现程序下载的方法是:
图1 目录内容
make software PROGRAM=demo_gpio BOARD=Perf-V-creative-board
编译后的结果如图2所示:
图2 编译结果
make upload PROGRAM= demo_gpio BOARD=Perf-V-creative-board
上传后的结果如图3所示:
图3 完成上传
此时,点阵块的显示效果如图4所示。
值得指出的是:似乎用到PMOD接口的4个引脚全没有正常工作,从而导致第2、3、6列及第8行没有显示内容,可考虑使用A0~A3的引脚来代替解决。
图4 显示效果
动画效果:
引用: Jacktang 发表于 2021-5-26 15:07 点阵块显示如搞一个图案效果明显了
有道理,此外它的速度贼快也不便查看效果,把编译软核程序的方法掌握后,再对程序加以修改测试。
蜂鸟软核,系统号,想搞个系统测试下