DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 967|回复: 2
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:50:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
     




1汉字显示的原理:
我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。即国标汉字库中的每一个字均由256点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字, 也可以显示在256像素

我们以显示汉字“大”为例,来说明其扫描原理:
在UCDOS中文宋体字库中,每一个字由16行16列的点阵组成显示。如果用
8位的AT89C51单片机控制, 由于单片机的总线为8位,一个字需要拆分为2个部分。
一般我们把它拆分为上部和下部,上部由8*16点阵组成, 下部也由8*16点阵组成。
在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p07口。方向为p00到p07 ,显示汉字“大”时,p05点亮,由上往下排列,为p0.0 灭,p0.1 灭, p0.2 灭p0.3 灭, p0.4 灭, p0.5 亮,p0.6 灭,p0.7 灭。即二进制00000100,转换为16进制为 04h.。
上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮, 即为00000000,16进制则为00h。
然后单片机转向上半部第二列,仍为p05点亮,为00000100,即16进制04h.
这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h.
   依照这个方法,继续进行下面的扫描,一共扫描32个8位, 可以得出汉字“大”
的扫描代码为:
04H,00H,04H,02H,04H,02H,04H,04H
04H,08H,04H,30H,05H,0C0H,0FEH,00H
05H,80H,04H,60H,04H,10H,04H,08H
04H,04H,0CH,06H,04H,04H,00H,00H
由这个原理可以看出, 无论显示何种字体或图像, 都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。
   不过现在有很多现成的汉字字模生成软件, 我们就不必自己去画表格算代码了。

汉字提取软件:

temp_08051714583540.zip

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


         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
沙发
发表于 2012-5-2 10:01:14 | 只看该作者
汇编可惜可惜,如果能用C再写一次就好了。汇编不是很懂。
板凳
发表于 2012-7-12 10:31:57 | 只看该作者
最近也在学汇编,学习下先
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-23 06:12 , 耗时 0.085829 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表