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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

多功能單片機電子琴電路+匯編語言源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:184978 發表于 2021-5-13 12:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一個已驗證的多功能電子琴

單片機源程序如下:
  1. RS EQU P3.5
  2. RW EQU P3.6
  3. E EQU P3.7
  4. ORG 00H
  5. SJMP MAIN
  6. ORG 00BH
  7. MOV TH0,33H
  8. MOV TL0,34H
  9. CPL P3.4
  10. RETI


  11. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  12. ORG     001BH
  13.         INC     3CH             ;中斷服務,中斷計數器加1
  14.         MOV     TH1,#0D8H
  15.         MOV     TL1,#0EFH       ;12M晶振,形成10毫秒中斷
  16.        RETI

  17. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!





  18. ORG 30H
  19. MAIN : SETB P3.4           ;關閉揚聲器
  20. LCALL CSH1602              ;初始化1602
  21. MOV      TMOD,#11H         ;設置定時器0為工作模式1
  22. SETB     EA                ;開總中斷
  23. SETB     ET0               ;開定時器0中斷
  24. HUANYING: MOV P1,#80H      ;歡迎語顯示地址
  25. LCALL ENABLE
  26. MOV DPTR,#TAB_HY
  27. MOV 30H,#00
  28. LP: MOV A,30H
  29. MOVC A,@A+DPTR
  30. JZ KEY
  31. LCALL DELAY_100MS
  32. LCALL WRITE_1602
  33. INC 30H
  34. SJMP LP
  35. KEY:   MOV P1,#01H               ;清屏
  36.        ACALL ENABLE
  37.        MOV P1,#80H
  38.        LCALL ENABLE
  39.        MOV DPTR,#TAB_YANZHOU
  40.        MOV 30H,#00
  41. LP7:   MOV A,30H
  42.        MOVC A,@A+DPTR
  43.        JZ KEY_0
  44.        LCALL WRITE_1602
  45.        INC 30H
  46.        SJMP LP7
  47. KEY_0: MOV P1,#0C0H                ;音符的顯示地址
  48.        LCALL ENABLE
  49.        MOV 38H,#16                 ;寫入1602的顯示地址指針
  50.        MOV 35H,#2                  ;控制節拍
  51. KEY_1: MOV P2,#0FFH                ;置P2為輸入
  52.        JB P2.0,KEY_2               ;K1鍵沒按下,轉移
  53.        LCALL DELAY_10MS            ;延時消抖
  54.        JNB P2.0,$
  55.        MOV 36H,#0                  ;裝入1的音符碼相對地址
  56.        LCALL     BOFANG_YF
  57. KEY_2:   
  58.        JB P2.1,KEY_3               ;K2鍵沒按下,轉移
  59.        LCALL DELAY_10MS            ;延時消抖
  60.        JNB P2.1,$
  61.        MOV 36H,#2
  62.        LCALL     BOFANG_YF
  63. KEY_3:
  64.        JB P2.2,KEY_4            ;K3鍵沒按下,轉移
  65.        LCALL DELAY_10MS            ;延時消抖
  66.        JNB P2.2,$
  67.        MOV 36H,#4
  68.        LCALL     BOFANG_YF
  69. KEY_4:
  70.        JB P2.3,KEY_5            ;K4鍵沒按下,轉移
  71.        LCALL DELAY_10MS            ;延時消抖
  72.        JNB P2.3,$
  73.        MOV 36H,#6
  74.        LCALL     BOFANG_YF
  75. KEY_5:
  76.        JB P2.4,KEY_6            ;K5鍵沒按下,轉移
  77.        LCALL DELAY_10MS            ;延時消抖
  78.        JNB P2.4,$
  79.        MOV 36H,#8
  80.        LCALL     BOFANG_YF
  81. KEY_6:
  82.        JB P2.5,KEY_7            ;K6鍵沒按下,轉移
  83.        LCALL DELAY_10MS            ;延時消抖
  84.        JNB P2.5,$
  85.        MOV 36H,#10
  86.        LCALL     BOFANG_YF
  87. KEY_7:
  88.        JB P2.6,KEY_9            ;K7鍵沒按下,轉移
  89.        LCALL DELAY_10MS         ;延時消抖
  90.        JNB P2.6,$
  91.        MOV 36H,#12
  92.        LCALL     BOFANG_YF
  93. KEY_9:
  94.        JB P3.2,KEY_1             ;K9鍵沒按下,重新掃描
  95.        LCALL DELAY_10MS          ;延時消抖
  96.        JNB P3.2,$
  97.        LCALL DELAY_10MS

  98. ;-----------播放音樂程序段---------------
  99.        MOV P1,#01H              ;清屏
  100.        ACALL ENABLE
  101.        MOV P1,#80H
  102.        LCALL ENABLE
  103.        MOV DPTR,#TAB_PLAY
  104.        MOV 30H,#00
  105. LP8:   MOV A,30H
  106.        MOVC A,@A+DPTR
  107.        JZ PLAY
  108.        LCALL WRITE_1602
  109.        INC 30H
  110.        SJMP LP8
  111. PLAY:  MOV P2,#0FFH              ;置P2為輸入
  112.        JB P2.0,PLAY_2            ;K1鍵沒按下,轉移
  113.        MOV DPTR,#TAB_GEQU1                ;存曲目標志
  114.        LCALL     BOFANG_GEQU
  115. PLAY_2:   
  116.        JB P2.1,PLAY_3            ;K2鍵沒按下,轉移
  117.        SETB ET1
  118. MOV 3BH,TMOD
  119. MOV      TMOD,#11H
  120. mov dptr,#tab2
  121. mov p1,#0c0h
  122. lcall enable
  123. lcall write1
  124. MOV     DPTR,#DAT2
  125.       LCALL MUSIc0
  126.       CLR TR1
  127.       CLR ET1
  128.       MOV TMOD,3BH
  129. PLAY_3:
  130.       JB P2.2,PLAY_4               ;K3鍵沒按下,轉移
  131. SETB ET1
  132. MOV 3BH,TMOD
  133. MOV      TMOD,#11H
  134. mov dptr,#tab1
  135. mov p1,#0c0h
  136. lcall enable
  137. lcall write1
  138. MOV     DPTR,#DAT1
  139.       LCALL MUSIc0
  140.       CLR TR1
  141.       CLR ET1
  142.       MOV TMOD,3BH
  143. PLAY_4:
  144.        JB P2.3,PLAY_9
  145.        MOV R1,#50H
  146.        LCALL BOFANG_LUYIN
  147. PLAY_9: JB P3.2,PLAY               ;K8鍵沒按下,重新掃描
  148.         LCALL DELAY_10MS          ;延時消抖
  149.         JNB P3.2,$
  150.         LCALL DELAY_10MS

  151. ;------------錄音程序段---------------
  152.        MOV P1,#01H              ;清屏
  153.        ACALL ENABLE
  154.        MOV P1,#80H
  155.        LCALL ENABLE
  156.        MOV DPTR,#TAB_RECORD
  157.        MOV 30H,#00
  158. LP9:   MOV A,30H
  159.        MOVC A,@A+DPTR
  160.        JZ RECORD_0
  161.        LCALL WRITE_1602
  162.        INC 30H
  163.        SJMP LP9
  164. RECORD_0: MOV R1,#50H                ;錄取音符存放地址
  165.         MOV 35H,#3                 ;控制節拍
  166.         MOV P1,#0C0H               ;音符的顯示地址
  167.         LCALL ENABLE
  168.         MOV 38H,#16                 ;寫入1602的顯示地址指針
  169. ;---------寫入錄音的名字---------
  170.         MOV 30H,#00
  171. C5:     MOV A,30H
  172.         LCALL TAB_RECORDING
  173.         MOV @R1,A
  174.         INC R1
  175.         INC 30H
  176.         CJNE A,#0FEH,C5
  177. RECORD_1: MOV P2,#0FFH                ;置P2為輸入
  178.        JB P2.0,RECORD_2               ;K1鍵沒按下,轉移
  179.        LCALL DELAY_10MS               ;延時消抖
  180.        JNB P2.0,$
  181.        MOV 36H,#0                  ;裝入1的音符碼相對地址
  182.        LCALL     BOFANG_YF      
  183.        LCALL CUNCU                 ;調存音符子程序
  184. RECORD_2:   
  185.        JB P2.1,RECORD_3               ;K2鍵沒按下,轉移
  186.        LCALL DELAY_10MS            ;延時消抖
  187.        JNB P2.1,$
  188.        MOV 36H,#2
  189.        LCALL     BOFANG_YF
  190.        LCALL CUNCU
  191. RECORD_3:
  192.       JB P2.2,RECORD_4            ;K3鍵沒按下,轉移
  193.        LCALL DELAY_10MS            ;延時消抖
  194.        JNB P2.2,$
  195.        MOV 36H,#4
  196.        LCALL     BOFANG_YF
  197.        LCALL CUNCU
  198. RECORD_4:
  199.        JB P2.3,RECORD_5            ;K4鍵沒按下,轉移
  200.        LCALL DELAY_10MS            ;延時消抖
  201.        JNB P2.3,$
  202.        MOV 36H,#6
  203.        LCALL     BOFANG_YF
  204.        LCALL CUNCU
  205. RECORD_5:
  206.        JB P2.4,RECORD_6            ;K5鍵沒按下,轉移
  207.        LCALL DELAY_10MS            ;延時消抖
  208.        JNB P2.4,$
  209.        MOV 36H,#8
  210.        LCALL     BOFANG_YF
  211.        LCALL CUNCU
  212. RECORD_6:
  213.        JB P2.5,RECORD_7            ;K6鍵沒按下,轉移
  214.        LCALL DELAY_10MS            ;延時消抖
  215.        JNB P2.5,$
  216.        MOV 36H,#10
  217.        LCALL     BOFANG_YF
  218.        LCALL CUNCU
  219. RECORD_7:
  220.        JB P2.6,RECORD_8            ;K7鍵沒按下,轉移
  221.        LCALL DELAY_10MS            ;延時消抖
  222.        JNB P2.6,$
  223.        MOV 36H,#12
  224.        LCALL     BOFANG_YF
  225.        LCALL CUNCU
  226. RECORD_8:
  227.        JB P2.7,RECORD_9            ;K8鍵沒按下,轉移
  228.        LCALL DELAY_10MS            ;延時消抖
  229.        JNB P2.7,$
  230.        MOV 36H,#42                 ;休止符標志存36H
  231.        LCALL DELAY_100MS
  232.        LCALL CUNCU
  233. RECORD_9:
  234.           JNB P3.2,J0               ;K8鍵沒按下,重新掃描
  235.           LJMP RECORD_1
  236. J0:       LCALL DELAY_10MS          ;延時消抖
  237.           JNB P3.2,$
  238.           LCALL DELAY_10MS
  239.           MOV @R1,#255              ;寫入歌曲結束標志
  240.           LJMP KEY                  ;回演奏模式






  241. ;***********子程序區***************
  242. ;=======初始化1602顯示器========
  243. CSH1602: MOV P3,#0FFH
  244. MOV P1,#01H
  245. ACALL ENABLE
  246. MOV P1,#38H
  247. ACALL ENABLE
  248. MOV P1,#0CH
  249. ACALL ENABLE
  250. MOV P1,#06H
  251. ACALL ENABLE
  252. RET

  253. ;====1602發命令子程序====
  254. ENABLE: CLR RS         
  255. CLR RW
  256. CLR E
  257. ACALL DELAY_2MS
  258. SETB E
  259. RET

  260. ;=====讀1602IR中命令子程序======
  261. ENABLE_1: CLR RS
  262. SETB RW
  263. CLR E
  264. ACALL DELAY_2MS
  265. SETB E
  266. RET

  267. ;====寫數據子程序(1602)====
  268. WRITE_1602: MOV P1,A        
  269. SETB RS
  270. CLR RW
  271. CLR E
  272. MOV R5,#50       ;延時100us(12M晶振)
  273. DJNZ R5,$
  274. SETB E
  275. RET

  276. ;===========播放一個音符并顯示音符和頻譜=========
  277. BOFANG_YF: MOV A,36H
  278.       LCALL TAB_YF
  279.       MOV 33H,A
  280.       MOV A,36H
  281.       INC A
  282.       LCALL TAB_YF
  283.       MOV 34H,A
  284.       MOV TH0,33H
  285.       MOV TL0,34H
  286.       SETB TR0                  ;啟動定時器0
  287.       MOV A,36H                 ;取音符的顯示碼   
  288.       LCALL TAB_YF1      
  289.       LCALL WRITE_1602
  290.       DEC 38H
  291.       MOV A,36H
  292.       INC A
  293.       LCALL TAB_YF1
  294.       LCALL WRITE_1602
  295.       DJNZ 38H,D2               ;1602一行沒寫滿,轉移
  296.       MOV 30H,#16               ;1602滿行清行并從頭開始寫
  297.       MOV P1,#0C0H              
  298.       LCALL ENABLE
  299.       MOV A,#' '
  300. LP10: LCALL WRITE_1602
  301.       DJNZ 30H,LP10
  302.       MOV 38H,#16
  303.       MOV P1,#0C0H              
  304.       LCALL ENABLE
  305. ;----------顯示頻譜分析條程序段----------
  306. D2:   MOV A,36H                 ;音符碼轉換為相應鍵值
  307.       MOV B,#2
  308.       DIV AB
  309.       ADD A,#1
  310.       MOV 39H,A
  311.       MOV 3AH,39H               ;保護音符碼對應的鍵值
  312.       MOV P1,#85H               ;設定頻譜分析條顯示初地址
  313.       LCALL ENABLE
  314.       MOV A,#'>'
  315. D5:   LCALL WRITE_1602
  316.       DJNZ 39H,D5
  317. ;--------控制節拍時長程序段---------
  318.       MOV 37H,35H                   ;保護循環次數控制(節拍)      
  319. LP1:  ACALL DELAY_100MS
  320.       DJNZ 35H,LP1                  ;延時次數控制
  321.       MOV 35H,37H
  322. ;---------發音結束,清除頻譜分析條------------
  323.       MOV P1,#85H               ;頻譜分析條顯示的初地址
  324.       LCALL ENABLE
  325.       MOV A,#' '
  326.       MOV 39H,3AH      
  327. D6:   LCALL WRITE_1602
  328.       DJNZ 39H,D6
  329.       MOV A,#10H                 ;釋放音符碼顯示地址
  330.       CLR C
  331.       SUBB A,38H
  332.       ADD A,#0C0H
  333.       MOV P1,A
  334.       LCALL ENABLE
  335.       CLR TR0                   ;關定時器0
  336.       RET

  337. ;===========播放一個音符并顯示頻譜=========
  338. BOFANG_YF_1: MOV A,36H
  339.       LCALL TAB_YF
  340.       MOV 33H,A
  341.       MOV A,36H
  342.       INC A
  343.       LCALL TAB_YF
  344.       MOV 34H,A
  345.       MOV TH0,33H
  346.       MOV TL0,34H
  347.       SETB TR0                  ;啟動定時器0      
  348. ;----------顯示頻譜分析條程序段----------
  349.       MOV A,36H                 ;音符碼轉換為相應鍵值
  350.       MOV B,#2
  351.       DIV AB
  352.       ADD A,#1
  353.       MOV 39H,A
  354.       MOV 3AH,39H               ;保護音符碼對應的鍵值
  355.       MOV P1,#85H               ;設定頻譜分析條顯示初地址
  356.       LCALL ENABLE
  357.       MOV A,#'>'
  358. D7:   LCALL WRITE_1602
  359.       DJNZ 39H,D7
  360. ;--------控制節拍時長程序段---------
  361.       MOV 37H,35H                   ;保護循環次數控制(節拍)      
  362. LP11: ACALL DELAY_100MS
  363.       DJNZ 35H,LP11                  ;延時次數控制
  364.       MOV 35H,37H
  365. ;---------發音結束,清除頻譜分析條------------
  366.       MOV P1,#85H               ;頻譜分析條顯示的初地址
  367.       LCALL ENABLE
  368.       MOV A,#' '
  369.       MOV 39H,3AH      
  370. D8:   LCALL WRITE_1602
  371.       DJNZ 39H,D8
  372.       CLR TR0                   ;關定時器0
  373.       RET

  374. ;============播放一首歌并顯示歌名=============
  375. ;------(一個音符2字節存儲,音符碼存低字節,節拍存高字節;254為歌曲名結束標志,255為歌曲結束標志)----------
  376. BOFANG_GEQU: MOV P1,#0C0H                    ;歌名顯示地址
  377.              LCALL ENABLE
  378.              MOV 30H,#00
  379. LP2:             MOV A,30H
  380.              MOVC A,@A+DPTR
  381.              INC 30H
  382.              CJNE A,#254,XIANSHI_GEMING
  383.              SJMP C1
  384. XIANSHI_GEMING: MOV P1,A
  385.                 LCALL WRITE_1602
  386.                 SJMP LP2
  387. C1:                MOV P1,#0C0H                 ;歌詞顯示地址
  388.                 LCALL ENABLE
  389. LP3:                MOV A,30H
  390.                 MOVC A,@A+DPTR               ;取音符碼
  391.                 CJNE A,#0FFH,C6
  392.                 SJMP S0


  393. C6:                CJNE A,#42,C0             ;音符碼為休止符不開定時器,直接調用延時
  394.                 INC 30H
  395.                 MOV A,30H
  396.                 MOVC A,@A+DPTR
  397.                 INC 30H
  398.                 MOV 35H,A
  399. LP12:           LCALL DELAY_100MS
  400.                 DJNZ 35H,LP12
  401.                 SJMP LP3



  402. C0:                MOV 36H,A
  403.                 INC 30H
  404.                 MOV A,30H
  405.                 MOVC A,@A+DPTR
  406.                 MOV 35H,A
  407.                 INC 30H
  408.                 LCALL BOFANG_YF_1
  409.                 SJMP LP3
  410. S0:                RET

  411. ;============播放一錄音并顯示歌名和歌詞=============
  412. ;------(一個音符2字節存儲,音符碼存低字節,節拍存高字節;254為歌曲名結束標志,255為歌曲結束標志)----------
  413. BOFANG_LUYIN: MOV P1,#0C0H                    ;歌名顯示地址
  414.              LCALL ENABLE            
  415. LP4:             MOV A,@R1
  416.              INC R1
  417.              CJNE A,#254,XIANSHI_LUYIN
  418.              SJMP C2
  419. XIANSHI_LUYIN: MOV P1,A
  420.                 LCALL WRITE_1602
  421.                 SJMP LP4
  422. C2:                MOV P1,#0C0H                 ;歌詞顯示地址
  423.                 LCALL ENABLE
  424. LP5:                MOV A,@R1               ;取音符碼
  425.                 CJNE A,#255,C3
  426.                 SJMP S2
  427. C3:                CJNE A,#42,C4             ;音符碼為休止符不開定時器,直接調用延時
  428.                 INC R1
  429.                 MOV A,@R1
  430.                 MOV 35H,A
  431.                 INC R1
  432. LP6:            LCALL DELAY_100MS
  433.                 DJNZ 35H,LP6
  434.                 SJMP LP5
  435. C4:             MOV 36H,A
  436.                 INC R1
  437.                 MOV A,@R1
  438.                 MOV 35H,A
  439.                 INC R1
  440.                 LCALL BOFANG_YF_1
  441.                 SJMP LP5
  442. ……………………

  443. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整代碼:
