久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3005|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

用51單片機(jī)制作多種頻率方波音頻信號(hào)發(fā)生器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:858964 發(fā)表于 2020-12-17 15:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


硬件:AT89s52開發(fā)板(含4x4數(shù)字鍵盤)
功能: 用按鍵選擇不同頻率方波,由P1.0輸出方波音頻信號(hào)
作者:Kxuan163
匯編語言源程序如下:
;;--------------------------------------------
           ORG   0000H
                 AJMP   MAIN
;;--------------------------------------------
           ORG   001BH             ;定時(shí)器T1中斷處理入口地址
                 AJMP   T1_INT
;;--------------------------------------------
           ORG   0030H            ;主程序入口地址
MAIN:      MOV   SP,#60H
           MOV   30H,#16   ;開機(jī)/復(fù)位顯示“-”,16是段碼表"-"偏移址
LOOP1:     CALL  KEY_SCAN         ;掃描鍵盤
           CALL  KEYPLAER         ;顯示按鍵數(shù)字
           ;;CLR   P1.0             ;令輸出的初始狀態(tài)為低電平
           MOV   A, 30H           ;按鍵順序號(hào)送至A
           CJNE  A, #16, OnKeyJmp ;若有按鍵,依鍵號(hào)跳轉(zhuǎn)某程序段
           JMP  LOOP1             ;若無按鍵,繼續(xù)掃描鍵盤
OnKeyJmp:  RL    A                ;每條AJMP指令占2字節(jié),按鍵順序號(hào)x2
           MOV   DPTR, #JmpTab    ;散轉(zhuǎn)表首址送DPTR
           JMP   @A +DPTR         ;依按鍵散轉(zhuǎn)
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為結(jié)束碼
;;-------------------------------------------
KEYPLAER:  MOV  R3, 30H
           MOV  A,  30H
           MOV  DPTR,#TABLE    ;取段碼表地址
           MOVC A,@A+DPTR      ;查顯示數(shù)據(jù)對(duì)應(yīng)段碼
           MOV  P0,A           ;段碼放入P0口
           CLR  P2.7           ;最右數(shù)碼管亮
           RET
;;--------------------------------------------
;定時(shí)器T1預(yù)裝計(jì)數(shù)初值的計(jì)算:
;機(jī)器周期 =12/Fosc =12/(11.0592MHz) =1.08506944μs ≈1μs
;100Hz的半周期=(1/100)/2=5ms,    計(jì)數(shù)初值=65536-5000=60536=EC78h
;200Hz的半周期=(1/200)/2=2.5ms,  計(jì)數(shù)初值=65536-2500=63036=F63Ch
;300Hz的半周期=(1/250)/2=1.667ms,計(jì)數(shù)初值=65536-1667=63869=F97Dh
;400Hz的半周期=(1/400)/2=1.25ms, 計(jì)數(shù)初值=65536-1250=64286=FB1Eh
;500Hz的半周期=(1/500)/2=1ms,    計(jì)數(shù)初值=65536-1000=64536=FC18h
;600Hz的半周期=(1/600)/2=0.833ms,計(jì)數(shù)初值=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,定時(shí)模式,方式1,16位計(jì)數(shù)器
            MOV   TH1,  R3          ;; 裝入計(jì)數(shù)初值高字節(jié)
            MOV   TL1,  R4          ;; 裝入計(jì)數(shù)初值低字節(jié)
            SETB  TR1               ;; 啟動(dòng)T1
            SETB  ET1               ;; 允許T1中斷
            SETB  EA                ;; CPU開中斷
            SJMP  $                 ;; 等待T1中斷
;;--------------------------------------------
T1_INT:      ;; 定時(shí)器T1中斷處理程序                 
            CPL   P1.0         ;; 電平反轉(zhuǎn),進(jìn)入方波另半周期
            MOV   TH1, R3      ;; 重裝初值高8位
            MOV   TL1, R4      ;; 重裝初值低8位
            RETI
;;--------------------------------------------
DLY1ms:     MOV  R6,#5            ;視覺暫留延時(shí)1ms
            MOV  R7,#100
DLY1msB:    DJNZ R7,$
            DJNZ R6,DLY1msB
            RET  
;; 5x100x2(1μs) =1000μs =1ms           
;;--------------------------------------------
DLY2s:      ;延時(shí)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為結(jié)束碼
;;---------------------------------------------
;;共陽極數(shù)碼段碼表:
;;字符        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                 ;主程序結(jié)束

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 综合另类 | 欧美福利精品 | 91成人午夜性a一级毛片 | 精品欧美一区二区精品久久久 | 久久se精品一区精品二区 | 亚洲精品久 | 欧美精品一 | 精品一区在线免费观看 | 亚洲精品中文字幕在线观看 | 久久亚洲91 | 亚洲国产精品一区二区久久 | 在线a视频网站 | 欧美成人h版在线观看 | 羞羞视频一区二区 | 国产一级成人 | 中文字幕国产 | 色天天综合 | 欧美日韩一二区 | 澳门永久av免费网站 | 欧美日韩亚洲视频 | 亚洲欧美激情精品一区二区 | 精品国产一区二区三区日日嗨 | 欧美日本韩国一区二区三区 | 欧美1级| 国产成人精品区一区二区不卡 | 精品伊人 | 亚洲精品一 | 国产成人免费视频网站视频社区 | 国产黄色在线观看 | 欧美一区二区三区 | 国产999精品久久久 午夜天堂精品久久久久 | 日韩a | 91在线精品视频 | 午夜影视在线观看 | 日韩欧美在线观看 | 成人午夜视频在线观看 | 亚洲成av人片在线观看无码 | 亚洲天堂成人在线视频 | 国内精品视频在线观看 | 秋霞在线一区 | 天天摸天天干 |