新闻  |   论坛  |   博客  |   在线研讨会
16X16点阵汉字显示89C51
张阳 | 2008-05-05 16:57:15    阅读:8861   发布文章

16X16点阵汉字显示89C51

 

点击开大图

点击开大图

点击开大图

点击开大图

;*****************16*16 LED点阵显示程序*****************

 ;*MCU:         AT89C51

;*MCU-crystal:  12M

;*Version:      1.0

;*Last Updata:  2005-1-1

;*Author:       WWW.PICAVR.COM

;*Description:  FOR-16*16 LED点阵显示程序, 参考了一本书上做的.

                显示"欢迎光临"字符,字符可同时显示两个汉字并且

                可上下,左右移动显示.

;**********************************************************     

              ORG     00H

START:        MOV     A,#00H     ;清除屏幕

              MOV     P0,A

              MOV     P2,A

              ACALL   DISP       ;调用显示子程序

              ACALL   MOVE       ;调用左移子程序

              AJMP    START

;*********************************************************

DISP:         MOV     R2,#02H    ;每个画面2个字,4个字分2次显示

              MOV     20H,#00H   ;取码指针暂存地址20H初值为00H

D4:           MOV     R4,#00H    ;74154扫描指针初值

              MOV     R1,#0FFH   ;每幕停留的时间

D5:           MOV     R6,#32     ;每幕2个字,32个数据

              MOV     R0,20H     ;取码指针存入R0

D2:           ACALL   READ1      ;调用取码子程序

              INC     R4         ;扫描下一列

              DJNZ    R6,D2      ;显示1幕?

              MOV     R4,#00     ;清除74154扫描指针为00

              DJNZ    R1,D5      ;每幕停留时间到了?

              MOV     20H,R0     ;保留取码指针存入20H地址

              DJNZ    R2,D4      ;2幕显示完毕了?

              RET

;********************************************************

READ1:        MOV     A,R4       ;扫描指针载入A         

              MOV     P1,A       ;输出至P1扫描列

              MOV     A,R0       ;取码指针载入A

              MOV     DPTR,#TAB  ;数据指针指到TAB

              MOVC    A,@A+DPTR  ;到TAB取上半部的数据码

              MOV     P0,A       ;输出至P0显示

              INC     R0         ;取下一个码

              MOV     A,R0       ;取码指针载入A

              MOV     DPTR,#TAB  ;数据指针指到TAB

              MOVC    A,@A+DPTR  ;到TAB取下半部的数据码

              MOV     P2,A       ;输出至P2显示

              INC     R0         ;取码值加1

              MOV     R3,#25     ;延时

              DJNZ    R3,$      

              MOV     A,#00H     ;清除屏幕

              MOV     P0,A      

              MOV     P2,A      

DELAY:        MOV     R3,#01     ;延时

D7:           MOV     R5,#50

              DJNZ    R5,$

              DJNZ    R3,D7

              RET

;*************************************************

MOVE:        

              MOV     20H,#00     ;取码指针暂存地址20H初值为00H

              MOV     R4,#00H     ;74154扫描指针初值

M1:           MOV     R1,#1FH     ;每幕停留的时间

M2:           MOV     R6,#32      ;每幕2个字,32个数据

              MOV     R0,20H      ;取码指针存入R0

M3:           ACALL   READ1       ;调用取码子程序

              INC     R4          ;扫描下一列

              DJNZ    R6,M3       ;显示1幕?

              MOV     R4,#00      ;清除74154扫描指针为00

              DJNZ    R1,M2       ;每幕停留时间到了?

              MOV     A,20H       ;取码指针载入A

              ADD     A,#02       ;加2

              MOV     20H,A       ;再存入20H地址取码指针

              XRL     A,#66       ;4个字是否都左移完毕了?

              JNZ     M1          ;循环

              RET

;*************************************************             

 

DL5S:         MOV   R6,40H        ;delay program

DL1:          MOV   R5,#200

DL2:          MOV   R4,#125

DL3:          DJNZ  R4,$

              DJNZ  R5,DL2

              DJNZ  R6,DL1

              RET

;************************************************

;"欢迎光临"显示用ROM数据表

TAB:          ;欢

              DB   00H,20H,3CH,10H

              DB   44H,08H,84H,04H

              DB   04H,03H,04H,03H

              DB   84H,04H,44H,08H

              DB   3CH,10H,00H,20H

              DB   00H,00H,07H,20H

              DB   04H,10H,0F4H,0FH

              DB   04H,10H,1CH,20H 

              ;迎

              DB   00H,00H,49H,20H

              DB   6AH,10H,0DCH,0FH

              DB   08H,10H,00H,20H

              DB   0FEH,27H,02H,22H

              DB   02H,21H,81H,20H

              DB   00H,20H,02H,20H

              DB   0FEH,2FH,02H,22H

              DB   02H,22H,0FEH,21H

              ;光

              DB   00H,00H,00H,20H

              DB   22H,20H,24H,20H

              DB   28H,10H,30H,08H

              DB   0E0H,07H,3FH,00H

              DB   20H,00H,0F0H,3FH

              DB   28H,20H,24H,20H

              DB   22H,20H,20H,20H

              DB   00H,38H,00H,00H

              ;临

              DB   00H,00H,0F0H,03H

              DB   00H,00H,00H,00H

              DB   0FFH,3FH,00H,00H

              DB   40H,00H,20H,3FH

              DB   10H,21H,0FH,21H

              DB   14H,21H,24H,3FH

              DB   44H,21H,04H,21H

              DB   04H,21H,04H,3FH

              DB   00H,00H,00H,00H

              END                       ;程序结束

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
[ 匿名]  2008-11-15 17:49:03 

xiexie

推荐文章
最近访客