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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3035|回復: 0
打印 上一主題 下一主題
收起左側

簡易單片機電子琴設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:158014 發表于 2016-12-27 13:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、設計題目:
設計一簡易電子琴,要求能夠發出1、2、3、4、5、6、7等七個音符。
使用元件:AT89C51、LM324,喇叭,按鍵等

二、設計目的
1)能夠對電子電路、電子元器件、印制電路板等方面的知識有進一步的認識,獨立對其進行測試與檢查。
2)熟悉8051單片機的內部結構和功能,合理使用其內部寄存器,能夠完成相關軟件編程設計工作。
3)為實現預期功能,能夠對系統進行快速的調試,并能夠對出現的功能故障進行分析,及時修改相關軟硬件。
4)對軟件編程、排錯調試、焊接技術、相關儀器設備的使用技能等方面得到較全面的鍛煉和提高。

三、系統硬件圖

流程圖:


原理:
(一)   音樂產生原理及硬件設計
由于一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可。
本次設計中單片機晶振為12MHZ,那么定時器的計數周期為1MHZ,假如選擇工作方式1,那T值便為T= 216--5﹡105/相應的頻率 ,那么根據不同的頻率計算出應該賦給定時器的計數值,列出不同音符與單片機計數T0相關的計數值如下表所示:
音符
頻率(HZ)
簡譜碼(T值)
中 1 DO
523
64580
中 2 RE
587
64684
中 3 M
659
64777
中 4 FA
698
64820
中 5 SO
784
64898
中 6 LA
880
64968
中 7 SI
988
65030
采用查表程序進行查表時,可以為這個音符建立一個表格,有助于單片機通過查表的方式來獲得相應的數據:
TABLE DW 64580,64684,64777,64820,64898,64968,65030



  源程序:
方案一:產生按鍵音符
  ORG 0000H
        LJMP MAIN
        ORG 000BH
        LJMP BREAK
MAIN:  MOV TMOD,#01H       ;設置定時器0的工作方式
        SETB EA
       SETB ET0               ; 設置定時器0中斷
       SETB TR0               ; 啟動定時器0
WAIT1: LCALL KEY             ; 調用KEY子程序,判斷有鍵按下否?第幾個鍵?
       CLR EA                 ;屏蔽中斷
       CJNE R3,#00H,WAIT1     ;如果R3=0,表示有鍵按下
       MOV A,22H              ;將22H里存放的按鍵號送給A
       RL A                   ; 因為查表里都是字,所以得乘2查得數據
       MOV DPTR,#TABLE      ;指向表頭
       MOVC A,@A+DPTR      ; 查表
       MOV TH0,A             ;將數據高位送TH0
       MOV 21H,A             ; 將高位備份
       MOV A,22H             ;將22H里存放的按鍵號送給A
       RL A                   ;因為查表里都是字,所以得乘2查得數據
       INC A                  ;取低位數據
       MOVC A,@A+DPTR
       MOV TL0,A
       MOV 20H,A
WAIT2: LCALL KEY
       SETB EA
       CJNE R3,#00H,WAIT1
       JMP WAIT2
KEY:   MOV R3,#00H          ; KEY子程序,判斷有鍵按下否?第幾個鍵?
       MOV R1,#0FFH
       MOV R0,#00H
       MOV A,R1
       MOV P2,A
       MOV A,P2
       CLR C
       CPL C               ;利用標志位CY來判斷是哪個鍵按下
       MOV R2,#08H
WAIT3: RLC A               ;移位判斷
       JNC STORE
       INC R0      
       DJNZ R2,WAIT3
STORE: MOV 22H,R0        ; 將按鍵號存22H,R3=0有鍵按下
       MOV R3,#00H
       RET
BREAK: PUSH ACC          ;  中斷產生方波,從P1.0口輸出
       PUSH PSW
       MOV TL0,20H
       MOV TH0,21H
       CPL P1.0
       POP PSW
       POP ACC
       RETI
TABLE: DW 65030,64968,64898,64820,64777,64684,64580 ; 7,6,5,4,3,2,1
       END
方案二:產生按鍵音符
       ORG 0000H
       SJMP START
       ORG 000BH
       AJMP INT_0
       ORG 0030H
START: MOV P1,#00H
       SETB EA
       SETB ET0                       ;計數器0
       MOV TMOD,#02H
       MOV TH1,#09CH
       MOV TL1,#09CH                 ;定時器初植
       CLR TR0                        ;定時器不允許
SCAN:                                 ;鍵盤掃描
       MOV A,P2                   ;判斷鍵盤按下,跳到SCAN_1,若未按,繼續掃描
       CJNE A,#0FFH,SCAN_1
       NOP
       SJMP SCAN
SCAN_1:ACALL DELAY ;是不是真的要按下?如果是,則跳轉SU_KEY查詢是哪個按下?
       MOV A,P2
       CJNE A,#0FFH,SU_KEY
       NOP
       SJMP SCAN
SU_KEY:JNB P2.1,MU_1                  ;判斷是哪個鍵按下?
       JNB P2.2,MU_2
       JNB P2.3,MU_3
       JNB P2.4,MU_4
       JNB P2.5,MU_5
       JNB P2.6,MU_6
       JNB P2.7,MU_7
       SJMP SCAN
                                       ;R1信號周期
