超声波测距仪编程_关于基于51单片机的超声波测距仪的汇编编程问题

这篇博客详细介绍了如何使用51单片机编程来驱动LCM1602液晶显示器,展示超声波测距仪的数据。内容包括多个子程序,如写控制指令、写CGRAM数据、写DDRAM等,以实现液晶屏的初始化和数据显示。
摘要由CSDN通过智能技术生成

展开全部

需要一个查满程序。

51单片机驱动LCM1602

;作者:eleclike

;功能;驱动LCM1602,LCM1602为深圳誉信公司的16*2液晶字符型显示模块e69da5e887aa3231313335323631343130323136353331333238653936,程序使用读写方式控制LCM1602,地址分别为:写指令口:80H; 读忙检查口:81H; 写数据口:82H; 读数据口:83H;

;子程序1:写控制指令子程序

;子程序2:写CGRAM数据子程序

;子程序3:写DDRAM子程序

;子程序4:写数据子程序

;子程序5:读忙子程序

RG_DLY EQU 2H

ORG 0000H

AJMP MAI

ORG 0030H

MAI: MOV SP,#60H

LP_MAI: NOP

LCALL SB_WRIN;调用写控制指令子程序

LCALL SB_WRCG;调用写CGRAM

LP2_MAI:NOP

LCALL SB_WRDR;调用写DDRAM

RT_MAI: AJMP LP2_MAI

;---------------------------------------------------------

;---------子程序---开始------------------------------------

;-1------写控制指令子程序----------

SB_WRIN:PUSH ACC

MOV R0,#80H ;写指令口

MOV A,#01H ;(INSTR.1)

LCALL SB_WAT ;清屏

MOVX @R0,A

MOV A,#02H ;(INSTR.2)

LCALL SB_WAT ;A光标归位

MOVX @R0,A

MOV A,#06H ;(INSTR.3)

LCALL SB_WAT ;AC自动加一,画面不动;

MOVX @R0,A

MOV A,#0CH ;(INSTR.4)0FH:显示开,关标 开,闪烁开

LCALL SB_WAT ;0CH 显示开,关标、闪烁关

MOVX @R0,A

;MOV A,#18H ;(INSTR.5)

;LCALL SB_WAT ;光标 或画面平移指令

;MOVX @R0,A

MOV A,#38H ;(INSTR.6)

LCALL SB_WAT ;8位数据,2行显示,5-7点阵

MOVX @R0,A

POP ACC

RET

;-2----写CGRAM数据子程序------

SB_WRCG:PUSH ACC

MOV DPTR,#CGR

MOV R1,#40H;=CGRAM的首地址

MOV R2,#4;=4个字符

LP_WG0: MOV R3,#8;=每个字符有8位数据即8行

LP_WG1: MOV R0,#80H

MOV A,R1

LCALL SB_WAT

MOVX @R0,A

CLR A

MOVC A,@A+DPTR

LCALL SB_WRTD

INC R1

INC DPTR

DJNZ R3,LP_WG1

DJNZ R2,LP_WG0

NOP

POP ACC

RET

;-3-----写DDRAM子程序--------

SB_WRDR:PUSH ACC

MOV R0,#80H

MOV A,#80H ; 写第一行DDRAM数据

LCALL SB_WAT

MOVX @R0,A

MOV A,#49H ; I

LCALL SB_WRTD

MOV A,#20H ; SPACE

LCALL SB_WRTD

MOV A,#4CH ; L

LCALL SB_WRTD

MOV A,#4FH ; O

LCALL SB_WRTD

MOV A,#56H ; V

LCALL SB_WRTD

MOV A,#45H ; E

LCALL SB_WRTD

MOV A,#20H ; SPACE

LCALL SB_WRTD

MOV A,#4DH ; M

LCALL SB_WRTD

MOV A,#59H ; Y

LCALL SB_WRTD

MOV A,#20H ; SPACE

LCALL SB_WRTD

MOV A,#42H ; B

LCALL SB_WRTD

MOV A,#41H ; A

LCALL SB_WRTD

MOV A,#42H ; B

LCALL SB_WRTD

MOV A,#59H ; Y

LCALL SB_WRTD

MOV A,#20H ; EMPTY

LCALL SB_WRTD

MOV A,#20H ; EMPTY

LCALL SB_WRTD

MOV R0,#80H

MOV A,#0C0H ;写第二行DDRAM

LCALL SB_WAT

MOVX @R0,A

MOV A,#49H ; I

LCALL SB_WRTD

MOV A,#20H ; SPACE

LCALL SB_WRTD

MOV A,#41H ; A

LCALL SB_WRTD

MOV A,#4CH ; L

LCALL SB_WRTD

MOV A,#53H ; S

LCALL SB_WRTD

MOV A,#4FH ; O

LCALL SB_WRTD

MOV A,#20H ; SPACE

LCALL SB_WRTD

MOV A,#4DH ; M

LCALL SB_WRTD

MOV A,#49H ; I

LCALL SB_WRTD

MOV A,#53H ; S

LCALL SB_WRTD

MOV A,#53H ; S

LCALL SB_WRTD

MOV A,#20H ; SPACE

LCALL SB_WRTD

MOV A,#59H ; Y

LCALL SB_WRTD

MOV A,#4FH ; O

LCALL SB_WRTD

MOV A,#55H ; U

LCALL SB_WRTD

MOV R2,#50 ;延时229ms

ACALL SB_DLY

POP ACC

RET

;-4---写数据子程序---------

SB_WRTD:MOV R0,#82H ;

LCALL SB_WAT

MOVX @R0,A ;

RET

;-5---读忙子程序-----------

SB_WAT: PUSH ACC

PUSH 00H

MOV R0,#81H

LP_WAT: MOVX A,@R0

RLC A

JC LP_WAT

POP 00H

POP ACC

RET

;---------子程序----结束-----------------------------------

;---------------------------------------------------------

;------延时子程序-----------

SB_DLY: PUSH RG_DLY ;

LP1_DLY:PUSH RG_DLY

LP2_DLY:PUSH RG_DLY

DJNZ R2,$

POP RG_DLY

DJNZ R2,LP2_DLY

POP RG_DLY

DJNZ R2,LP1_DLY

POP RG_DLY

DJNZ R2,SB_DLY

RET

;----------CGRAM区----------

CGR:...................;(用户自编码字符区)

END

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值