欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
用51單片機制作多種頻率方波音頻信號發(fā)生器
[打印本頁]
作者:
Kxuan163
時間:
2020-12-17 15:30
標題:
用51單片機制作多種頻率方波音頻信號發(fā)生器
硬件:AT89s52開發(fā)板(含4x4數字鍵盤)
功能: 用按鍵選擇不同頻率方波,由P1.0輸出方波音頻信號
作者:Kxuan163
匯編語言源程序如下:
;;--------------------------------------------
ORG 0000H
AJMP MAIN
;;--------------------------------------------
ORG 001BH ;定時器T1中斷處理入口地址
AJMP T1_INT
;;--------------------------------------------
ORG 0030H ;主程序入口地址
MAIN: MOV SP,#60H
MOV 30H,#16 ;開機/復位顯示“-”,16是段碼表"-"偏移址
LOOP1: CALL KEY_SCAN ;掃描鍵盤
CALL KEYPLAER ;顯示按鍵數字
;;CLR P1.0 ;令輸出的初始狀態(tài)為低電平
MOV A, 30H ;按鍵順序號送至A
CJNE A, #16, OnKeyJmp ;若有按鍵,依鍵號跳轉某程序段
JMP LOOP1 ;若無按鍵,繼續(xù)掃描鍵盤
OnKeyJmp: RL A ;每條AJMP指令占2字節(jié),按鍵順序號x2
MOV DPTR, #JmpTab ;散轉表首址送DPTR
JMP @A +DPTR ;依按鍵散轉
JmpTab: AJMP LOOP1 ;按0鍵,
AJMP OUT100 ;按1鍵,輸出100Hz方波
AJMP OUT200 ;按2鍵,輸出200Hz方波
AJMP OUT300 ;按3鍵,輸出300Hz方波
AJMP OUT400 ;按4鍵,輸出400Hz方波
AJMP OUT500 ;按5鍵, 輸出500Hz方波
AJMP OUT600 ;按6鍵, 輸出600Hz方波
AJMP LOOP1 ;按7鍵,
AJMP LOOP1 ;按8鍵,
AJMP LOOP1 ;按9鍵,
AJMP LOOP1 ;按A鍵,
AJMP LOOP1 ;按b鍵,
AJMP LOOP1 ;按C鍵,
AJMP LOOP1 ;按D鍵,
AJMP LOOP1 ;按E鍵,
AJMP LOOP1 ;按F鍵,
;;---------------------------------------------
KEY_SCAN: MOV P1,#0F0H ;置列線為0,行線為1
MOV A,P1
ANL A,#0F0H
MOV B,A
MOV P1,#0FH ;置列線為1,行線為0
MOV A,P1
ANL A,#0FH
ORL A,B ;高四位與低四位重新組合
CJNE A,#0FFH,KEY_IN1 ;0FFH為末按鍵
RET
KEY_IN1: MOV B,A
MOV DPTR,#KEYTABLE
MOV R3,#0FFH ;
KEY_IN2: INC R3 ;順序碼加1
MOV A,R3
MOVC A,@A+DPTR
CJNE A,B,KEY_IN3
MOV A,R3 ;找到,取順序碼
MOV 30H,A ;送顯示
RET
KEY_IN3: CJNE A,#00H,KEY_IN2 ;末完,繼續(xù)查
RET ;00H為結束碼
;;-------------------------------------------
KEYPLAER: MOV R3, 30H
MOV A, 30H
MOV DPTR,#TABLE ;取段碼表地址
MOVC A,@A+DPTR ;查顯示數據對應段碼
MOV P0,A ;段碼放入P0口
CLR P2.7 ;最右數碼管亮
RET
;;--------------------------------------------
;定時器T1預裝計數初值的計算:
;機器周期 =12/Fosc =12/(11.0592MHz) =1.08506944μs ≈1μs
;100Hz的半周期=(1/100)/2=5ms, 計數初值=65536-5000=60536=EC78h
;200Hz的半周期=(1/200)/2=2.5ms, 計數初值=65536-2500=63036=F63Ch
;300Hz的半周期=(1/250)/2=1.667ms,計數初值=65536-1667=63869=F97Dh
;400Hz的半周期=(1/400)/2=1.25ms, 計數初值=65536-1250=64286=FB1Eh
;500Hz的半周期=(1/500)/2=1ms, 計數初值=65536-1000=64536=FC18h
;600Hz的半周期=(1/600)/2=0.833ms,計數初值=65536-0833=64703=FCBFh
;;--------------------------------------------
OUT100: MOV R3,#0ECh ;;T1初值高8位
MOV R4,#78h ;;T1初值低8位
AJMP SET_T1 ;;T1初始化
;;--------------------------------------------
OUT200: MOV R3,#0F6h
MOV R4,#3Ch
AJMP SET_T1
;;--------------------------------------------
OUT300: MOV R3,#0F9h
MOV R4,#7Dh
AJMP SET_T1
;;--------------------------------------------
OUT400: MOV R3,#0FBh
MOV R4,#1Eh
AJMP SET_T1
;;--------------------------------------------
OUT500: ;;P1.0輸出500Hz方波
MOV R3,#0FCh
MOV R4,#18h
AJMP SET_T1
;;--------------------------------------------
OUT600: ;;P1.0輸出600Hz方波
MOV R3,#0FCh
MOV R4,#0BFh
AJMP SET_T1
;;--------------------------------------------
SET_T1: ;; T1初始化:
MOV TMOD, #00010000b ;; T1,定時模式,方式1,16位計數器
MOV TH1, R3 ;; 裝入計數初值高字節(jié)
MOV TL1, R4 ;; 裝入計數初值低字節(jié)
SETB TR1 ;; 啟動T1
SETB ET1 ;; 允許T1中斷
SETB EA ;; CPU開中斷
SJMP $ ;; 等待T1中斷
;;--------------------------------------------
T1_INT: ;; 定時器T1中斷處理程序
CPL P1.0 ;; 電平反轉,進入方波另半周期
MOV TH1, R3 ;; 重裝初值高8位
MOV TL1, R4 ;; 重裝初值低8位
RETI
;;--------------------------------------------
DLY1ms: MOV R6,#5 ;視覺暫留延時1ms
MOV R7,#100
DLY1msB: DJNZ R7,$
DJNZ R6,DLY1msB
RET
;; 5x100x2(1μs) =1000μs =1ms
;;--------------------------------------------
DLY2s: ;延時2000ms =2s
MOV R7,#16
DLY2sA: MOV R6,#250
DLY2sB: MOV R5,#250
DJNZ R5,$
DJNZ R6,DLY2sB
DJNZ R7,DLY2sA
RET
;; 16x250*250*2(1μs) =2000 0000μs =2s
;;--------------------------------------------
KEYTABLE: DB 0EEH,0EDH,0EBH,0E7H,0DEH ;0,1,2,3,4, 順序碼
DB 0DDH,0DBH,0D7H,0BEH,0BDH ;5,6,7,8,9,
DB 0BBH,0B7H,07EH,07DH,07BH ;A,B,C,D,E,
DB 077H,00H ;F, 00為結束碼
;;---------------------------------------------
;;共陽極數碼段碼表:
;;字符 0 1 2 3 4 5 6 7
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
;;------------------------------------------
;;字符 8 9 A b C d E F 中橫 上橫 下橫
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FEH,0F7H
;;--------------------------------------------
;;字符 . P U Γ Y 8. "滅" Π L J
DB 7FH,82H,0C1H,0CEH,91H,00H,0FFH,0C8H,0C7H,0F1H
;;--------------------------------------------
END ;主程序結束
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1