基于单片机的数字电压表设计

核心提示我给你看看我以前做过的数字电压表,汇编的COM EQU 50H ;指令寄存器DAT EQU 51H ;数据寄存器RS EQU P2.1 ;LCD寄存器选择信号RW EQU P2.2 ;LCD读/写选择信号EE

我给你看看我以前做过的数字电压表,汇编的

COM EQU 50H ;指令寄存器

DAT EQU 51H ;数据寄存器

RS EQU P2.1 ;LCD寄存器选择信号

RW EQU P2.2 ;LCD读/写选择信号

E EQU P2.3 ;LCD使能信号

ORG 0000H

LJMP MAIN ;主程序入口地址

ORG 000BH

LJMP BT0 ;T0中断入口

ORG 0030H ;主程序,初始化

MAIN:

MOV SP,#60H

LCALL INT

MOV 30H,#30H ;电压整数位

MOV 31H,#02EH ;小数点位

MOV 32H,#30H ;小数个位

MOV 33H,#30H ;小数十位

MOV 34H,#30H ;小数百位

MOV 35H,#56H ;字符"V"

MOV R7,#30H

LCALL STR0 ;显示字符串0

LCALL DELAY

LCALL STR1 ;显示字符串1

LCALL DELAY

LCALL N2 ;显示Voltage=0.000V

;***********定时器初始化程序***********

MOV TMOD,#00H ;定时器T0设为方式0

MOV TH0,#00H ;装入定时常数定时100us

MOV TL0,#00H

SETB TR0 ;启动T0

MOV 24H,#08H;装入T0中断次数

MOV IE,#82H ;开中断

LP:

MOV R7,#30H ;显示缓冲区首地址

LCALL DISPLY

SJMP LP ;循环显示

LED1:CLR P3.0

RET

DISPLY: ;LCD显示子程序

MOV COM,#0CAH

LCALL PR1

MOV DAT,30H

LCALL PR2

MOV DAT,31H

LCALL PR2

MOV DAT,32H

LCALL PR2

MOV DAT,33H

LCALL PR2

MOV DAT,34H

LCALL PR2

MOV DAT,35H

LCALL PR2

RET

STR0:

MOV COM,#01H

LCALL PR1

MOV COM,#06H

LCALL PR1

MOV COM,#090H ;设置DDRAM地址

LCALL PR1 ;调写指令代码子程序

MOV DPTR,#TAB4

MOV R2,#16

MOV R3,#00H

WRIN0:

MOV A,R3

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

INC R3

DJNZ R2,WRIN0

MOV COM,#0D0H

LCALL PR1

MOV DPTR,#TAB5

MOV R2,#16

MOV R3,#00H

WRIN1:

MOV A,R3

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

INC R3

DJNZ R2,WRIN1

MOV R3,#10H

ZUOYI:

MOV COM,#18H

LCALL PRX

DJNZ R3,ZUOYI

LCALL DELAY00

LCALL DELAY00

LCALL DELAY00

LCALL DELAY00

RET

RET

STR1:

MOV COM,#01H ;LCD清0命令

LCALL PR1 ;调写指令代码子程序

MOV COM,#06H ;输入方式命令,光标右移

LCALL PR1 ;调写指令代码子程序

MOV COM,#40H

LCALL PR1

MOV R5,#20H

MOV DPTR,#ZI

MOV R4,#0

LOOP1:MOV A,R4

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

INC R4

DJNZ R5,LOOP1

MOV COM,#80H

LCALL PR1

MOV DPTR,#TAB2

MOV A,#00H

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

MOV A,#01H

MOV DPTR,#TAB2

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

MOV A,#02H

MOV DPTR,#TAB2

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

MOV A,#03H

MOV DPTR,#TAB2

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

MOV R1,#00H

MOV R0,#0dH

MOV DPTR,#TAB3

LOOP2:MOV A,R1

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

INC R1

DJNZ R0,LOOP2

RET

N2: MOV COM,#0C0H

LCALL PR1

MOV DPTR,#TAB1

MOV R2,#10

MOV R3,#00H

WRIN:

MOV A,R3

MOVC A,@A+DPTR

MOV DAT,A

LCALL PR2

INC R3

DJNZ R2,WRIN

