|
实验14.2
汉字显示屏倚天一出宝刀屠龙
汉字显示屏广泛应用于汽车报站器,广告屏等。XL2000试验仪有一个标准的16*16点阵的汉字显示屏。
他的行扫描部分分别由单片机的P0,P2口担任,
列扫描部分则是由一个74LS154的4-16译码器组成。
相关原理:

程序运行照片:

接线方法:
1、用一根8PIN的数据排线,
一端接到汉字屏部分的JP55一端接到CPU部份的P0口JP51.
2、用一根8PIN的数据排线,
一端接到汉字屏部分的JP54一端接到CPU部份的P2口JP52.
3、用一根4PIN数据线一端插入CPU部分JP44(P1口)的P1.0,P1.1,P1.2,P1.3另外一端插入汉字屏部分的JP62.
汇编语言参考程序:
ORG 0080H
START: MOV A,#0FFH
MOV P0,A
ANL P2,#00
MOV R2,#200
D1: MOV R3,#248 ;延时
DJNZ R3,$
DJNZ R2,D1
MOV 20H,#00H
l1: MOV R1,#100
L2: MOV R6,#16
MOV R4,#00H
MOV R0,20H
L3: MOV A,R4
MOV P1,A ;开三极管
INC R4
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A ;查表送P0口
INC R0
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A ;查表送P2口
INC R0
MOV R3,#02
D2: MOV R5,#248
DJNZ R5,$
DJNZ R3,D2
MOV A,#00H
MOV P0,A
ANL P2,#00H
DJNZ R6,L3
DJNZ R1,L2
MOV 20H,R0
CJNE R0,#0FFH,L1 ;检测是否送完
JMP START
TABLE :
db 01H,00H,02H,00H,04H,00H,1FH,0FFH;倚
db 0E2H,00H,22H,00H,22H,0FCH,26H,88H
db 2AH,88H,0F2H,88H,2AH,0FAH,26H,01H
db 63H,0FEH,26H,00H,02H,00H,00H,00H
db 02H,01H,42H,01H,42H,02H,42H,04H;天
db 42H,08H,42H,30H,42H,0C0H,7FH,00H
db 42H,0C0H,42H,30H,42H,08H,42H,04H
db 0C2H,02H,46H,03H,02H,02H,00H,00H
db 01H,00H,01H,00H,01H,00H,01H,00H;一
db 01H,00H,01H,00H,01H,00H,01H,00H
db 01H,00H,01H,00H,01H,00H,01H,00H
db 01H,00H,03H,00H,01H,00H,00H,00H
db 00H,00H,00H,7FH,3FH,02H,02H,02H;出
db 02H,02H,02H,02H,02H,02H,0FFH,0FEH
db 02H,02H,02H,02H,02H,02H,02H,02H
db 3FH,02H,00H,7FH,00H,00H,00H,00H
db 08H,00H,30H,02H,22H,02H,22H,42H;宝
db 22H,42H,22H,42H,0A2H,42H,63H,0FEH
db 22H,42H,22H,52H,22H,0DAH,26H,42H
db 22H,06H,28H,02H,30H,00H,00H,00H
db 00H,00H,20H,01H,20H,02H,20H,04H;刀
db 20H,18H,20H,60H,3FH,80H,20H,00H
db 20H,00H,20H,02H,20H,01H,20H,02H
db 7FH,0FCH,20H,00H,00H,00H,00H,00H
db 00H,02H,00H,0CH,7FH,0F4H,51H,08H;屠
db 55H,10H,55H,3FH,55H,6AH,5FH,0AAH
db 55H,2AH,57H,2AH,55H,2AH,59H,2AH
db 0F1H,7FH,43H,20H,01H,00H,00H,00H
db 08H,00H,08H,01H,08H,02H,08H,0CH;龙
db 08H,30H,09H,0C4H,0FEH,04H,08H,08H
db 0FH,0FCH,48H,22H,28H,42H,08H,82H
db 0BH,02H,18H,02H,08H,1EH,00H,00H
end
c语言参考程序:
#include<reg51.h>
//头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
uchar code
yi_1[]={0x01,0x00,0x02,0x00,0x04,0x00,0x1F,0xFF,
0xE2,0x00,0x22,0x00,0x22,0xFC,0x26,0x88,
0x2A,0x88,0xF2,0x88,0x2A,0xFA,0x26,0x01,
0x63,0xFE,0x26,0x00,0x02,0x00,0x00,0x00
}; //汉字 ”倚“的数组
uchar code
tian[]={0x02,0x01,0x42,0x01,0x42,0x02,0x42,0x04,
0x42,0x08,0x42,0x30,0x42,0xC0,0x7F,0x00,
0x42,0xC0,0x42,0x30,0x42,0x08,0x42,0x04,
0xC2,0x02,0x46,0x03,0x02,0x02,0x00,0x00
}; //汉字 “天”的数组
uchar code
yi_2[]={0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x03,0x00,0x01,0x00,0x00,0x00
}; //汉字 “一”的数组
uchar code chu[]
={0x00,0x00,0x00,0x7F,0x3F,0x02,0x02,0x02,
0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xFE,
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
0x3F,0x02,0x00,0x7F,0x00,0x00,0x00,0x00
}; //汉字 “出”的数组
uchar code bao[]
={0x08,0x00,0x30,0x02,0x22,0x02,0x22,0x42,
0x22,0x42,0x22,0x42,0xA2,0x42,0x63,0xFE,
0x22,0x42,0x22,0x52,0x22,0xDA,0x26,0x42,
0x22,0x06,0x28,0x02,0x30,0x00,0x00,0x00
}; //汉字 “宝”的数
uchar code dao[]
={0x00,0x00,0x20,0x01,0x20,0x02,0x20,0x04,
0x20,0x18,0x20,0x60,0x3F,0x80,0x20,0x00,
0x20,0x00,0x20,0x02,0x20,0x01,0x20,0x02,
0x7F,0xFC,0x20,0x00,0x00,0x00,0x00,0x00
}; //汉字 “刀”的数
uchar code tu[]
={0x00,0x02,0x00,0x0C,0x7F,0xF4,0x51,0x08,
0x55,0x10,0x55,0x3F,0x55,0x6A,0x5F,0xAA,
0x55,0x2A,0x57,0x2A,0x55,0x2A,0x59,0x2A,
0xF1,0x7F,0x43,0x20,0x01,0x00,0x00,0x00
}; //汉字 “屠”的数组
uchar code
lOng[]={0x08,0x00,0x08,0x01,0x08,0x02,0x08,0x0C,
0x08,0x30,0x09,0xC4,0xFE,0x04,0x08,0x08,
0x0F,0xFC,0x48,0x22,0x28,0x42,0x08,0x82,
0x0B,0x02,0x18,0x02,0x08,0x1E,0x00,0x00
}; //汉字 “龙”的数组
uchar *p=yi_1; //定义一指针变量,并指向汉字 "倚"
void delay_scan() //列扫描延迟函数
{
uchar i=100;
while(i--);
}
void display(uchar *word)
//显示汉字函数,形参是要显示的具体汉字
{
uchar i=0;
uint j=0;
p=word; //指针P指向要显示的汉字数组首地址
while(j<80) //显示的一个汉字持续时间
{
for(i=0;i<16;i++) //16列逐列扫描
{
P0 = 0; //清除前面的数据
P2 = 0;
P1=i; //扫描第i列
P0=*(p+i*2); //上8行赋值
P2=*(p+i*2+1); //下8行赋值
delay_scan(); //列扫描延迟
}
j++; //显示一次汉字加1
}
for(i=0;i<16;i++) //16列逐列扫描
{
P1=i; //扫描第i列
P0=0x00; //上8行赋值
P2=0x00; //下8行赋值
delay_scan(); //列扫描延迟
}
}
char code SST516[3] _at_ 0x003b; //仿真器保留
main() //主函数
{
while(1)
{
display(yi_1); //显示汉字"倚"
display(tian); //显示汉字"天"
display(yi_2); //显示汉字"一"
display(chu); //显示汉字"出"
display(bao); //显示汉字"宝"
display(dao); //显示汉字"刀"
display(tu); //显示汉字"屠"
display(lOng); //显示汉字"龙"
}
} |