您的位置:首页版主原创51示例程序
内容搜索: 标题内容作者
     
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

16X16点阵汉字显示89C51(已测试OK)

[日期:2008-01-08 ] [来源:www.picavr.com 作者:本站原创] [字体: (投递新闻)
两个汉字16x16点阵显示89C51
两个汉字16x16点阵显示_显示板

 

16X16LED点阵显示

 

16X16LED点阵显示

;*****************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                       ;程序结束

阅读:
录入:admin

推荐 】 【 打印
本文评论
      全部评论
    dell2002 于05日评论道: 查看全部评论  
图片不是很清楚 能发一个清楚一点吗?谢谢
    陈同学 于24日评论道: 查看全部评论  
好的!谢谢!
    JETTA会员 于21日评论道: 查看全部评论  
p3.4 p3.5 和DL5S我这个程序中不起作用你可去掉.
    陈同学 于21日评论道: 查看全部评论  
你好!看过你写的汇编语言,能力有限有几处不懂想问一下在电路图中单片机的中断口P3.4和P3.5接了两个开关起到什么作用呀?而在汇编程序中没有中断子程序呀!可以解释一下吗?还有从DL5S: 开始到最后单片机在什么时候开始执行这段延时程序呀?我的邮箱是"守心"<aa8866988@qq.com>耽误你的宝贵时间不好意思!谢谢!
    无敌面面 于11日评论道: 查看全部评论  
东哥好厉害噢!
发表评论


点评: 字数
姓名:
赞助商广告