📄 addsub.asm
字号:
;实验名称:按加减键实现内部加减 0.01
; 功能:数码显示0.20---2.00
; 作者:http://www.mcuprog.com
; 05-02-01
;***********************************************************
;***********************************************************
E BIT P2.2 ;LCD口线的定义
RW BIT P2.1
RS BIT P2.0
LCDPORT EQU P0
CMD_BYTE EQU 2EH
DAT_BYTE EQU 2FH
KEYBIT BIT 00H ;有按键按下标志
DPBL EQU 30H ;当前显示的变量(20到200间)
LEDBAI EQU 31H ;显示的百
LEDSHI EQU 32H ;显示的十
LEDGE EQU 33H ;显示的个
LEDSM EQU 34H ;现在扫到第几个LED
KEYTIME EQU 35H ;20MS扫一次按键
ORG 0000H
AJMP MAIN
ORG 0003H
INT0_1: INC DPBL
RETI
ORG 000BH
AJMP TIME0_1
;以下为主程序的开始
ORG 0030H
MAIN:
MOV 20H,#00H
LCALL INITLCD
MOV DPBL,#00H
MOV KEYTIME,#04H
MOV CMD_BYTE,#80H //设置DDRAM的地址
LCALL WRITE_CMD
LCALL DELAY0
MOV DAT_BYTE,#"S"
LCALL WRITE_DAT
MOV DAT_BYTE,#"U"
LCALL WRITE_DAT
MOV DAT_BYTE,#"M"
LCALL WRITE_DAT
MOV DAT_BYTE,#":"
LCALL WRITE_DAT
MOV TH0,#0EEH ;16位的定时器,定时5MS
MOV TL0,#00H
MOV TMOD,#01H
SETB TR0
SETB IT0 ;INT0下降沿中断
MOV IE,#83H ;定时器0中断
SJMP $
ORG 0100H
TIME0_1: MOV TH0,#0EEH
MOV TL0,#00H
DJNZ KEYTIME,TIME0_RE
MOV KEYTIME,#04H ;每20MS进行一次按键扫描
MOV P1,#0FFH
LCALL KEYSCAN
LCALL JSDPBL
LCALL DISPDPBL
TIME0_RE: RETI
;按键扫描
KEYSCAN: MOV A,P1
CJNE A,#0FEH,CLRKEYBIT
JB KEYBIT,SCAN_RE
SETB KEYBIT
MOV DPBL,#00H
AJMP SCAN_RE
CLRKEYBIT: CLR KEYBIT ;清标志用于等待下一次按键
SCAN_RE: MOV P1,#0FFH
RET
;LCD1602要用到的一些子程序
;写命令(入口参数CMD_BYTE)
WRITE_CMD: CLR RS
CLR RW
MOV A,CMD_BYTE
MOV LCDPORT,A
SETB E
NOP
NOP
CLR E
LCALL DELAY0
RET
;写显示数据(入口参数DAT_BYTE)
WRITE_DAT: SETB RS
CLR RW
MOV A,DAT_BYTE
MOV LCDPORT,A
SETB E
NOP
NOP
CLR E
LCALL DELAY0
RET
;LCD显示初始化
INITLCD: MOV CMD_BYTE,#30H
LCALL WRITE_CMD
MOV CMD_BYTE,#30H
LCALL WRITE_CMD
MOV CMD_BYTE,#30H
LCALL WRITE_CMD
MOV CMD_BYTE,#38H ;设定工作方式
LCALL WRITE_CMD
MOV CMD_BYTE,#0CH ;显示状态设置
LCALL WRITE_CMD
MOV CMD_BYTE,#01H ;清屏
LCALL WRITE_CMD
MOV CMD_BYTE,#06H ;输入方式设置
LCALL WRITE_CMD
RET
;延时子程序
DELAY0: MOV R5,#0A0H
DELAY1: NOP
DJNZ R5,DELAY1
RET
;显示变量
DISPDPBL: MOV CMD_BYTE,#85H //设置DDRAM的地址
LCALL WRITE_CMD
MOV DAT_BYTE,LEDBAI
LCALL WRITE_DAT
MOV DAT_BYTE,LEDSHI
LCALL WRITE_DAT
MOV DAT_BYTE,LEDGE
LCALL WRITE_DAT
RET
;计算显示的值
JSDPBL: MOV A,DPBL
MOV B,#64H
DIV AB
ORL A,#30H
MOV LEDBAI,A
MOV A,B
MOV B,#0AH
DIV AB
ORL A,#30H
MOV LEDSHI,A
MOV A,B
ORL A,#30H
MOV LEDGE,A
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -