📄 ad549.asm
字号:
;液晶板显示当前模拟电压
; 功能:数码显示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
;AD(TLC549)引脚
AD_CS BIT P3.7
AD_CK BIT P3.5
AD_OUT BIT P3.6
CMD_BYTE EQU 2EH
DAT_BYTE EQU 2FH
KEYBIT BIT 00H ;有按键按下标志
ADBL EQU 30H ;当前AD的变量(00到255间),
LEDBAI EQU 31H ;显示的百
LEDSHI EQU 32H ;显示的十
LEDGE EQU 33H ;显示的个
LEDSM EQU 34H ;现在扫到第几个LED
KEYTIME EQU 35H ;20MS扫一次按键
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME0_1
;以下为主程序的开始
ORG 0030H
MAIN:
MOV 20H,#00H
LCALL INITLCD
MOV ADBL,#00H
MOV KEYTIME,#04H
MOV CMD_BYTE,#80H //设置DDRAM的地址
LCALL WRITE_CMD
LCALL DELAY0
MOV DAT_BYTE,#"A"
LCALL WRITE_DAT
MOV DAT_BYTE,#"D"
LCALL WRITE_DAT
MOV DAT_BYTE,#"C"
LCALL WRITE_DAT
MOV DAT_BYTE,#":"
LCALL WRITE_DAT
MOV TH0,#0EEH ;16位的定时器,定时5MS
MOV TL0,#00H
MOV TMOD,#01H
SETB TR0
MOV IE,#82H ;定时器0中断
SJMP $
ORG 0100H
TIME0_1: MOV TH0,#0EEH
MOV TL0,#00H
DJNZ KEYTIME,TIME0_RE
MOV KEYTIME,#04H ;每20MS进行一次按键扫描
LCALL DAC0832
LCALL JSDPBL
LCALL DISPDPBL
TIME0_RE: RETI
;以下为AD转换程序
DAC0832: CLR AD_CS
MOV R7,#08H
MOV ADBL,#00H
READ_1: SETB AD_CK
JB AD_OUT,SETBC
CLR C
AJMP READ_2
SETBC: SETB C
READ_2: MOV A,ADBL
RLC A
MOV ADBL,A
CLR AD_CK
DJNZ R7,READ_1
SETB AD_CS
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,ADBL
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 + -