返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

作品1:征文-我是怎样开始学习电子的 山西省大同市作品6:多功能自行车测速仪  北京大学      崔健
作品2:数字温度计的设计  杭州电子科技大学     陈智杰作品7:带闹钟智能电子钟 深圳市天安数码城     谢玉平 
作品3:如何使自制的单片机电子钟走时精准      舒新生作品8:电话回拨服务告知装置 武汉市桥口区     詹显德
作品4:宽带数控放大器 陕西省西安通信学院     韩宏伟作品9:单片机应用之摩斯密码电子锁广东省顺德     吴志光
作品5:一些事,一些情 韶关市     冯敬锋作品10:基于aduc842瞬态波形存储器 华中师范大学物理学院     杨程泽
作品11:基于AT89S52单片机的毫欧表电路设计中南林业科技大学涉外学院    郭海

作品1:字符型液晶显示模块       邓杰   作品6:基于89C51的智能转速计    淮安信息学院    宋炎
作品2:8X8LED点阵屏循环显示作品7:用虚拟IIC总线实现24C02 的应用  南阳理工学院     张全领
作品3:虚拟仿真仪器UMPS的应用      牛余朋作品8:语音编程、远程控制试验板     社区乞丐
作品4:万年历数字钟及可调时钟系统作品9:定时开关控制器的制作     魏军丞
作品5:点矩阵显示器的应用会员lfgbody    林发根作品10:AD080951单片机中的应用    文/黄海

  

点矩阵显示器的应用

-----两个中文字数据分批显示并左移

 

    现在市面上已出现很多有关点矩阵显示器的商品,如广告活动字幕机、股票显示板、活动布告栏等。它的优点是可按需要的大小、形状、单色或彩色来组合,可与微处理器连接,做各种广告性的文字或图形变化。

    何谓点矩阵显示器?其实它是由LED按矩阵方式排列而得名。

   点矩阵显示器的种类,可分为5*75*86*88*84种;而按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*NLED组成的点阵块,只要让某些LED亮,就可以组成数字,英文字、图形、中文字。但如果用直接点亮的方式,它就可变化成很多的形状。当然不管是哪种形式,哪种图案的哪些LED该亮都是固定的。以下我主要针对中文字作一些说明。要显示中文字,必须由几个点矩阵组成才可显示出一个汉字。目前最常见的方式有15*1416*16两种方式。15*14需要使用5*76个,16*16需使用5*8的六个或8*84个。现以16*16举例说明,对于汉字字形,在网络上有好多汉字字型代码提取工具,可以很方便地找查出中文字的点阵示意图及点阵代码。

中文字的点阵示意图

     UCDOS中文字体库中,每一个字由1616列的点阵组成显示。如果用8位单片机AT89S5152控制,我们知道此单片机的总线为8位,一个中文汉字得拆分为2个部分。一般我们把它拆为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。当上半部第一列完成后,继续扫描下半部的第一列,同时也为了我们硬件设计的方便,我们采用由上往下扫描。依照这个办法,我们对汉字‘振’进行扫描,共扫描328位,可得到扫描代码为:

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的资源的浪费,系统也再无扩展可言。在此设计中,我使用了24~16线译码器74LS154来完成列方向的显示,而行方向16条线接在P0P2口。列方向由两片74LS154完成扫描,它由89S51P1.0~P1.3控制,而驱动部分用32A1015 [PNP]的三极管完成。在行方向由于P0口没有上拉电阻,因此在接上4.7*8的上拉排阻。同时为了提供负载能力,后面还在P0P2口后接16C1384NPN三极管驱动;而对74LS154的位选方面采用P1.4口控制,通过1/67407模块按下图所示接法进行位选,分别轮流显示。每个画面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重在参与

姓名:林发根