微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 验12864好坏的汇编程序

验12864好坏的汇编程序

时间:10-02 整理:3721RD 点击:

;******************************************************************************
;-----------------------脚功能定义----------------------------             
              RS EQU P1.0       
              RW EQU P1.1
              E EQU P1.2
              PSB EQU P1.6        ;PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1
;----------------------定义计数器
              COUNT EQU 32H       
              COUNT1 EQU 33H
              COUNT2 EQU 34H
              COUNT3 EQU 35H

              STORE EQU 39H
  ;-----------------------------------------------
              ORG 0000H
              LJMP csh
              ORG 0100H
;----------------初始化--------------------------
csh:MOV SP,#5FH
      LCALL DELAY4          ;延时40.301ms
              NOP
      SETB PSB ;通讯方式为8位数据并口

;----------------12864初始化---------------------
              MOV A,#34H       ;34H扩充指令操作         
              LCALL xzl        ;调用写指令子程序
              MOV A,#30H       ;返回基本指令操作
              LCALL xzl
              MOV A,#01H       ;清除显示
              LCALL xzl
              MOV A,#06H       ;指定在资料写入或读取时,光标右移,DDRAM 的地址计数器(AC)加1
              LCALL xzl        
              MOV A,#0CH         ;开显示,关光标,不闪烁
              LCALL xzl
          zcx:acall gx12864
              sjmp zcx   

;================ 更新12864================
      gx12864:MOV DPTR,#TAB1A ;'5 1 单片机实验板'的首地址
              MOV COUNT,#10H  ;地址计数器设为16,'5 1 单片机实验板'连空格共占有16个单元
              MOV A,#80H      ;确定第一行起始地址,显示第一行字符
              LCALL xzl
              LCALL cb        ;查表子程序,表中共16个码(asc码和汉字编码,一个汉字两个编码) ,查一个,写入12864一个,直到查完
              MOV DPTR,#TAB1B ;' www.lydz8.com  '的首地址
              MOV COUNT,#10H  ;地址计数器设为16。
              MOV A,#90H      ;确定第二行起始地址,显示第二行字符
              LCALL xzl
              LCALL cb        ;查表子程序
              MOV DPTR,#TAB1c ;'吉林大学珠海学院 '的首地址
              MOV COUNT,#10H  ;地址计数器设为16。
              MOV A,#88H      ;确定第三行起始地址,显示第三行字符
              LCALL xzl
              LCALL cb        ;查表子程序
              MOV DPTR,#TAB1d ;'电子信息系制作  '的首地址
              MOV COUNT,#10H  ;地址计数器设为16。
              MOV A,#98H      ;确定第四行起始地址,显示第四行字符
              LCALL xzl
              LCALL cb        ;查表子程序


              ret
;==================闪烁子程序================
        FLASH:MOV A,#08H       ;关闭显示,关光标,关反白
              LCALL xzl
              LCALL DELAY5     ;延时256ms   
              MOV A,#0CH       ;开显示,关光标,不闪烁
              LCALL xzl
              LCALL DELAY5
              MOV A,#08H       ;关闭显示,关光标,关反白
              LCALL xzl
              LCALL DELAY5
              MOV A,#0CH       ;开显示,关光标,不闪烁
              LCALL xzl
              LCALL DELAY5
              MOV A,#08H       ;关闭显示,关光标,关反白
              LCALL xzl
              LCALL DELAY5
              RET
;===================清屏子程序===============

           qp:MOV A,#01H ;清屏
              LCALL xzl
              MOV A,#34H ;8位数据扩充指令,绘图显示关
              LCALL xzl
              MOV A,#30H ;返回基本指令
              LCALL xzl
              RET

;==============查表取数据送显示==============
;dptr←表首地址,count←表中字符个数(ASC码)
           cb:CLR A
              MOVC A,@A+DPTR ;查表取数据
              LCALL  xsj     ;写数据送显示
              INC DPTR
              LCALL DELAY4   ;写一个数据延时40ms
              DJNZ COUNT,cb  ;表中数据没有查完,继续
              RET
;===================写数据子程序=============
              ;待写数据(A)
          xsj:LCALL cm ;测忙子程序
              SETB RS  ;数据
              CLR RW   ;写
              MOV P0,A ;待写数据(A)--P0(数据总线)
              SETB E   ;E的下降沿P0(数据总线)数据--12864DDRAM
              NOP
              NOP
              CLR E
              ret
;==================写指令子程序==============
              ;待写指令(A)
          xzl:LCALL Cm  ;测忙子程序
              CLR RS    ;rs=0,指令
              CLR Rw    ;rw=0,写
              MOV P0,A  ;待写指令(A)--P0(数据总线)
              SETB E    ;E的下降沿,P0(数据总线)指令--12864IR
              NOP
              NOP
              CLR E
              RET
;==================读数据子程序==============
              ;读出的数据存在STORE
          dsj:LCALL Cm  ;测忙子程序
              SETB RS   ;数据
              SETB RW   ;读
              SETB E    ;E=1时,12864数据--P0(数据总线)
              NOP
              MOV A,P0  ;读出的数据存在STORE
              CLR E
              MOV STORE,A
              RET
;===============测忙碌子程序===================
              ;12864忙.再测,不忙,返回
           Cm:MOV P0,#0FFH ;p0接受数据前先送1
              CLR RS    ;指令
              SETB RW   ;读
              SETB E    ;配合SETB RW 将db0--db7送数据总线p0
              JB P0.7,cm  ;忙.再测
              CLR E       ;不忙,返回
              RET
;===================延时子程序  =================

              DELAY1:       
              MOV R6,#06H
              DEL11: MOV R7,#08H
              DEL12: DJNZ R7,DEL12
              DJNZ R6,DEL11
              RET
              DELAY2:        ;
              MOV R6,#0CH
              DEL21: MOV R7,#18H
              DEL22: DJNZ R7,DEL22
              DJNZ R6,DEL21
              RET
              DELAY3:        ;1秒
              MOV R5,#16H
              DEL31: MOV R6,#100
              DEL32: MOV R7,#0FFH
              DEL33: DJNZ R7,DEL33
              DJNZ R6,DEL32
              DJNZ R5,DEL31
              RET
              DELAY4:        ;延时40.301ms
              MOV R6,#100
              DEL41: MOV R7,#200
              DEL42: DJNZ R7,DEL42
              DJNZ R6,DEL41
              RET
              DELAY5:        ;延时256ms
              MOV R5,#05H
              DEL51: MOV R6,#100
              DEL52: MOV R7,#0FFH
              DEL53: DJNZ R7,DEL53
              DJNZ R6,DEL52
              DJNZ R5,DEL51
              RET
;***************待显示字符表********************************
              TAB1A: DB '5 1 单片机实验板' ;显示在第一行
              TAB1B: DB ' www.lydz8.com  ' ;显示在第二行
            TAB1c: DB '吉林大学珠海学院 ' ;显示在第三行
            TAB1d: DB '电子信息系制作  ' ;显示在第四行



       end

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top