打印

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

[复制链接]
2192|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
riki2006|  楼主 | 2009-7-30 16:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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

粉丝