打印

请问大峡这程序里的汉字是如何提取的?

[复制链接]
1615|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengyeu|  楼主 | 2007-10-22 20:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TAB:
        //DB     "  大漠孤烟直    "
        //DB     "  长河落日圆    "
        //DB     "  欲将轻骑逐    "
        //DB     "  大雪满弓刀    "

相关帖子

沙发
一级菜鸟| | 2007-10-22 20:56 | 只看该作者

这个这个,放在DB里头的,应该是区位码啦

使用特权

评论回复
板凳
fengyeu|  楼主 | 2007-10-22 20:56 | 只看该作者

完整程序如下:

;                     BM12864 串口(3线)接口程序
;                                              
;***************************************************************************
;*  Date :  2006.8.4                                                       *
;*  Create by : 突出重围                                                   *
;***************************************************************************
;连线图:*LCM---89s51* *LCM---89s51* *LCM----------89s51* *LCM------89s51   *
;       *CS----P3.0* *SID---P3.1* *SCLK-----------P3.2* *PSB----------P3.5 *
;       *RESET----------P3.3                                               *
;注:89s51的晶振频率为12MHz                                                 *
;***************************************************************************


STD     BIT  P2.1             ;串行数据线
SCLK    BIT  P2.2             ;串行时钟线

START   EQU  30H              ;起始字节
COM     EQU  31H              ;命令/数据
HDATA   EQU  32H              ;命令/数据字节高位
LDATA   EQU  33H              ;命令/数据字节低位
ASC     EQU  34H              ;ASCII数据单元
XPOS    EQU  35H
YPOS    EQU  36H
        ORG    0000H
MAIN:
        MOV    SP,#60H
        CALL   LCDRESET        ;  模块系统初始化
        CALL   HZKDIS          ;  显示汉字子程序
        MOV    START,#0F8H     ;  写入命令(11111000)
        MOV    COM,#80H        ;  设定显示位置
        CALL   LCDWRITE
        MOV    START,#0FAH     ;写数据    (11111010)
        ;MOV    COM,#10H        ;显示字符
        ;CALL   LCDWRITE
        ; MOV    COM,#11H        ;显示字符
        ;CALL   LCDWRITE
        ;MOV    COM,#1EH        ;显示字符
        ;CALL   LCDWRITE
        ;MOV    COM,#1FH        ;显示字符
        ;CALL   LCDWRITE
        MOV    START,#0F8H     ; 写入命令(11111000)
        MOV    COM,#34H        ;扩充功能设定
        CALL   LCDWRITE
        MOV    COM,#05H        ;反白选择
        CALL   LCDWRITE
        CALL   DL40MS          ;延时
        CALL   DL40MS
        CALL   DL40MS
        
        CALL   DL40MS          ;延时
        CALL   DL40MS
        CALL   DL40MS
        
        ;MOV    A,#055H         ;绘图方式下写55数据
        ;CALL   LCDFILL
        ;CALL   CLEAR           ;清屏
        
        MOV    COM,#01H         ;清屏
       CALL   LCDWRITE
        JMP    MAIN
CLEAR:                         ;清屏子程序
        MOV     A,#00H
        CALL    LCDFILL
        RET
LCDRESET:
        LCALL  DL1MS           ;延时等待内部复位
        MOV    START,#0F8H     ; 写入命令(11111000)
MOV    COM,#30H        ;使用基本指令集
LCALL  LCDWRITE
MOV    COM,#0CH
LCALL  LCDWRITE        ;整体显示ON
MOV    COM,#01H        ;清屏
LCALL  LCDWRITE
LCALL  DL1MS
MOV    COM,#06H        ;显示右移
LCALL  LCDWRITE
LCALL  DL1MS
RET
LCDWRITE:                      ;模块写入子程序
MOV    A,COM           ;送待发数据命令A
ANL    A,#0F0H         ;屏蔽低4位
MOV    HDATA,A         ;将高4位送HDATA单元
MOV    A,COM           ;取低4位
SWAP   A               ;高低4位互换
ANL    A,#0F0H
MOV    LDATA,A         ;将低4位送LDATA单元
MOV    A,START         ;取起始字节
LCALL  SENDBIT         ;发送
LCALL  DL1MS           ;延时1ms
MOV    A,HDATA
LCALL  SENDBIT
LCALL  DL1MS
MOV    A,LDATA
LCALL  SENDBIT
LCALL  DL1MS
RET
HZKDIS:                        ;显示汉字子程序
        MOV    R5,#2
        MOV    START,#0F8H     ;写入命令(11111000)
MOV    COM,#80H        ;设定显示位置
LCALL  LCDWRITE
MOV    DPTR,#TAB       ;指向文字型代码表
MOV    A,#00H          ;取汉字代码低位
DIS_1:  MOV    R6,#8           ;每行八个汉字
DIS_2:  MOV    START,#0FAH     ;写数据    (11111010)
        CLR    A
        MOVC   A,@A+DPTR
        MOV    COM,A
        CALL   LCDWRITE        ;写入显示模块
        INC    DPTR            ;取汉字代码高位
        CLR    A
        MOVC   A,@A+DPTR
        MOV    COM,A
        CALL   LCDWRITE        ;写入显示模块
        INC    DPTR
        CALL   DL40MS
        DJNZ   R6,DIS_2        ;未显示完则继续
        MOV    START,#0F8H     ; 写入命令(11111000)
        MOV    COM,#90H        ;第二行地址
        CALL   LCDWRITE
        DJNZ   R5,DIS_1
        MOV    R5,#2
        MOV    START,#0F8H     ;写入命令(11111000)
        MOV    COM,#88H        ;第三行地址
        CALL   LCDWRITE
