📄 51.txt
字号:
程序清单:
DAADR EQU 7FFEH
INO EQU 7FF8H
IN1 EQU 7FF9H
IN2 EQU 7FFAH
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#70H ;设置堆栈指针
LCALL ADC ;调用A/D转换程序
LCALL DISP ;调用显示子程序
MOV A,30H
CJNE A,#80H,AA ;判断频率高低,确定发送点数
AA: JC A1
CJNE A,#0C0H,BB
BB: JC A2
MOV R7,#5
AJMP WAVE
A1: MOV R7,#1
AJMP WAVE
A2: MOV R7,#3
AJMP WAVE
;********初始检测有无按键按下******************
WAVE: JB P2.0,ZH1 ;按键按下为低电平
LCALL DELAY0
ZH1: JNB P2.0,ZHJC ;跳到锯齿波发生程序
JB P2.2,ZH2
LCALL DELAY0 ;延时去抖
ZH2: JNB P2.2,SAN ;跳到三角波发生程序
JB P2.3,ZH3
LCALL DELAY0
ZH3: JNB P2.3,SIN ;跳到正弦波发生程序
JB P2.1,ZH4
LCALL DELAY0
ZH4: JNB P2.1,FANJC ;跳到方波发生程序
AJMP WAVE
;*****************波形产生函数*****************
ZHJC: MOV DPTR,#DAADR ;正向锯齿波
DA1: MOV R6,#00H
DA2: MOV A,R6
ADD A,R7
MOVX @DPTR,A ;将数据送到D/A转换模块
LCALL DELAY
LCALL DELAY1
MOV 33H,P2 ;扫描按键,如果有键按下则返回
ORL 33H,#0F0H
MOV R5,33H
CJNE R5,#0FFH,DA3
CJNE R6,#0FFH,DA2
AJMP DA1
DA3: RET
SAN: MOV DPTR,#DAADR ;三角波
MOV R6,#00H
MOV A,R7
RL A
MOV R7,A
MOV A,R6
DA5: ADD A,R7
MOVX @DPTR,A
LCALL DELAY
LCALL DELAY1
MOV 33H,P2
ORL 33H,#0F0H
MOV R5,33H
CJNE R5,#0FFH,DA8
CJNE A,#0FFH,DA5
DA7: SUBB A,R7
MOVX @DPTR,A
LCALL DELAY
LCALL DELAY1
MOV 33H,P2
ORL 33H,#0F0H
MOV R5,33H
CJNE R5,#0FFH,DA8
CJNE A,#00H,DA7
DA8: RET
SINS: MOV R6,#00H
MOV A,R6 ;单路正弦波
SIN: ADD A,R7
MOV DPTR,#TABH ;取正弦值表首地址
MOVC A,@A+DPTR
MOV DPTR,#DAADR
MOVX @DPTR,A
LCALL DELAY
LCALL DELAY1
MOV 33H,P2
ORL 33H,#0F0H
MOV R5,33H
CJNE R5,#0FFH,SIN2
AJMP SIN
SIN2: RET
FANJC: MOV DPTR,#DAADR ;方波
MOV R6,#00H
MOV A,R7
RL A
MOV R7,A
MOV A,R6
FAN5: ADD A,R7
MOV R6,A
MOV A,#0FFH
MOVX @DPTR,A
LCALL DELAY
LCALL DELAY1
MOV 33H,P2
ORL 33H,#0F0H
MOV R5,33H
CJNE R5,#0FFH,FAN8
CJNE R6,#0FFH,FAN5
FAN7: MOV A,R6
SUBB A,R7
MOV R6,A
MOV A,#00H
MOVX @DPTR,A
LCALL DELAY
LCALL DELAY1
MOV 33H,P2
ORL 33H,#0F0H
MOV R5,33H
CJNE R5,#0FFH,FAN8
CJNE R6,#00H,FAN7
FAN8: RET
;***************A/D转换****************
ADC: MOV DPTR,#7FF8H ;P2.7=0, 且指向IN0
MOV R1,#30H ;置数码区首地址
MOV R2,#02
READ: MOVX @DPTR,A
HERE: JNB P2.5,HERE ;等待转换结束
MOVX A,@DPTR ;读取转换后数据
MOVX @R1,A
INC R1
INC DPTR
DJNZ R2,READ
SETB RS0 ;选择寄存器组1
RR A ;经过计算得到延时程序初值
MOV R3,#9CH
MOV R4,#40H
CLR C
XCH A,R4
SUBB A,R4
MOV R4,A
MOV A,30H
RR A
XCH A,R3
SUBB A,B
MOV R3,A
MOV R1,A
MOV A,R4
MOV B,#02H
DIV AB
MOV R3,A
CLR RS0
RET
;**********码制变换和显示程序***************
DISP: SETB RS1 ;选择寄存器组2
;两个通道待转换的数据分别以十六进制形式放置在30H、31H
;40H和41H存放通道0转换的后BCD码
;42H和43H存放通道1转换后的BCD码
;将通道0的数据转换为需要显示的频率数
MOV R0,#30H ;指向通道0的数据
MOV A,@R0
MOV B,#07H
DIV AB
MOV B,#10
DIV AB
MOV 40H,A
MOV 41H,B
;将通道1的数据转换为需要显示的频率数
MOV R0,#31H ;指向通道0的数据
MOV A,@R0
MOV B,#07H
DIV AB
MOV B,#10
DIV AB
MOV 42H,A
MOV 43H,B
DIR: SETB RS1 ;选择寄存器组2
MOV R2,#04H ;显示6个数码管
MOV R0,#40H ;显示缓冲区首地址送R0
DL0: MOV A,@R0 ;取要显示的数作查表偏移量
MOV DPTR,#TAB ;指向段码表首
MOVC A,@A+DPTR ;查表得段码
MOV SBUF,A ;发送显示
DL1: JNB TI,DL1 ;等待发送完一帧
CLR TI ;清中断标志,准备继续发送
INC R0 ;更新显示单元
DJNZ R2,DL0 ;重复显示所有数码管
CLR RS1 ;恢复第0组工作寄存器
RET
;************波形延时子程序************
;延时单位256us
DELAY:SETB RS0
MOV R2,#128
DJNZ R2,$
DJNZ R1,DELAY
CLR RS0
RET
;************波形延时程序2************
;延时单位2us
DELAY1:SETB RS0
DJNZ R3,DELAY1
CLR RS0
RET
;***************按键延时**************
DELAY0:SETB RS0
SETB RS1
MOV R2,#20
LOOP2: MOV R3,#250
DJNZ R3,$
DJNZ R2,LOOP2
CLR RS0
CLR RS1
RET
TABH:DB 80H,83H,86H,89H,08DH,90H,93H,96H ;正弦函数值
DB 99H,09CH,09FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
DB 0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
DB 0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
DB 0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
DB 0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB 0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
DB 0E9H,0E7H,0E5H,0E3H,0E1H,0DFH,0DDH,0DAH
DB 0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
DB 0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
DB 0AEH,0ABH,0A8H,0A5H,0A2H,09FH,09CH,99H
DB 96H,93H,90H,08DH,89H,86H,83H,80H
DB 80H,07CH,79H,76H,72H,06FH,06CH,69H
DB 66H,63H,60H,05DH,05AH,57H,55H,51H
DB 04EH,04CH,48H,45H,43H,40H,03DH,03AH
DB 38H,35H,33H,30H,02EH,02BH,29H,27H
DB 25H,22H,20H,01EH,01CH,01AH,18H,16H
DB 15H,13H,11H,10H,0EH,0DH,0BH,0AH
DB 09H,08H,07H,06H,05H,04H,03H,02H
DB 02H,01H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,02H,01H
DB 02H,03H,04H,05H,06H,07H,08H,09H
DB 0AH,0BH,0DH,0EH,10H,11H,13H,15H
DB 16H,18H,01AH,01CH,01EH,20H,22H,25H
DB 27H,29H,02BH,02EH,30H,33H,35H,38H
DB 03AH,03DH,40H,43H,45H,48H,04CH,04EH
DB 51H,55H,57H,05AH,05DH,60H,63H,66H
DB 69H,06CH,06FH,72H,76H,79H,07CH,80H
TAB: DB 03FH,06H,05BH,04FH,66H,06DH,07DH,07H ;七段码表
DB 07FH,06FH,77H,07CH,39H,05EH,79H,71H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -