|
第一届51测试网有奖征文精彩回放,深圳学林电子版权所有 www.51c51.com (专业51单片机学习网站)转载注明出处! 更多精彩稿件请访问论坛http://www.51c51.com/bbs/index.asp |
|
| 作品1:字符型液晶显示模块
作者联系: 邓杰 |
|
| 作品2:用8X8LED点阵屏循环显示 | 作品7:用虚拟IIC总线实现24C02
的应用
|
| 作品3:虚拟仿真仪器UMPS的应用:牛余朋 |
作品8:语音编程、远程控制试验板
社区乞丐 |
| 作品4:万年历数字钟及可调时钟系统 |
作品9:定时开关控制器的制作 |
|
点矩阵显示器的应用 -----两个中文字数据分批显示并左移
现在市面上已出现很多有关点矩阵显示器的商品,如广告活动字幕机、股票显示板、活动布告栏等。它的优点是可按需要的大小、形状、单色或彩色来组合,可与微处理器连接,做各种广告性的文字或图形变化。 何谓点矩阵显示器?其实它是由LED按矩阵方式排列而得名。 点矩阵显示器的种类,可分为5*7,5*8,6*8,8*8等4种;而按LED发光变化颜色来分,可分为单色、双色、三色;按LED的极性排列方式又可分为共阳极与共阴极,而在本文中所介绍的8*8点阵排列为共阴极。 8*8点矩阵显示器在市面上有两种不同引脚,如下图: 8
7 B
1 D 6 4 A
A B C D
5 6 7 8
E
G 2
3 H 5 F C
1 2 3
4 E F G H 点矩阵显示器的基本应用 大家想想,对于一由N*N个LED组成的点阵块,只要让某些LED亮,就可以组成数字,英文字、图形、中文字。但如果用直接点亮的方式,它就可变化成很多的形状。当然不管是哪种形式,哪种图案的哪些LED该亮都是固定的。以下我主要针对中文字作一些说明。要显示中文字,必须由几个点矩阵组成才可显示出一个汉字。目前最常见的方式有15*14及16*16两种方式。15*14需要使用5*7的6个,16*16需使用5*8的六个或8*8的4个。现以16*16举例说明,对于汉字字形,在网络上有好多汉字字型代码提取工具,可以很方便地找查出中文字的点阵示意图及点阵代码。 中文字的点阵示意图
在UCDOS中文字体库中,每一个字由16行16列的点阵组成显示。如果用8位单片机AT89S51或52控制,我们知道此单片机的总线为8位,一个中文汉字得拆分为2个部分。一般我们把它拆为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。当上半部第一列完成后,继续扫描下半部的第一列,同时也为了我们硬件设计的方便,我们采用由上往下扫描。依照这个办法,我们对汉字‘振’进行扫描,共扫描32个8位,可得到扫描代码为: 08H,40H,08H,42H,08H,81H,0FFH,0FEH 09H,02H,0AH,0CH,7FH,0F0H,49H,00H 49H,0FFH,49H,02H,49H,0E0H,49H,18H 59H,14H,0CBH,26H,41H,44H,00H,00H 但这只是个显示各种字体或图象的原理,在真正设计开发项目时,我们可以使用汉字字模生成软件,这样我们就不必自己去画表格求代码,同时也缩短了我们的开发时间。下面就是在此设计中即将要显示出来的‘振兴中华电子事业’八字的竖排代码和显示字型
在此次8个字的点阵设计中,共使用了16行,32列,如果全部使用单片机I/O口,恐怕我们1个单片机也没那么多口,而且这样造成I/O的资源的浪费,系统也再无扩展可言。在此设计中,我使用了2个4~16线译码器74LS154来完成列方向的显示,而行方向16条线接在P0和P2口。列方向由两片74LS154完成扫描,它由89S51的P1.0~P1.3控制,而驱动部分用32个A1015
[PNP]的三极管完成。在行方向由于P0口没有上拉电阻,因此在接上4.7*8的上拉排阻。同时为了提供负载能力,后面还在P0和P2口后接16个C1384的NPN三极管驱动;而对74LS154的位选方面采用P1.4口控制,通过1/6片7407模块按下图所示接法进行位选
,分别轮流显示。每个画面2个字,8个字分4次显示,采用向左移动的显示方式依次显示。
硬件电路如下所示:
实现程序如下:{已通过编译} ORG
00H START:MOV
A,#00H ;清除屏幕
MOV P0,A
MOV P2,A
CALL DIS
;调用显示子程序
CALL DELAY ;调用延时子程序
CALL MOVE
;调用左移子程序
JMP START DIS:
MOV R2,#04H ;每个画面2个字,8个字分4次显示
MOV 20H,#00 ;取码指针暂存地址20H初值为00 D4:
MOV R4,#00H ;74LS154扫描指针初值
MOV R1,#0FFH ;每幕停留的时间 D5:
MOV R6,#32 ;每幕两个字,32个数据码
MOV R0,20H ;取码指针存入R0 D2:
CALL READ1 ;调用取码子程序
INC R4 ;扫描下一列
DJNZ R6,D2 ;显示1幕?
MOV R4,#00 ;清除74LS154扫描指针为00
DJNZ R1,D5 ;每幕停留时间到了?
MOV 20H,R0 ;保留取码指针存入20H地址
DJNZ R2,D4 ;2幕显示完毕了?
RET MOVE:
MOV 20H,#00 ;取码指针暂存地址20H初值为00
MOV R4,#00H ;74LS154扫描指针初值 M1:
MOV R1,#0FFH ;每幕停留时间 M2:
MOV R6,#32 ;每幕两个字,32个数据码
MOV R0,20H ;取码指针存入R0 M3:
CALL READ1 ;调用取码子程序
INC R4 ;扫描下一列
DJNZ R6,M3 ;显示1幕?
MOV R4,#00 ;清除74LS154扫描指针为00
DJNZ R1,M2 ;每幕停留时间到了?
MOV A,20H ;取码指针载入A
ADD A,#08H ;加8
MOV 20H,A ;再存入20H地址取码指针
XRL A,#128 ;8个字是否都左移完毕了
JNZ M1
RET READ1:MOV
A,R4
;扫描指针载入A
MOV P1,A ;输出至P1扫描列
MOV A,R0 ;取码指针载入A
MOV DPTR,#TABLE ;数据指针指到TABLE
MOVC A,@A+DPTR ;到TABLE取上半部的数据码
MOV P0,A ;输出至P0显示
INC R0 ;取下一个码
MOV A,R0 ;取码指针载入A
MOV DPTR,#TABLE ;数据指针指到TABLE
MOVC A,@A+DPTR ;到TABLE
取下半部的数据码
MOV P2,A ;输出至p2显示
INC R0 ;取码值加1
MOV R3,#25 ;延时
DJNZ R3,$
MOV A,#00H ;清除屏幕
MOV P0,A
MOV P2,A
RET DELAY:
MOV R3,#200 D7:
MOV R5,#248
DJNZ R5,$
DJNZ R3,D7
RET
;1 "振" TABLE:DB
08H,40H,08H,42H
DB 08H,81H,0FFH,0FEH
DB 09H,02H,0AH,0CH
DB 7FH,0F0H,49H,00H
DB 49H,0FFH,49H,02H
DB 49H,0E0H,49H,18H
DB 59H,14H,0CBH,26H
DB 41H,44H,00H,00H
;2 "兴"
DB 00H,80H,00H,81H
DB 20H,82H,18H,84H
DB 0CH,88H,00H,98H
DB 0C0H,80H,3CH,80H
DB 00H,80H,01H,90H
DB 06H,88H,18H,84H
DB 60H,86H,01H,83H
DB 00H,80H,00H,00H
;3 "中"
DB 00H,00H,1FH,0C0H
DB 10H,80H,10H,80H
DB 10H,80H,10H,80H
DB 10H,80H,0FFH,0FFH
DB 10H,80H,10H,80H
DB 10H,80H,10H,80H
DB 10H,80H,3FH,0C0H
DB 10H,00H,00H,00H
;4 "华"
DB 00H,20H,02H,20H
DB 04H,20H,08H,20H
DB 3FH,0A0H,0C0H,20H
DB 02H,20H,04H,0FFH
DB 08H,20H,0FFH,20H
DB 10H,0A0H,20H,0A0H
DB 60H,0A0H,03H,0A0H
DB 00H,20H,00H,00H
;5 "电"
DB 00H,00H,1FH,0E0H
DB 12H,40H,12H,40H
DB 12H,40H,12H,40H
DB 0FFH,0FCH,12H,42H
DB 12H,42H,12H,42H
DB 12H,42H,3FH,0E2H
DB 10H,02H,00H,0EH
DB 00H,00H,00H,00H
;6 "子"
DB 01H,00H,01H,00H
DB 41H,00H,41H,00H
DB 41H,00H,41H,02H
DB 41H,01H,47H,0FEH
DB 45H,00H,49H,00H
DB 51H,00H,61H,00H
DB 01H,00H,03H,00H
DB 01H,00H,00H,00H
;7 "事"
DB 20H,20H,20H,20H
DB 2EH,0A8H,2AH,0A8H
DB 2AH,0A8H,2AH,0AAH
DB 2AH,0A9H,0FFH,0FEH
DB 2AH,0A8H,2AH,0A8H
DB 2AH,0A8H,2AH,0A8H
DB 2EH,0FCH,60H,20H
DB 20H,20H,00H,00H
;8 "业"
DB 00H,02H,08H,02H
DB 06H,02H,01H,0E2H
DB 00H,02H,0FFH,0FEH
DB 00H,02H,00H,02H
DB 00H,02H,0FFH,0FEH
DB 00H,22H,00H,0C2H
DB 03H,02H,0CH,06H
DB 00H,02H,00H,00H END 参考图书:《8051单片机实践与应用》清华大学出版社
《单片机应用系统设计与产品开发》
人民邮电出版社
51测试网会员:lfgbody 姓名:林发根
|