MU_1:  MOV R1,#19                ;如果第一個按鍵按下,則R1=19,同時程序轉NEXT
       SJMP NEXT
MU_2:  MOV R1,#17            
       SJMP NEXT
MU_3:  MOV R1,#15
       SJMP NEXT
MU_4:  MOV R1,#14
       SJMP NEXT
MU_5:  MOV R1,#13
       SJMP NEXT
MU_6:  MOV R1,#11
       SJMP NEXT
MU_7:  MOV R1,#10
       SJMP NEXT
NEXT:  MOV A,R1               
       MOV R0,A
       SETB TR0                       ;啟動定時器0                        
NEXT_1:MOV A,P2                     ; 沒鍵按下繼續執行,有鍵按下,返回讀引腳
       CJNE A,#0FFH,NEXT_1
       ACALL DELAY
       MOV A,P2                       ;真的沒鍵按下?
       CJNE A,#0FFH,NEXT_1
       CLR TR0                        ;不響
       AJMP SCAN                     ;掃描鍵盤去
INT_0:                                 ;中斷程序
      DJNZ R0,RE                      ;R0不等于0時,返回
      CPL P1.0
      MOV A,R1
      MOV R0,A
RE:   RETI
DELAY:MOV R7,#100                    ;延長時間等待,鍵盤消抖
D1:   MOV R6,#10
D2:   DJNZ R6,D2
      DJNZ R7,D1
      RET
      END

生日快樂歌:(擴展功能部分程序)

      ORG 0000H
      JMP MAIN
      ORG 000BH
      JMP TT0
MAIN: MOV TMOD,#01H               ;設置定時器0工作方式
      MOV IE,#82H                    ;設置中斷
MAIN0:MOV 30H,#00H
NEXT: MOV A,30H
      MOV DPTR,#TABLE              ;查表
      MOVC A,@A+DPTR
      MOV R2,A
      JZ STOP
      ANL A,0FH
      MOV R5,A
      MOV A,R2
      SWAP A
      ANL A,#0FH
      JNZ SING
      CLR TR0
      JMP W1
SING: DEC A
      MOV 22H,A
      RL A
      MOV DPTR,#TABLE1                   ;查表
      MOVC A,@A+DPTR
      MOV TH0,A
      MOV 21H,A
      MOV A,22H
      RL A
      INC A
      MOVC A,@A+DPTR
      MOV TL0,A
      MOV 20H,A
      SETB TR0
W1:   CALL DELAY
      INC 30H
      JMP NEXT
STOP: CLR TR0           
      JMP MAIN0
TT0:  PUSH ACC                            ;中斷服務程序
      PUSH PSW
      MOV TL0,20H
      MOV TH0,21H
      CPL P1.0
      POP PSW
      POP ACC
      RETI
DELAY:MOV R7,#2                      ;延時187ms
W2:  MOV R4,#187
W3:  MOV R3,#248
      DJNZ R3,$
      DJNZ R4,W3
      DJNZ R7,W2
      DJNZ R5,DELAY
      RET
TABLE1:DW 64260,64400,64524,64580        ;音符計數植
       DW 64684,64777,64820,64898
       DW 64968,65030,65058,65110
DW 65157,65178,65217

TABLE:DB 82H,01H,81H,94H,84H           ;節拍表
       DB 0B4H,0A4H,04H
       DB 82H,01H,81H,94H,84H
DB 0C4H,0B4H,04H


       DB 82H,01H,81H,0F4H,0D4H
       DB 0B4H,0A4H,94H
       DB 0E2H,01H,0E1H,0D4H,0B4H
DB 0C4H,0B4H,04H


       DB 82H,01H,81H,94H,84H
       DB 0B4H,0A4H,04H
       DB 82H,01H,81H,94H,84H
    DB 0C4H,0B4H,04H
       DB 82H,01H,81H,0F4H,0D4H
       DB 0B4H,0A4H,94H
       DB 0E2H,01H,0E1H,0D4H,0B4H
       DB 0C4H,0B4H,04H
       DB 00H
END
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品国产精品国自产在线 | 亚洲午夜视频 | av三级在线观看 | 色婷婷精品国产一区二区三区 | 国产色 | 91日韩在线 | 99热99| h视频在线免费 | 深夜爽视频 | 欧美激情精品久久久久久变态 | 美女福利网站 | 一级做a爰片久久毛片免费看 | 久久综合九色综合欧美狠狠 | 久色 | 午夜视频免费在线观看 | 伊人激情综合网 | 日韩最新网站 | 亚洲成色777777在线观看影院 | 久久99国产精品久久99果冻传媒 | 免费高清成人 | 粉色午夜视频 | 国产精品欧美一区二区三区不卡 | 精品久久久久久中文字幕 | 亚洲一区电影 | 日韩视频一区二区在线 | 99久久精品免费看国产免费软件 | 亚洲日本激情 | 伊人久久综合 | 色婷婷精品国产一区二区三区 | 在线免费观看黄色 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 国产一区 | 亚洲国产成人精品久久久国产成人一区 | 成人影音| 日本不卡一区 | 国产一区二区三区精品久久久 | 久久久影院 | www.中文字幕.com | 日韩电影中文字幕 | 在线观看一区 | 国产精品不卡一区 |