c语言怎么用movc指令,【图片】求助大佬用c语言帮忙编写下程序【c程序吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

PSR_LAX:

RET

//子程序名称:PUTCHAR(A).;

PUTCHAR: //;在(CXPOS,CYPOS)字符位置写字符子程序

CALL CHARLCDPOS //;设置(CXPOS,CYPOS)字符位置的DDRAM地址

CALL LCDWD // ;写字符

RET

//子程序名称:GETCHAR(A).

GETCHAR: //;在(CXPOS,CYPOS)字符位置读字符子程序

CALL CHARLCDPOS //;设置(CXPOS,CYPOS)字符位置的DDRAM地址

CALL LCDRD ;读字符

RET;

//子程序名称:CHARLCDPOS().;

CHARLCDPOS: // ;设置(CXPOS,CYPOS)字符位置的DDRAM地址

PUSH ACC

ANL CXPOS,#0FH // ;X位置范围(0到15)

ANL CYPOS,#03H // ;Y位置范围(0到3)

MOV A,CYPOS // ;(CXPOS,CYPOS)对应DDRAM地址

CJNE A,#00,LPS_LA1 // ;(第一行)X: 第0----15个字符

MOV A,CXPOS // ; DDRAM: 0----0FH

JMP LPS_LAX

LPS_LA1:CJNE A,#01,LPS_LA2

MOV A,CXPOS // ;(第二行)X: 第0----15个字符

ADD A,#40H // ; DDRAM: 40----4FH

JMP LPS_LAX

LPS_LA2:CJNE A,#02,LPS_LAY

MOV A,CXPOS // ;(第三行)X: 第0----15个字符

ADD A,#10H // DDRAM: 10----1FH

JMP LPS_LAX

LPS_LAY:MOV A,CXPOS //;(第四行)X: 第0----15个字符

ADD A,#50H //;DDRAM: 50----5FH

LPS_LAX:ORL A,#80H //;设置DDRAM地址

CALL LCDWC

POP ACC

RET;

//子程序名称:CHARCURSORNEXT().;

CHARCURSORNEXT: //;置字符位置为下一个有效位置子程序

INC CXPOS //;字符位置加1

ANL CXPOS,#0FH //;字符位置CXPOS的有效范围为(0到15)

MOV R0,CXPOS

CJNE R0,#0,CSN_LAX //;CXPOS为0表示要换行

INC CYPOS

ANL CYPOS,#03H //;字符位置CYPOS的有效范围为(0到3)

CSN_LAX:

RET;

//子程序名称:LCDRESET().;

LCDRESET: //;SMC1604系列液晶显示控制器初始化子程序

MOV A,#38H // ;1604的显示模式字为38H

CALL LCDWC //;显示模式设置第一次

CALL DELAY3MS //;延时3MS

CALL LCDWC // ;显示模式设置第二次

CALL DELAY3MS //;延时3MS

CALL LCDWC //;显示模式设置第三次

CALL DELAY3MS //;延时3MS

CALL LCDWC //;显示模式设置第四次

CALL DELAY3MS //;延时3MS

MOV A,#08H //;显示关闭

CALL LCDWC

MOV A,#01H //;清屏

CALL LCDWC

CALL DELAY3MS //;延时3MS

MOV A,#06H //;显示光标移动设置

CALL LCDWC

MOV A,#0CH //;显示开及光标设置

CALL LCDWC

RET

RET

DELAY3MS: //;延时3MS子程序

MOV R1,#15

DL3_PA: MOV R2,#100

DJNZ R2,$

DJNZ R1,DL3_PA

RET;

//LCDWC,LCDWD,LCDRD为HD44780兼容芯片的MCS51模拟口线方式的基本子程序

//LCDWAITIDLE为内部子程序.//子程序名称:LCDWC(A).

LCDWC: //;送控制字子程序

CALL LCDWAITIDLE //;HD44780液晶显示控制器忙检测

CLR RSPIN //;RS=0 RW=0 E=高脉冲

CLR RWPIN

MOV P1,A

SETB EPIN

NOP

CLR EPIN

RET;

//子程序名称:LCDWD(A).;

LCDWD: //;送数据子程序

CALL LCDWAITIDLE //;HD44780液晶显示控制器忙检测

SETB RSPIN // ;RS=1 RW=0 E=高脉冲

CLR RWPIN

MOV P1,A

SETB EPIN

NOP

CLR EPIN

RET;

//子程序名称:LCDRD().;

LCDRD: //;读数据子程序

CALL LCDWAITIDLE //;HD44780液晶显示控制器忙检测

MOV P1,#0FFH

SETB RSPIN //;RS=1 RW=0 E=高脉冲

SETB RWPIN

SETB EPIN

NOP

MOV A,P1

CLR EPIN

RET;

//子程序名称:LCDWAITIDLE().

LCDWAITIDLE: //;忙检测子程序

PUSH ACC //;正常读写操作之前必须检测LCD控制器状态

MOV P1,#0FFH //;状态字的D7位为0表示LCD控制器空闲,可以

//;进行读写操作

CLR RSPIN //;RS=0 RW=1 E=高电平

SETB RWPIN

SETB EPIN

MOV R0,#20

WTD_PA: NOP ;

JNB P1.7,WTD_LAX //;D7=0 表示LCD控制器空闲,则退出检测

DJNZ R0,WTD_PA //;D7=1 表示LCD控制器忙,则继续检测

//;若忙时间超过100uS,则表示LCD控制器硬件;出错,退出检测

NOP // ;用户可在此设置错误代码,或仿真时设置断点

WTD_LAX:

CLR EPIN

POP ACC

RET

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值