電子琴.rar (67.51 KB, 下載次數: 18)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97国产一区二区 | 日日操天天射 | 国产乱码精品1区2区3区 | 亚洲成人在线网 | 日本精品一区二区 | 成人综合视频在线观看 | 欧美高清一区 | 国产精品久久久久久久久免费高清 | 狠狠狠色丁香婷婷综合久久五月 | 羞羞视频网站免费观看 | 亚洲一区二区中文字幕在线观看 | 欧美日韩在线一区二区 | 亚洲一区二区三区视频 | 精品国产一区二区三区久久影院 | 久久久久久成人 | 日韩高清一区二区 | 91久久| 欧美综合国产精品久久丁香 | 日本黄色免费片 | 日本免费一区二区三区 | 欧美老妇交乱视频 | 欧美激情 亚洲 | 一区二区三区视频免费看 | 一级黄色影片在线观看 | 国产玖玖 | 欧美精品一区二区三区视频 | 伊人久久综合 | 久久久久久久网 | 久久综合一区 | 日韩中文字幕 | 久久久综合久久 | 国产成人久久av免费高清密臂 | 欧美日韩午夜精品 | 黑人精品 | 精品视频99| 欧美成人免费 | 亚洲精品国产成人 | 亚洲高清av| 欧美日韩视频在线播放 | 欧美日韩一区二区在线播放 | 日韩电影免费在线观看中文字幕 |