led點(diǎn)陣8×8滾動(dòng)顯示原理
8X8點(diǎn)陣為例,它共由64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對(duì)應(yīng)的某一行置1電平,某一列置0電平,則相應(yīng)的二極管就亮;如要將第一個(gè)點(diǎn)點(diǎn)亮,則9腳接高電平13腳接低電平,則第一個(gè)點(diǎn)就亮了;
如果要將第一行點(diǎn)亮,則第9腳要接高電平,而(13、3、4、10、6、11、15、16)這些引腳接低電平,那么第一行就會(huì)點(diǎn)亮;如要將第一列點(diǎn)亮,則第13腳接低電平,而(9、14、8、12、1、7、2、5)接高電平,那么第一列就會(huì)點(diǎn)亮。
在8X8點(diǎn)陣LED上顯示柱形,讓其先從左到右平滑移動(dòng)三次,其次從右到左平滑移動(dòng)三次,再次從上到下平滑移動(dòng)三次,最后從下到上平滑移動(dòng)三次,如此循環(huán)下去。
8X8點(diǎn)陣LED工作原理說(shuō)明 :8X8點(diǎn)陣共需要64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對(duì)應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的二極管就亮;因此要實(shí)現(xiàn)一根柱形的亮法,如圖49所示,對(duì)應(yīng)的一列為一根豎柱,或者對(duì)應(yīng)的一行為一根橫柱,因此實(shí)現(xiàn)柱的亮的方法如下所述:
一根豎柱:對(duì)應(yīng)的列置1,而行則采用掃描的方法來(lái)實(shí)現(xiàn)。
一根橫柱:對(duì)應(yīng)的行置0,而列則采用掃描的方法來(lái)實(shí)現(xiàn)。
led點(diǎn)陣屏編程
點(diǎn)陣的顯示原理是行掃描列發(fā)送字碼,或者是列掃描行發(fā)送字碼。當(dāng)點(diǎn)陣屏大于16×16時(shí),普通的32個(gè)I/O口的 單片機(jī) 是無(wú)法直接連接了,必須通過(guò)串行輸入/輸出寄存器或者鎖存器等I/O口擴(kuò)展,例如鎖存器:74HC373、74HC273等;串行輸入并行輸出寄存器:74HC595、74HC164等;I/O口擴(kuò)展芯片:8255、8155等。
74HC273是8位數(shù)據(jù)/地址鎖存器,D0~D7為數(shù)據(jù)出入端;Q0~Q7為數(shù)據(jù)輸出端;WR為主清除端,低電平觸發(fā),將鎖存數(shù)據(jù)清零;CLK是觸發(fā)端,上升沿觸發(fā),即當(dāng)CLK從低到高電平時(shí),D0~D7的數(shù)據(jù)通過(guò)芯片輸出到Q0~Q7,為0時(shí)將數(shù)據(jù)鎖存。
74HC273的測(cè)試程序如下:
#include
sbit CLK=P3^0 ;
sbit MR=P3^1;
#define uchar unsigned char
#define uint unsigned int
//數(shù)碼管字型表,對(duì)應(yīng)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); //延時(shí)為了方便看到管腳電平變化
P2=Table[N];
CLK=1;
Delay(300);
}
MR=!MR;
}
}
測(cè)試效果如下
利用74HC237連接的點(diǎn)陣如下圖所示:
顯示掃描方式也可以分為行掃描和列掃描,行掃描時(shí),U1先輸出行碼依次掃描第1至第8行,同時(shí)U3輸出第1行的左半部分列碼,U4再輸出第1行右半部分列碼;掃描完1至8行后U2掃描8至16行,同時(shí)U3、U4輸出對(duì)應(yīng)的列碼,這樣就可以顯示了。這僅僅是為了說(shuō)明74HC273的連接圖,不是最好的點(diǎn)陣連接方式,大家可以自己優(yōu)化電路圖。
二、74HC164與8255連接的點(diǎn)陣示例
圖中8255的PA、PB輸出端應(yīng)加上拉電阻(300Ω~1KΩ)。ULN2803為增加驅(qū)動(dòng)列能力。
5288的地址:PA口為0000H、PB口為0100H、PK(控制)口為0300H。使用逐列掃描方式。
? ? ? ?以顯示四個(gè)靜態(tài)的“欠一個(gè)吻”為例,參考程序如下:
#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,/*“個(gè)”,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連接的點(diǎn)陣示例
很多點(diǎn)陣都是使用74HC595連接的,74HC595是8位串行輸入/輸出或者并行輸出移位寄存器,具有高阻關(guān)斷三態(tài)輸出功能。
74HC595的功能表如下:
為了形象的演示74HC595的功能,編寫(xiě)如下測(cè)試程序:
#include
#define uint unsigned int
#define uchar unsigned char
sbit DS=P3^4; //74HC595的數(shù)據(jù)串行輸入端口
sbit ST=P3^7; //74HC595并行輸出使能
sbit SH=P3^6; //74HC595移位寄存器移位使能
//測(cè)試串行傳輸數(shù)據(jù):
uchar code Test[]={0xFF,0x00,0xAA,0xCC,0xEE,};
//******延時(shí)子程序******//
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上升沿時(shí)移位
ST=1; //ST上升沿時(shí)輸出數(shù)據(jù)
date=date《《1; //左移一位,將送出第二位數(shù)據(jù)
delay(5000);
}
}
//****主函數(shù)****//
void main()
{
uchar i;
while(1)
{
for(i=0;i《5;i++)
SendByte(Test[i]);
}
}
測(cè)試是依次輸出0xFF,0x00,0xAA,0xCC,0xEE幾個(gè)數(shù)據(jù),在點(diǎn)陣顯示程序中,是將數(shù)據(jù)全部送到74HC595的移位寄存器,再同時(shí)顯示出來(lái),并不是像下圖所示一個(gè)一個(gè)流動(dòng)顯示,這個(gè)僅僅是測(cè)試數(shù)據(jù)的傳輸路徑。
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;“個(gè)”,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
責(zé)任編輯:YYX
……
END
評(píng)論