RET

TAB1: DB "VOLTAGE = "

TAB2: DB 00H

DB 01H

DB 02H

DB 03H

DB 04H

DB 05H

TAB3:DB "10701 tcw "

ZI: DB 009H,00AH,00CH,01FH,00CH,00AH,00CH,009H

DB 004H,004H,01FH,004H,00AH,00AH,011H,000H

DB 004H,004H,01FH,01FH,01FH,004H,007H,000H

DB 004H,00EH,010H,00EH,000H,00EH,003H,000H

TAB4:DB " welcome ! "

TAB5:DB "DESIGN BY tcw"

TAB6:DB "123456"

;********************************************************************

;定时器T0中断服务子程序,读取ADC0809第0通道的A/D转换结果并化为显示值*

;********************************************************************

BT0:

PUSH ACC

PUSH PSW

MOV PSW,#08H

CLR TR0

MOV TH0,#00H ;重新装入初值

MOV TL0,#00H

DEC 24H

MOV A,24H

JNZ RTN1

MOV 24H,#08H

LCALL ADC

RTN1: SETB TR0

POP PSW

POP ACC

RETI

ADC:

MOV DPTR,#0F6FFH

MOV A,#0 ;选择通道0

MOVX @DPTR,A ;启动AD转换

MOV A,#40H

DJNZ ACC,$

MOVX A,@DPTR

MOV 22H,A

MOV 21H,#0CCH

CJNE A,21H,BJ0

BJ0:JNC LED

SJMP LL0

LL0:SETB P3.0

SJMP LL

LED:LCALL LED1

LL: MOV A,22H

MOV B,#05H ;A/D转换结果化为显示值

MUL AB ;(AD*5)/256

MOV 30H,B ;AD*5的高字节为整数部分

MOV B,#0AH

MUL AB ;AD*5的低字节为/256的结果,为小数部分

MOV 32H,B ;二进制小数换为10进制数

MOV B,#0AH

MUL AB

MOV 33H,B

MOV B,#0AH

MUL AB

MOV 34H,B

MOV A,30H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV 30H,A

MOV A,32H

MOVC A,@A+DPTR

MOV 32H,A

MOV A,33H

MOVC A,@A+DPTR

MOV 33H,A

MOV A,34H

MOVC A,@A+DPTR

MOV 34H,A

RET

TAB: DB "0123456789"

;*****************************************

;****LCD间接控制方式下的初始化子程序******

;*****************************************

INT:

LCALL DELAY

MOV COM,#38H ;设置工作方式

LCALL PR1

MOV COM,#01H

LCALL PR1

MOV COM,#06H

LCALL PR1

MOV COM,#0CH

LCALL PR1

RET

DELAY: ;延时子程序

MOV R6,#0FH

MOV R7,#00H

DELAY1:

NOP

DJNZ R7,DELAY1

DJNZ R6,DELAY1

RET

DELAY00: ;延时子程序

MOV R6,#0FFH

MOV R7,#0FFH

DELAY0:

NOP

DJNZ R7,DELAY1

DJNZ R6,DELAY1

RET

;*********************************************

;*******LCD间接控制方式下的驱动子程序*********

;*********************************************

;2 写指令代码子程序

PRX:

PUSH ACC

CLR RS

SETB RW

PR110:

MOV P0,#0FFH

SETB E

LCALL DELAY00

NOP

MOV A,P0

CLR E

JB ACC.7,PR11

CLR RW

MOV P0,COM

SETB E

CLR E

POP ACC

RET

PR1:

PUSH ACC

CLR RS

SETB RW

PR11:

MOV P0,#0FFH

SETB E

LCALL DELAY

NOP

MOV A,P0

CLR E

JB ACC.7,PR11

CLR RW

MOV P0,COM

SETB E

CLR E

POP ACC

RET

;3 写显示数据子程序

PR2:

PUSH ACC

CLR RS

SETB RW

PR21:

MOV P0,#0FFH

SETB E

LCALL DELAY

MOV A,P0

CLR E

JB ACC.7,PR21

SETB RS

CLR RW

MOV P0,DAT

SETB E

CLR E

POP ACC

RET

END

 
友情链接
鄂ICP备19019357号-22