?? 51.txt
字號(hào):
程序清單:
DAADR EQU 7FFEH
INO EQU 7FF8H
IN1 EQU 7FF9H
IN2 EQU 7FFAH
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#70H ;設(shè)置堆棧指針
LCALL ADC ;調(diào)用A/D轉(zhuǎn)換程序
LCALL DISP ;調(diào)用顯示子程序
MOV A,30H
CJNE A,#80H,AA ;判斷頻率高低,確定發(fā)送點(diǎn)數(shù)
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
;********初始檢測(cè)有無按鍵按下******************
WAVE: JB P2.0,ZH1 ;按鍵按下為低電平
LCALL DELAY0
ZH1: JNB P2.0,ZHJC ;跳到鋸齒波發(fā)生程序
JB P2.2,ZH2
LCALL DELAY0 ;延時(shí)去抖
ZH2: JNB P2.2,SAN ;跳到三角波發(fā)生程序
JB P2.3,ZH3
LCALL DELAY0
ZH3: JNB P2.3,SIN ;跳到正弦波發(fā)生程序
JB P2.1,ZH4
LCALL DELAY0
ZH4: JNB P2.1,FANJC ;跳到方波發(fā)生程序
AJMP WAVE
;*****************波形產(chǎn)生函數(shù)*****************
ZHJC: MOV DPTR,#DAADR ;正向鋸齒波
DA1: MOV R6,#00H
DA2: MOV A,R6
ADD A,R7
MOVX @DPTR,A ;將數(shù)據(jù)送到D/A轉(zhuǎn)換模塊
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轉(zhuǎn)換****************
ADC: MOV DPTR,#7FF8H ;P2.7=0, 且指向IN0
MOV R1,#30H ;置數(shù)碼區(qū)首地址
MOV R2,#02
READ: MOVX @DPTR,A
HERE: JNB P2.5,HERE ;等待轉(zhuǎn)換結(jié)束
MOVX A,@DPTR ;讀取轉(zhuǎn)換后數(shù)據(jù)
MOVX @R1,A
INC R1
INC DPTR
DJNZ R2,READ
SETB RS0 ;選擇寄存器組1
RR A ;經(jīng)過計(jì)算得到延時(shí)程序初值
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
;兩個(gè)通道待轉(zhuǎn)換的數(shù)據(jù)分別以十六進(jìn)制形式放置在30H、31H
;40H和41H存放通道0轉(zhuǎn)換的后BCD碼
;42H和43H存放通道1轉(zhuǎn)換后的BCD碼
;將通道0的數(shù)據(jù)轉(zhuǎn)換為需要顯示的頻率數(shù)
MOV R0,#30H ;指向通道0的數(shù)據(jù)
MOV A,@R0
MOV B,#07H
DIV AB
MOV B,#10
DIV AB
MOV 40H,A
MOV 41H,B
;將通道1的數(shù)據(jù)轉(zhuǎn)換為需要顯示的頻率數(shù)
MOV R0,#31H ;指向通道0的數(shù)據(jù)
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個(gè)數(shù)碼管
MOV R0,#40H ;顯示緩沖區(qū)首地址送R0
DL0: MOV A,@R0 ;取要顯示的數(shù)作查表偏移量
MOV DPTR,#TAB ;指向段碼表首
MOVC A,@A+DPTR ;查表得段碼
MOV SBUF,A ;發(fā)送顯示
DL1: JNB TI,DL1 ;等待發(fā)送完一幀
CLR TI ;清中斷標(biāo)志,準(zhǔn)備繼續(xù)發(fā)送
INC R0 ;更新顯示單元
DJNZ R2,DL0 ;重復(fù)顯示所有數(shù)碼管
CLR RS1 ;恢復(fù)第0組工作寄存器
RET
;************波形延時(shí)子程序************
;延時(shí)單位256us
DELAY:SETB RS0
MOV R2,#128
DJNZ R2,$
DJNZ R1,DELAY
CLR RS0
RET
;************波形延時(shí)程序2************
;延時(shí)單位2us
DELAY1:SETB RS0
DJNZ R3,DELAY1
CLR RS0
RET
;***************按鍵延時(shí)**************
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 ;正弦函數(shù)值
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -