您当前的位置:五五电子网电子知识单片机-工控设备51单片机LCD1502驱动程序 正文
LCD1502驱动程序

LCD1502驱动程序

点击数:7684 次   录入时间:03-04 11:56:05   整理:http://www.55dianzi.com   51单片机
MOV.B  #8,LCD_R0_RAM  ;查殉上屏须要显示的个数,一屏最多可以显示7个16X16
CLR.B  LCD_LIE_BRAM  ;清上屏查殉结果寄存器
MOV  LCD_WORD_RAM,R14 ;把须要检查字的首位16位地址放进R14.LCD_WORD_RAM
      ;定义时必须是16位地址
LCD_CHK_0
DEC.B  LCD_R0_RAM
JZ  LCD_CHK_1  ;测试完成退出
CLRZ
MOV.B  @R14+,LCD_COUNT_RAM
TST.B  LCD_COUNT_RAM  ;测试每个字寄存器是否为零
JZ  LCD_CHK_0  ;为零时转
INC.B  LCD_LIE_BRAM  ;大于零查殉结果寄存器加一
JMP  LCD_CHK_0  ;反回测试
LCD_CHK_1
        CLR             LCD_COUNT_RAM
        MOV.B           LCD_LIE_BRAM,LCD_COUNT_RAM
MOV  LCD_COUNT_RAM,&MPY ;把检测的结果乘以16
MOV  #16D,&OP2
MOV  &RESLO,LCD_COUNT_RAM ;相乘的结果放回寄存器
MOV.B  LCD_COUNT_RAM,LCD_LIE_BRAM
RRA.B           LCD_LIE_BRAM             ;结果除2.放到上屏页的寄存器
MOV.B  #61D,LCD_COUNT_RAM
SUB.B  LCD_LIE_BRAM,LCD_COUNT_RAM
MOV.B  LCD_COUNT_RAM,LCD_LIE_BRAM
RET
;调用前必须把要显示屏第一个字的地址放在R15内
;列:MOV  #LCDUP_WORD0_BRAM,LCD_WORD_RAM
       ;MOV  #LCDDOWN_WORD0_BRAM,LCD_WORD_RAM
       ;用到的寄存器R15/R14
LCD
CLRZ
CMP.B  #0B8H,LCD_PAGE_BRAM
JNE  LCD_1
MOV  #LCDUP_WORD0_BRAM,LCD_WORD_RAM
JMP  LCD_0
LCD_1 MOV  #LCDDOWN_WORD0_BRAM,LCD_WORD_RAM
LCD_0 CALL  #LCD_CHK
BIS.B  #BIT0,LCD_BIT_RAM
MOV.B  #7D,LCD_R1_RAM  
;每次调用均连续显示7个16X16的字  而遇到字寄存器是
MOV  LCD_WORD_RAM,R15 ;零就反回因为字表里面是没有零的
LCD_DISPALY
CLR  R14
        MOV.B           @R15+,R14
TST  R14   ;R15是显示字首位地址寄存器,准备用于间接寻址
JZ  LCD_RET   ;字寄存器是零就反回
MOV  #32D,&MPY  ;查表然后吧结果送到寄存器
MOV  R14,&OP2
MOV  &RESLO,LCD_COUNT_RAM
ADD  #LCD_DB,LCD_COUNT_RAM
MOV  LCD_COUNT_RAM,R14
MOV.B  #32D,LCD_R0_RAM  ;R14用于放计算查找数据的个数
LCD_PAGE
MOV.B  LCD_PAGE_BRAM,LCD_COM_BRAM;把页地址送到命令寄存器
CLRZ
BIT.B  #BIT0,LCD_BIT_RAM
;LCD_BIT_RAM的BIT0=LCD_E1_E2为高时转到E1发送,第就是E2
JZ  LCD_PAGE_E2  ;Z为零就转到E2  否则向下工作
LCD_PAGE_E1
CALL  #LCD_E1_COM  ;向E1发送页地址
JMP  LCD_LIE   ;跳去列发送
LCD_PAGE_E2
CALL  #LCD_E2_COM  ;向E2发送页地址
LCD_LIE
MOV.B  LCD_LIE_BRAM,LCD_COM_BRAM;把列地址送到命令寄存器
CLRZ
BIT.B  #BIT0,LCD_BIT_RAM
;LCD_BIT_RAM为高时转到E1发送,第就是E2
JZ  LCD_LIE_E2  ;Z为零就转到E2  否则向下工作
LCD_LIE_E1
CALL  #LCD_E1_COM  ;向E1发送列地址
JMP  LCD_DATA
LCD_LIE_E2
CALL  #LCD_E2_COM  ;向E2发送列地址
LCD_DATA
CALL  #LCD_FIND_DATA  ;调用数据发送命令
CLRZ
BIT.B  #BIT0,LCD_PAGE_BRAM ;测试页寄存器的BIT0位
JNZ  LCD_PAGE_0  ;大于零(即是BIT0=1)就转
BIS.B  #BIT0,LCD_PAGE_BRAM ;把页寄存器的BIT0位置高(原来是低#0B8H/#0BAH)
JMP  LCD_RETURN  
LCD_PAGE_0
BIC.B  #BIT0,LCD_PAGE_BRAM ;把页寄存器的BIT0位置低(原来是高#0B9H/#0BBH)
INC.B  LCD_LIE_BRAM  ;列地址加一
CLRZ
CMP.B  #61D,LCD_LIE_BRAM  ;检查列有没有超过61列
JNZ  LCD_RETURN  ;Z大于零就转  等于零就向下工作
CLR.B  LCD_LIE_BRAM  ;清列寄存器
CLRZ
BIT.B  #BIT0,LCD_BIT_RAM ;测试LCD_BIT_RAM位  在E1就转为E2 在E2就立即反回
JNZ  LCD_PAGE_1  ;Z为零就转到E2  否则向下工作
JMP  LCD_RET   ;转到子程序反回命令
LCD_PAGE_1
BIC.B  #BIT0,LCD_BIT_RAM ;把LCD_BIT_RAM位置低  设为E2显示状态
JMP  LCD_PAGE  ;反回页传送命令地址
LCD_RETURN
CLRZ
DEC.B  LCD_R0_RAM  ;查找数据的个数寄存器减1
JNZ  LCD_PAGE  ;R14大于零转回页传送命令地址
CLRZ
DEC.B  LCD_R1_RAM  ;字个数寄存器减1
BIC.B  #BIT0,LCD_PAGE_BRAM
JNZ  LCD_DISPALY  ;反回主显示调用程序
LCD_RET
RET     ;反回主程序

;===================================================
LCD_FIND_DATA  
MOV.B  @R14+,LCD_DATA_BRAM
CLRZ
BIT.B  #INV_BIT,LCD_BIT_RAM
JZ  NO_INV
INV.B  LCD_DATA_BRAM
NO_INV CLRZ
BIT.B  #BIT0,LCD_BIT_RAM ;测试LCD_BIT_RAM位  在E1就转为E2 在E2就立即反回
JZ  LCD_FIND_E2  ;Z为零就转到E2  否则向下工作
CALL  #LCD_E1_DATA  ;调用E1数据发送子程序
JMP  LCD_FIND_DATA_RET
LCD_FIND_E2
CALL  #LCD_E2_DATA  ;调用E2数据发送子程序
LCD_FIND_DATA_RET
RET
END LCD

上一页  [1] [2] 


本文关键字:程序  51单片机单片机-工控设备 - 51单片机