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

📄 myproj.asm

📁 暑假为学生培训写的51相关接口的所有源码及项目代码
💻 ASM
字号:
        org 0000h
	LJMP Main
	org 0100h
SDA     BIT  P2.3 ;数据通信口
SCL     BIT  P2.4
SENDDAT DATA 34H
RECVDAT DATA 35H
RS   EQU  P2.2
RW   EQU  P2.1
E    EQU  P2.0
Main:
	setb SCL
	setb SDA
	setb p0.0
	call InitLCD
	mov RECVDAT,#00H
	mov SENDDAT,#99H
Repeat:
 	CALL WRITE
 	mov R6,#02H
 	;call DelayMs
 	CALL READ
 	call DispNum
	jmp Repeat
;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	
DispNum:
        mov A,#80H
        call EnterI
        
        mov A,RECVDAT
        anl A,#0f0H
        swap A
        add A,#30H
        call EnterD
        mov A,RECVDAT
        anl A,#0fH
        add A,#30H
        call EnterD
        ret
        
READ: 
	LCALL STA
	MOV A,#0A0H
	LCALL WRBYT
	LCALL CACK
	;JB F0,READ
	MOV A,#00H
	LCALL WRBYT
	LCALL CACK
	;JB F0,READ
	LCALL STA
	MOV A,#0A1H
	LCALL WRBYT
	LCALL CACK
	;JB F0,READ
	MOV R1,#RECVDAT
	LCALL RDBYT
	MOV @R1,A
	LCALL MNACK
	LCALL STOP
	RET

WRITE: 
	LCALL STA
	
	MOV A,#0A0H
	LCALL WRBYT
	LCALL CACK
	;JB F0,WRITE 
	
	MOV A,#00H
	LCALL WRBYT
	LCALL CACK
	;JB F0,WRITE

	MOV R1,#SENDDAT
	MOV A,@R1 
	LCALL WRBYT
	LCALL CACK
	;JB F0,WRITE

	LCALL STOP
	RET
	

STA: 
	SETB SDA ;启动(设SDA脚为SDA数据传输,设SCL为SCL时钟)
	SETB SCL 
	CLR SDA
	CLR SCL
	RET

STOP: 
	CLR SDA;停止
	SETB SCL
	SETB SDA
	RET
	
MNACK: 
	SETB SDA;发送非应答位
	SETB SCL
	CLR SCL
	CLR SDA
	RET

CACK: 
        CLR F0
	SETB SDA;应答位检查子程序
	SETB SCL
	MOV C,SDA
	JNC CEND
	SETB F0
CEND: 
	CLR SCL
	CLR SDA
	RET

WRBYT: 
	MOV R3,#08H;发送一个字节数据子程序
WLP: 
	RLC A
	mov SDA,C
	SETB SCL
	CLR SCL
	CLR SDA
	DJNZ R3,WLP
	RET

RDBYT: 
	MOV A,#00H
	CLR C
	MOV R3,#08H ;从SDA上接受一个字节数据子程序(读入字节放入R7与A中)
	SETB SDA
RLP:
	SETB SCL
	MOV C,SDA
	RLC A
	CLR SCL
	DJNZ R3,RLP
	CLR SDA
	RET
Delay: ;延时子程序
	mov r7,#2H
	d1:mov r6,#255 
	d2:djnz r6,d2
	djnz r7,d1
	ret   	
;秒级延时子程序以130050us为单位,最大为130050us		
DelaySs:		
	mov 	r6,#0ffh
ss:	
	mov 	r7,#0ffh
	djnz 	r7,$
	djnz 	r6,ss
	djnz	r5,DelaySs
	ret
;毫秒延时子程序以510us为单位,最大为130050us		
DelayMs:		
	mov 	r7,#0ffh
	djnz 	r7,$
	djnz 	r6,DelayMs
	ret
;微秒延时以2us为单位,最大为510us
DelayUs:
	djnz r7,$           
    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
END

⌨️ 快捷键说明

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