DIS_4:  MOV    R6,#08H
DIS_3:
        MOV    START,#0FAH     ;写数据    (11111010)
        CLR    A
        MOVC   A,@A+DPTR
        MOV    COM,A
        CALL   LCDWRITE        ;写入显示模块
        INC    DPTR            ;取汉字代码高位
        CLR    A
        MOVC   A,@A+DPTR
        MOV    COM,A
        CALL   LCDWRITE        ;写入显示模块
        INC    DPTR
        CALL   DL40MS
        DJNZ   R6,DIS_3        ;未显示完则继续
        MOV    START,#0F8H     ; 写入命令(11111000)
        MOV    COM,#98H        ;第四行地址
        CALL   LCDWRITE
        DJNZ   R5,DIS_4        ;遇“0”结束显示
        RET                    ;写完两行则结束
LCDFILL:                       ;绘图
       MOV    R4,A
       MOV    XPOS,#0
       MOV    YPOS,#0
       MOV    START,#0F8H
       MOV    COM,#30H         ;重新选择基本指令?
       CALL   LCDWRITE
       MOV    COM,#01H         ;清屏
       CALL   LCDWRITE
       MOV    COM,#36H         ;扩充功能设定
       CALL   LCDWRITE

LCD_A1:
       MOV    YPOS,#0
LCD_A2:
       MOV    START,#0F8H
       MOV    A,XPOS           ;设定绘图首地址
       ADD    A,#80H           ; X坐标
       MOV    COM,A
       CALL   LCDWRITE
       MOV    A,YPOS           ;Y坐标
       ADD    A,#80H
       MOV    B,A
       MOV    COM,A
       CALL   LCDWRITE

       MOV    START,#0FAH
       MOV    COM,R4
       CALL   LCDWRITE
       CALL   LCDWRITE
       INC    YPOS
       MOV    A,B
       CJNE   A,#87H,LCD_A2    ;最后一列地址为87H
       INC    XPOS
       MOV    A,XPOS
       CJNE   A,#20H,LCD_A1    ;最后行地址为80H+20H=0A0H
       MOV    XPOS,#0
LCD_A3:MOV    YPOS,#0
LCD_A4:
       MOV    START,#0F8H
       MOV    A,XPOS           ;设定绘图首地址
       ADD    A,#80H           ; X坐标
       MOV    COM,A
       CALL   LCDWRITE
       MOV    A,YPOS           ;Y坐标
       ADD    A,#80H
       MOV    B,A
       MOV    COM,A
       CALL   LCDWRITE

       MOV    START,#0FAH
       MOV    COM,R4
       CALL   LCDWRITE
       CALL   LCDWRITE
       INC    YPOS
       MOV    A,B
       CJNE   A,#8FH,LCD_A4    ;最后一列地址为8FH
       INC    XPOS
       MOV    A,XPOS
       CJNE   A,#20H,LCD_A3    ;最后行地址为80H+20H=0A0H
       RET
SENDBIT:                       ;串行字节数据发送子程序
MOV     R7,#08H        ;发送8位
SEND_1: RLC     A
        MOV     STD,C          ;数据送数据线
CLR     SCLK           ;产生同步时钟
SETB    SCLK
DJNZ    R7,SEND_1      ;未发送完8位继续
RET
DL1MS:                         ;延时子程序
        PUSH    00H            ;0.1MS
        PUSH    01H
        PUSH    02H
        MOV     R2,#01H
WA_PA:  MOV     R0,#0FH
WA_PB:  MOV     R1,#0FH
        DJNZ    R1,$
        DJNZ    R0,WA_PB
        DJNZ    R2,WA_PA
        POP     02H
        POP     01H
        POP     00H
        RET
        NOP
        RET
DL40MS:                        ;延时子程序
        PUSH    00H            ;40MS
        PUSH    01H
        PUSH    02H
        MOV     R2,#01H
DL_PA:  MOV     R0,#0FFH
DL_PB:  MOV     R1,#0FFH
        DJNZ    R1,$
        DJNZ    R0,DL_PB
        DJNZ    R2,DL_PA
        POP     02H
        POP     01H
        POP     00H
        RET
        NOP
        NOP
        NOP
        RET
TAB:
        //DB     "  大漠孤烟直    "
        //DB     "  长河落日圆    "
        //DB     "  欲将轻骑逐    "
        //DB     "  大雪满弓刀    "
        DB     "少小离家老大回,"
        DB     "乡音无改鬓毛衰。"
        DB     "儿童相见不相识,"
        DB     "笑问客从何处来。"
        DB     00H
END

使用特权

评论回复
地板
一级菜鸟| | 2007-10-22 20:59 | 只看该作者

O,那个那个,那个LCD内置字库啦

使用特权

评论回复
5
mohanwei| | 2007-10-22 21:00 | 只看该作者

内码。编译器给你算好的(你需要准备个字库)

使用特权

评论回复
6
fengyeu|  楼主 | 2007-10-22 21:04 | 只看该作者

“ ”是不是这个符号的作用??/


原来是编译器啊!
我看了半天
“   ”是不是这个符号的作用??/

使用特权

评论回复
7
computer00| | 2007-10-22 21:52 | 只看该作者

是的。当作了字符串

使用特权

评论回复
8
ayb_ice| | 2007-10-23 07:59 | 只看该作者

这是编译器的事。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

446

帖子

0

粉丝