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

📄 ad549.asm

📁 单片机开发板源程序 适合初学者 第五部分 报警产生器
💻 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 + -