
同理,将准备好的第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()
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)