led点阵8×8滚动显示原理
8x8点阵为例,它共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;
如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。
在8x8点阵led上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。
8x8点阵led工作原理说明 :8x8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:
一根竖柱:对应的列置1,而行则采用扫描的方法来实现。
一根横柱:对应的行置0,而列则采用扫描的方法来实现。
led点阵屏编程
点阵的显示原理是行扫描列发送字码,或者是列扫描行发送字码。当点阵屏大于16×16时,普通的32个i/o口的 单片机 是无法直接连接了,必须通过串行输入/输出寄存器或者锁存器等i/o口扩展,例如锁存器:74hc373、74hc273等;串行输入并行输出寄存器:74hc595、74hc164等;i/o口扩展芯片:8255、8155等。
74hc273是8位数据/地址锁存器,d0~d7为数据出入端;q0~q7为数据输出端;wr为主清除端,低电平触发,将锁存数据清零;clk是触发端,上升沿触发,即当clk从低到高电平时,d0~d7的数据通过芯片输出到q0~q7,为0时将数据锁存。
74hc273的测试程序如下:
#include
sbit clk=p3^0 ;
sbit mr=p3^1;
#define uchar unsigned char
#define uint unsigned int
//数码管字型表,对应0,1,2,3,4,5,6,7,8,9//
uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint i )
{
uchar j;
for(;i!=0;i--)
{for(j=200;j!=0;j--) ;}
}
void main(void)
{
uchar n;
mr=1;
while(1)
{
for(n=0;n《10;n++)
{
clk=0;
delay(300); //延时为了方便看到管脚电平变化
p2=table[n];
clk=1;
delay(300);
}
mr=!mr;
}
}
测试效果如下
利用74hc237连接的点阵如下图所示:
显示扫描方式也可以分为行扫描和列扫描,行扫描时,u1先输出行码依次扫描第1至第8行,同时u3输出第1行的左半部分列码,u4再输出第1行右半部分列码;扫描完1至8行后u2扫描8至16行,同时u3、u4输出对应的列码,这样就可以显示了。这仅仅是为了说明74hc273的连接图,不是最好的点阵连接方式,大家可以自己优化电路图。
二、74hc164与8255连接的点阵示例
图中8255的pa、pb输出端应加上拉电阻(300ω~1kω)。uln2803为增加驱动列能力。
5288的地址:pa口为0000h、pb口为0100h、pk(控制)口为0300h。使用逐列扫描方式。
以显示四个静态的“欠一个吻”为例,参考程序如下:
#include
#includecc.h》
#define pa8255 xbyte[0x0000]
#define pb8255 xbyte[0x0100]
#define pk8255 xbyte[0x0300]
#define uhar unsigned char
uchar code hzdot[]={
0x80,0x40,0x40,0x40,0x20,0x20,0x18,0x20,0x0f,0x10,0x0a,0x0c,0x08,0x03,0xe8,0x00,
0x08,0x03,0x08,0x0c,0x48,0x10,0x28,0x30,0x18,0x60,0x08,0x20,0x00,0x20,0x00,0x00,/*“欠”,0*/
0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xc0,0x00,0x80,0x00,0x00,0x00,/*“一”,1*/
0x00,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x0c,0x00,0xe3,0x7f,
0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x60,0x00,0xc0,0x00,0x40,0x00,0x00,0x00,/*“个”,2*/
0x00,0x00,0xfc,0x07,0x04,0x02,0x04,0x02,0xfc,0x03,0x40,0x48,0x30,0x44,0x0f,0x23,
0xca,0x10,0x38,0x0c,0x08,0x03,0xf8,0x40,0x08,0x80,0x08,0x60,0xf8,0x1f,0x00,0x00/*“吻”,3*/
};
uchar a,i,t,x[8]={0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
char b;
void main(void)
{
pk8255=0x80;
while(1)
{
for(a=0;a《64;a++)
{
pa8255=0x00;
pb8255=0x00;
for(b=7;b》=0;b--)
{
sbuf=~x[b];
while(!ti) ;ti=0;
}
pa8255=hzdot[2*a];
pb8255=hzdot[2*a+1];
for(i=0;i《8;i++)
{
if((x[7]&0x01)==0) goto lp;
if((~x[i]!=0)&&((x[i]&0x01)!=0))
x[i]=x[i]《《7|x[i]》》1;
else if((~x[i]!=0)&&((x[i]&0x01)==0))
{
x[i]=0xff;
x[i+1]=0x7f;
break;
}
}
}
lp:x[0]=0x7f;x[7]=0xff;
}
}
三、74hc595连接的点阵示例
很多点阵都是使用74hc595连接的,74hc595是8位串行输入/输出或者并行输出移位寄存器,具有高阻关断三态输出功能。
74hc595的功能表如下:
为了形象的演示74hc595的功能,编写如下测试程序:
#include
#define uint unsigned int
#define uchar unsigned char
sbit ds=p3^4; //74hc595的数据串行输入端口
sbit st=p3^7; //74hc595并行输出使能
sbit sh=p3^6; //74hc595移位寄存器移位使能
//测试串行传输数据:
uchar code test[]={0xff,0x00,0xaa,0xcc,0xee,};
//******延时子程序******//
void delay(uint a)
{
uint i,j;
for(i=0;i for(j=0;j《4;j++);
}
void sendbyte(uchar date)
{
uchar i;
for(i=0;i《8;i++)
{
sh=0;
st=0;
if(date&0x80) //将date最高位移到74hc595的移位寄存器
ds=1;
else
ds=0;
sh=1; //sh上升沿时移位
st=1; //st上升沿时输出数据
date=date《《1; //左移一位,将送出第二位数据
delay(5000);
}
}
//****主函数****//
void main()
{
uchar i;
while(1)
{
for(i=0;i《5;i++)
sendbyte(test[i]);
}
}
测试是依次输出0xff,0x00,0xaa,0xcc,0xee几个数据,在点阵显示程序中,是将数据全部送到74hc595的移位寄存器,再同时显示出来,并不是像下图所示一个一个流动显示,这个仅仅是测试数据的传输路径。
org 0000h
ljmp star
org 0bh
ljmp intt0
star: mov 20h,#00h
mov a,#0ffh
mov r7,#0
mov p1,a
mov p2,a
mov p3,a
mov p0,a
clr p1.6
mov tmod,#01h
mov th0,#0feh
mov tl0,#18h
mov scon,#0
mov ie,#82h
mov sp,#70h
mov r0,#0
main: lcall dis1
mov dptr ,#tab
lcall mov disp
ljmp main
mov disp:mov b,#00h
disloop: mov r3,#07h
dis mov : jnb 02h,aaa
dec dph
clr 02
aaa: mov r2,#0
mov r1,b
setb tr0
wait mov :jbc 00h,dismov1
ajmp wait mov
dis mov 1:djnz r3,dismov
jnb 02h,bbb
dec dph
clr 02
bbb: inc b
mov a,b
cjne a,#0,cc1
inc dph
inc r7
cc0: inc b
mov a,b
cjne a,#0,ccc
inc dph
inc r7
cc1: inc b
mov a,b
cjne a,#0,ccc
inc dph
inc r7
ccc: mov a,r1
mov out:cjne r7,#3,disloop
mov a,b
cjne a,#24,disloop
mov r7,#0
ret
dis1: mov r3,#0ah
clr p1.3
clr p1.4
clr p1.5
dis11: mov r2,#0
mov dptr,#tab
mov r1,#0h
setb tr0
wait11:jbc 01h,dis11
ajmp wait11
dis111:djnz r3,dis11
ret
intt0: inc r0
push acc
mov th0,#0feh
mov tl0,#18h
jbc 00h,goend
mov a,r1
mov c a,@a+dptr
mov sbuf,a
wait: jbc ti,go
ajmp wait
go: inc r1
cjne r1,#0,aa
inc dph
setb 02h
aa: mov a,r1
mov c a,@a+dptr
mov sbuf,a
wait1: jbc ti,go1
ajmp wait1
go1: inc r1
cjne r1,#0,bb
inc dph
setb 02h
bb: mov a,r1
mov c a,@a+dptr
mov sbuf,a
wait2: jbc ti,go2
ajmp wait2
go2: clr p1.3
clr p1.4
clr p1.5
nop
setb p1.6
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
clr p1.6
mov a,r2
anl a,#7h
anl p1,#0f8h
orl p1,a
p122: inc r2
cjne r2,#8,pan1
ljmp pan1a
pan1: jc pan1a
cjne r2,#10h,pan2
ljmp pan1b
pan2: jc pan1b
cjne r2,#018h,pan3
ljmp pan1c
pan3: jc pan1c
ajmp pant
pan1a: setb p1.3
ajmp pant
pan1b: setb p1.4
ajmp pant
pan1c: setb p1.5
pant: inc r1
cjne r1,#0,cc
inc dph
setb 02h
cc: mov a,r2
go3: cjne r2,#24,go4
setb 00h
go4: pop acc
reti
goend: clr tr0
setb 01h
pop acc
reti
org 0a00h
tab:
;-- 逐行 顺向 --
db 000h,000h,000h,003h,0c0h,000h,004h,030h,000h,004h,010h,000h,008h,03fh,0fch,008h;
db 000h,006h,010h,000h,002h,020h,000h,002h,020h,000h,002h,040h,083h,004h,041h,083h;
db 004h,041h,083h,008h,042h,083h,008h,03fh,001h,0f0h,001h,001h,080h,002h,000h,0c0h;
db 004h,000h,060h,008h,00ch,018h,030h,008h,004h,040h,01ch,002h,040h,026h,002h,040h;
db 043h,002h,021h,080h,0c4h,03eh,000h,03ch;“欠”,0
db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h;
db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,07fh,0ffh,0fch,0c0h,000h;
db 006h,080h,000h,002h,080h,000h,002h,080h,000h,002h,0c0h,000h,006h,07fh,0ffh,0fch;
db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h;
db 000h,000h,000h,000h,000h,000h,000h,000h;“一”,1
db 000h,000h,000h,000h,07ch,000h,000h,083h,000h,001h,000h,080h,006h,000h,060h,008h;
db 000h,030h,030h,000h,00ch,040h,07eh,002h,080h,042h,001h,080h,082h,001h,081h,083h;
db 081h,046h,082h,0e2h,078h,082h,01ch,000h,082h,000h,000h,082h,000h,000h,082h,000h;
db 000h,082h,000h,000h,082h,000h,000h,082h,000h,000h,082h,000h,000h,082h,000h,000h;
db 082h,000h,000h,082h,000h,000h,07ch,000h;“个”,2
db 000h,000h,000h,000h,01ch,000h,000h,022h,000h,07fh,0c1h,000h,0c0h,081h,0f8h,080h;
db 080h,004h,080h,080h,002h,081h,000h,002h,08bh,000h,002h,08ah,002h,002h,08ah,022h;
db 042h,089h,044h,042h,088h,0c4h,042h,088h,088h,042h,089h,008h,082h,082h,010h,082h;
db 084h,020h,082h,084h,040h,082h,0c4h,083h,082h,07fh,084h,002h,001h,004h,004h,000h;
db 084h,004h,000h,04ch,00ch,000h,033h,0f8h;“吻”,3
……
end
pcb电路设计的实用小技巧
VR全景虚拟现实线上旅游的优势都有哪些
AI空前的发展热度,推动AI城市名片争夺战进入了白热化阶段
华为P10什么时候出 华为P10和华为P9的区别在哪里
利用STM32实现自平衡机器人功能项目
led点阵8×8滚动显示原理_led点阵屏编程
传音攻守并重,海外新兴市场迎可持续增长新机遇
如何判断光纤收发器是否有问题
学习Raspberry Pi树莓派不可忽略的十个要点
cd4011水位控制器原理
电磁兼容暗室是什么
频频缺货,为何MLCC上了天、铝电解电容却涨不起来?
诺基亚3310复刻版最新消息:诺基亚3310复刻版正式开启预约,外观、配置升级游戏回归经典
低压无功补偿装置MSCGD的原理结构和作用概述
进击的苏宁 苏宁欲利用区块链助力智慧零售健康发展
毫米科技的AI布局思路以及智能家居时代变革的经验分享
酷芯携通信SoC AR8030亮相滴水湖中国RISC-V产业论坛
什么是区块链以及加密货币
光载毫米波无线电通信技术的现状与发展
电气互锁 电气互锁原理