请教:谁能通俗易懂的讲解一下点阵扫描(行扫描、列扫描)的原理及工作过程?

请教:谁能通俗易懂的讲解一下点阵扫描(行扫描、列扫描)的原理及工作过程?,第1张

以8*8LED共阳笑祥点阵为例,先将第一行的8个列数据准备好(例如11000011),之后将第1行置高(=1),此时中间4个亮。搜稿

同理,将准备好的第2行数据置于列电极上,之后第2行置高时显示,此时第一行不显示,如此,实现逐行扫描,每碰漏搏次只有一行的数据是显示的。

谈LED点阵的扫描原理带脊,只要一看LED点阵的原理图就一目了然了,如下图:

图中,A--H可以看做行,1--7看做列;假如我们给点阵送人一个列数据0x80(1000 0000),并且咐银同时送人一个行数据0x7f(0111 1111),此时我们就点亮了这个点阵左上角的那颗LED发光管,如果我们不停的行数据:0111 1111;1011 1111;1101 1111;1110 1111;1111 0111;1111 1011;1111 1101;1111 1110,这8个数据周而复始的送人点阵就是行扫描的过程,这个过程一般采用74HC138等译码器来完成,而在对应的行数据送人的同时也送人1--7的列数据,例如:

行=0111 1111,列=1000 0000

行=1011 1111,列=0100 0000

行=1101 1111,列=1010 0000

行=1110 1111,列=1001 0000

行=1111 0111,列=1000 1000

行=1111 1011,列=1000 0100

行=1111 1101,列=1000 0010

行=1111 1110,列=1000 0001

此时程序循环执行的结果会在点阵屏上显示左上至右下的对角斜线。

仔细想想应该不难理解。

在代码编写上,实现上述功能有很多方法,最长用的就是for循环衡行宴,如果你百度资料会发现,大凡点阵显示代码中都会在显示函数中引用for循环,而且根据点阵数的不同会有:

for(i=0i<8i++)或for(i=0i<16i++)或for(i=0i<32i++)这就是对于8行、16行、32行点阵的扫描算法。

就说到这里吧,更多的知识请百度搜索吧。

假如现实以下的字形,对应的数组如 a[8] = {0x01,0x02,0x02,0x03,0x40,0x40}

当实现循环左移时迅源,将a[i+1]的蔽做值赋给a[i]将亩并态a[0]赋给a[7];当然说的不大清楚 给你个例子:

#define LEDPORT P1

unsigned char a[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}

unsigned char i = 0

unsigned char j = 0

unsigned char k = 0

for(i=0i<8i++)

{

for (j=0j<8j++)

{

if (j+i >= 8)

{

LEDPORT = a[k++]

}

else

{

LEDPORT = a[j+i]

}

delay()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8195094.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存