基于单片机的数字电压表设计 (请不要完成抄袭)

2025-03-13 11:18:05
推荐回答(5个)
回答1:

  我给你看看我以前做过的数字电压表,汇编的
  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

回答2:

这种技术活不是一会而就能完成的,大家都挺忙的,你就是给再多的分都没有人给你做的,还是出钱找人给你做吧。

回答3:

哥们。我们学校的行情,友情价:做个电子钟160元。毕设的话。。
我劝你还是自己解决吧,很简单的。。要是实在不想坐,就花钱请人做把。。分数的话,500分都没人帮忙的

回答4:

汇编写程序我个人觉得太麻烦了,我是用C来编写的

回答5:

不知道现在的学生还能干啥!