哪位有lcm12832zk串行读写的汇编程序啊

[复制链接]
2855|3
 楼主| riki2006 发表于 2009-7-30 16:03 | 显示全部楼层 |阅读模式
如题 谢谢了  我用C语言可以显示 可汇编不行
 楼主| riki2006 发表于 2009-8-4 17:23 | 显示全部楼层
CSEG AT 0                       
                                    LJMP Reset

temp_2      SEGMENT  CODE                 
            RSEG  Temp_2                 
            USING 0                     
Reset:
                                                                              LCALL LCD_INIT
                                                LCALL DELAY4
                                                                              MOV   DPTR,#TAB1B     ;显示汉字和字符                                    MOV   LCD_COM,#81H    ;第1行起始地址
                                    LCALL LCD_WRI
                        LCALL DISP_STR_LOOP




LCD_INIT:
                                                 LCALL DELAY5
                                                 MOV   LCD_COM,#30H  ;功能设置,基本指令集
                                                 CALL  LCD_WRI    ;调用写指令子程序
                                                 MOV   LCD_COM,#0cH  ;显示开,光标关,反白关
                                                 CALL  LCD_WRI
                                                 MOV   LCD_COM,#01H ;清屏并将DDRAM的地址计数器(AC)归零
                                                 CALL  LCD_WRI
                                                 MOV   LCD_COM,#06H  ;光标向右移动,AC+1
                                                 CALL  LCD_WRI
                                                 RET
;==========================================================;
;MCU写指令到LCD子程序 (RS=0、RW=0)
;==========================================================;
LCD_WRI:
                                                 MOV    A,#11111000B ;
                                                 LCALL  LCD_SEND
                                                 MOV    A,LCD_COM
                                                 ANL    A,#0F0H  ;低4位清0传送高4位
                                                 LCALL  LCD_SEND
                                                 MOV    A,LCD_COM
                                                 SWAP   A        ;高低半字节交换
                                                 ANL    A,#0F0H  ;低4位清0传送低4位
                                                 LCALL  LCD_SEND
                                                 LCALL  DELAY1
                                                 RET
;==========================================================;
;MCU写数据到LCD (RS=1 RW=0)
;==========================================================;
LCD_WRD:
                                                 MOV    A,#11111010B
                                                 LCALL  LCD_SEND
                                                 MOV    A,LCD_WDAT ;要发送的数据给A
                                                 ANL    A,#0F0H    ;屏蔽低4位传送数据高4位
                                                 LCALL  LCD_SEND
                                                 MOV    A,LCD_WDAT
                                                 SWAP   A
                                                 ANL    A,#0F0H    ;传送数据低4位
                                                 LCALL  LCD_SEND
                                                 LCALL  DELAY1
                                                 RET
;==========================================================;
;读LCD(BF)(AC)指令到MCU (RS=0 RW=1)
;数据在LCD_RDAT中.
;==========================================================;
LCD_RRI:
                                                 MOV  A,#11111100B  ;读取LCD忙碌标志
                                                 CALL LCD_SEND
                                                 CALL LCD_RECEIVE
                                                 MOV  LCD_RIDAT,A   ;接收高4位数据
                                                 CALL LCD_RECEIVE  ; 接收低4位数据
                                                 ANL  A,#0F0H       ;屏蔽低4位
                                                 SWAP A             ;取低4位
                                                 ANL  LCD_RIDAT,#0F0H ;取高4位
                                                 ORL  LCD_RIDAT,A    ;组合成完整的数据
                                                 RET

;==========================================================;
;LCD发送8BIT的数据(1个字节)
;==========================================================;
LCD_SEND:
                         MOV  R2,#8   ;发送8位(BIT)数据
LCD_SEND1:
                                                 CLR  LCD_CLK  ;时钟端置1
                                                 RLC  A  ;ACC.7给C
                                                 MOV  LCD_SID,C  ;C给串行数据端
                                                 SETB LCD_CLK  ;时钟端清0
                                                 DJNZ  R2,LCD_SEND1 ;未完继续
                                                 RET
;==========================================================;
;LCD接收8BIT数据(1个字节)
;==========================================================;
LCD_RECEIVE:
                                                 MOV  R2,#8
LCD_RECEIVE1:
                                                 CLR  LCD_CLK  ;时钟端置1
                                                 NOP
                                                 NOP
                                                 SETB  LCD_CLK
                                                 MOV   C,LCD_SID
                                                 RLC   A
                                                 DJNZ  R2,LCD_RECEIVE1
                                                 RET





DISP_STR_LOOP:CLR A;
                                                        MOVC A,@A+DPTR;
                                                        CJNE A,#0,CONT_STR_DISP;
                                                  RET
CONT_STR_DISP:MOV LCD_WDAT,A;
                                                        LCALL LCD_WRD;
                                                        INC DPTR;
                                                        LCALL DELAY4;
                                                        LJMP DISP_STR_LOOP;
 楼主| riki2006 发表于 2009-8-4 17:24 | 显示全部楼层
TAB1D:  DB  31H,32H,33H,0;
 楼主| riki2006 发表于 2009-8-4 17:25 | 显示全部楼层
程序如上 我只是第一次用汇编写液晶驱动 不过可以运行了:$
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

50

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部