⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myproj.asm

📁 暑假为学生培训写的51相关接口的所有源码及项目代码
💻 ASM
字号:
T_CLK Bit P3.4                      
T_IO  Bit P3.5                        
T_RST Bit p3.6
RS   EQU  P2.0
RW   EQU  P2.1
E    EQU  P2.2
ORG  0000H
LJMP Main
ORG  0100H
Main: 
        lcall InitLCD;LCD初始化 
        mov 30H,#00h
        mov 31H,#08h
        mov 32H,#18h
        mov 33H,#01h
        mov 34H,#08h
        mov 35H,#05h
        mov 36H,#08h
        mov R0,#30H
        lCALL SET1302;给1302赋初值
C2C:    
        mov R0,#30H
        lCALL GET1302;从1302读数据
        lcall ShowDATE;在LCD循环显示年月日
        AJMP C2C
        
ShowDATE:
        MOV A,#80H	     ;设置显示地址,从第1行第1列开始显示
        ADD A,#40H
        ACALL EnterI
        mov r0,#36h
L1:     
        mov a,@r0
        ANL A,#0F0H
        swap A      
        orl a,#30h
        lcall EnterD
        mov a,@r0
        ANL A,#0FH
        orl a,#30h
        lcall EnterD
        lcall TME0
        dec r0
        cjne r0,#2fh,l1
        ret
;设置1302七个字节数据R0表示数据起始缓冲区
SET1302:       
        MOV    R1,#8EH    
        MOV    R2,#00H       
        LCALL  SetRTByte  
        MOV    R7,#7        
        MOV    R1,#80H      
SetByte:
        mov A,@R0 
        mov R2,A
        LCALL SetRTByte
        inc R0
        inc R1
        inc R1
        DJNZ R7,SetByte  
        MOV    R1,#8EH        
        MOV    R2,#80H       
        LCALL  SetRTByte 
        RET
;为时钟设定一个字节 R1为命令 R2为数据          
SetRTByte:
          CLR  T_RST
          ClR  T_CLK
          clr  T_IO
          SetB T_RST
          ;先设定命令       
          MOV   R4,#8
          MOV   A,R1
SetBitS:
          RRC   A
          MOV   T_IO,C
          SETB  T_CLK
          CLR   T_CLK
          DJNZ  R4,SetBitS
          ;设定数据
          MOV   R4,#8
          MOV   A,R2
SetBitD:
          RRC    A
          MOV    T_IO,C
          SETB   T_CLK
          CLR    T_CLK
          DJNZ   R4,SetBitD
          Clr    T_RST
          RET
;取1302七个字节数据 R0表示数据起始缓冲区 
GET1302:      
        MOV    R7,    #07H
        MOV    R1,    #81H      
GetByte:   
        LCALL  GetRTByte
        MOV    @R0,A         
        INC    R0
        INC    R1
        INC    R1
        DJNZ   R7,GetByte
        RET
;从时钟取一个字节 R1为命令 A为所取数据            
GetRTByte: 
;先设定命令
          CLR  T_RST
          ClR  T_CLK
          clr  T_IO
          SetB  T_RST        
          MOV   R4,#8
          MOV   A,R1
SetBitG:
          RRC   A
          MOV   T_IO,C
          SETB  T_CLK
          CLR   T_CLK
          DJNZ  R4,SetBitG
          ;设定数据
          MOV   R4,#8
GetBitD:
          mov    C,T_IO
          RRC    A
          SETB   T_CLK
          CLR    T_CLK
          DJNZ   R4,GetBitD
          Clr    T_RST
          RET
;---------------------------------- 
;初始化LCD夜晶并用软件复位    
;----------------------------------
InitLCD:
	MOV A,#038H         
        LCALL EnterI
        LCALL LcdBUSY    ;判忙
        MOV A,#038H   ;设置为8总线16*2 5*8点阵      
        LCALL EnterI
        MOV A,#01H    ;清屏
        LCALL EnterI
        MOV A,#06H    ;设读写字符时地址加1,且整屏显示不移动
        LCALL EnterI
        MOV A,#0CH    ;开显示,不开开光标显示,光标和光标所在的字符闪烁
        LCALL EnterI
        LCALL Delay
	ret
;------------------------------------
 ;判忙子程序[用于判断LCD是否在忙于写入,如LCD在忙于别的事情,那就等LCD忙完后才操作]
 ;入口参数:无
 ;出口参数:无
;-------------------------------------
LcdBUSY:
        PUSH  ACC
        CLR RS
        SETB RW
TT0:    
        SETB E
        MOV A,P1
        CLR E
        ANL A,#80H
        JNZ TT0
        POP   ACC
        RET
;-----------------------------------
;写命令子程序[将A寄存器命令内容发送到P1口]
;入口参数:A
;出口参数:无
;见用资源 A 寄存器
;-----------------------------------
;显示表结构数据 R0位置 DPTR字符首址 R2个数
WriteStrC:
        mov R4,#00h
Write:
        mov A,R4
	movc A,@A+DPTR
	mov R3,A
	Call WriteByte
	inc R0
	inc R4
	DJNZ R2,Write
	ret
;显示内存中数据R0位置 R1源地址 R2个数
WriteStrD:
        mov A,@R1
        mov R3,A
	Call WriteByte
	inc R0
	inc R1
	DJNZ R2,WriteStrD
	ret
;R0位置 R3字符
WriteByte: ;送单个字符
        mov A,R0
        add A,#80H
        Call EnterI      
	mov A,R3
	Call EnterD
	ret 

EnterI: ;送命令
        Clr RS
        CLR RW
        SETB E
        MOV P1,A
        CLR E
        Call Delay
	RET

EnterD: ;送数据
	SETB RS
        CLR RW
        SETB E
        MOV P1,A
        CLR E
        Call Delay
	RET	
;---------------------------------------
;延时子程序132ms
;---------------------------------------
MS39:MOV R3,#003H   ;7*132=924
MS40:MOV R4,#0FFH   ;延时时间为132ms
MS2: MOV R5,#0FFH
MS1: DJNZ R5,MS1
     DJNZ R4,MS2
     DJNZ R3,MS40
     RET
;-------------------------------
; 延时子程序R11=01H  为0.5ms
;入口参数:R11
;出口参数:无
;--------------------------------
TME0: MOV  R4,#0AH         ;延时 5ms
TME1: MOV  R5,#0FFH
TME2: DJNZ R5,TME2
      DJNZ R4,TME1
      RET     
;-------------------------------- 
Delay: ;延时子程序
	mov r7,#2H
	d1:mov r6,#255 
	d2:djnz r6,d2
	djnz r7,d1
	ret    
;6)字模数据
;***************************************************************
;字模数据定义代码
;****************************************************************
;为自编写字模用WRCGRAM子程序写入1602LCD夜晶显示器CGRAM存储器
TBZI:	DB 08H,0FH,12H,0FH,0AH,1FH,02H,02H  ;年
	DB 0FH,09H,0FH,09H,0FH,09H,11H,00H  ;月
	DB 0FH,09H,09H,0FH,09H,09H,0FH,00H  ;日
	db 00h,17h,0ch,14h,0ch,0ch,17h,00h  ;汇
	db 04h,1fh,08h,0fh,0eh,0dh,00h,00h  ;友
	db 00h,1fh,04h,0fh,05h,05h,1fh,00h  ;五          
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -