-
查看文章
【转】<
/p>
LED
点阵显示与编程(中级篇)
2011-03-15 17:08
转载自
欠一个吻
最终编辑
huaxinbl
点阵的显示原理是行扫描列发送字码,或者是列扫描行发送字
码。当点阵屏大于
16×16
时,普通
法直接连接了,必须通过串行输入
/
输出寄存器或者锁存器等<
/p>
I/O
口扩展,例如锁存器:
74HC3
73
、
输出寄存器:
74HC595<
/p>
、
74HC164
等;
< br>I/O
口扩展芯片:
8255
、
8155
等。
一、
74HC273
连接的
16×1
6
点阵示例
74HC2
73
是
8
位数据
/
地址锁存器,
D0
~
D7
为数据出入端;
Q0~Q7
为数据输出端;
WR
为主清
数据清
零;
CLK
是触发端,上升沿触发,即当
CLK
从低到高电平时,
D0~D7
的数据通过芯片输出到
74HC273
的测试程序如下:
#include
sbit
CLK=P3^0
sbit MR=P3^1;
#define uchar unsigned char
#define uint unsigned int
p>
//
数码管字型表,对应
0
,
1
,
2
,
3
,
4
,
5
,
6
,<
/p>
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;
}
}
测试效果如下:
利用
74
HC237
连接的点阵如下图所示:
显示扫描方式也可以分为行扫描和列扫描,行扫描时,
U1
先输
出行码依次扫描第
1
至第
8
行,同
列码,
U4
再输出
第
1
行右半部分列码;扫描完
1
至
8
行后
U2
扫描
8
至
16
行,同时
U3
、
U4
输出对
了。这仅仅是为了说明
74HC
273
的连接图,不是最好的点阵连接方式,大家可以自己优化电路图。
二、
74HC164
与
825
5
连接的点阵示例
图中
8255
的
PA<
/p>
、
PB
输出端应加上拉电阻(
300
Ω
~
1K
Ω
)。
ULN2803
为增加驱动列能力。
5288
的地址:
PA
口
为
0000H
、
PB
< br>口为
0100H
、
PK
(控制)口为
0300H
。使用逐列扫描方式。
以显示四个静态的“欠一个吻”为例,参考程序如下:
#include
#include
#define
PA8255 XBYTE[0X0000]
#define PB8255
XBYTE[0X0100]
#define PK8255
XBYTE[0X0300]
#define uhar unsigned
char
uchar code hzdot[]={
0x
80,0x40,0x40,0x40,0x20,0x20,0x18,0x20,0x0F,0x10,0x
0A,0x0C,0x08,0x03,0xE8,0x00,
0x08,0x03,
0x08,0x0C,0x48,0x10,0x28,0x30,0x18,0x60,0x08,0x20,
0x00,0x20,0x00,0x00,/*
欠
0x00,
0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x8
0,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0x8
0,0x00,0x00,0x00,/*
一
0x00,0x0
0,0x80,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x0
0,0x0C,0x00,0xE3,0x7F,
0x04,0x00,0x08,0
x00,0x10,0x00,0x20,0x00,0x60,0x00,0xC0,0x00,0x40,0
x00,0x00,0x00,/*
个
0x00,0x00,0
xFC,0x07,0x04,0x02,0x04,0x02,0xFC,0x03,0x40,0x48,0
x30,0x44,0x0F,0x23,
0xCA,0x10,0x38,0x0C
,0x08,0x03,0xF8,0x40,0x08,0x80,0x08,0x60,0xF8,0x1F
,0x00,0x00/*
吻
};
p>
uchar a,i,t,x[8]={0x7f,0xff,0
xff,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;
}
}
三、
74
HC595
连接的点阵示例
很多点阵都是使用
74HC595
连接
的,
74HC595
是
8
位串行输入
/
输出或者并行输出移位寄存器,具有高
阻关
74HC595
的功能表如下:
为了形象的演示
74HC595
p>
的功能,编写如下测试程序:
#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;
I/O
口的使
用。
例如
24×24
点阵的连接如下所示(行扫描使用
3
线
-8
线译码器
74HC138
),此图为原理示意图,
根据此上图用汇编编写的静态显示程序如下:
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 MOVDISP
LJMP
MAIN
MOVDISP:MOV B,#00H
DISLOOP:MOV R3,#07H
DISMOV:
JNB 02H,AAA
DEC DPH
CLR 02
AAA: MOV R2,#0
MOV R1,B
SETB TR0
WAITMOV:JBC 00H,DISMOV1
AJMP WAITMOV
DISMOV1: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
MOVOUT: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
MOVC 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
MOVC 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
MOVC 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
-
-
-
-
-
-
-
-
-
上一篇:调酒专业名词和英文翻译
下一篇:饮食英语大全