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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于AT89c51單片機的音樂盒制作 proteus仿真加源碼

  [復制鏈接]
跳轉到指定樓層
樓主
1. 有時會出現程序一點錯誤也沒有,但就是不能正常運行的現象,最后我們發行是因為程序中有的指令書寫得不規范導致的,例如有的 RET 返回指令一定要按正確格式書寫或在兩 行指令間最好不要留空行。

2. 程序中的跳轉指令的運用很重要,為保險起見,都用 LJMP,我們就遇到過跳轉指令用錯 程序無法正常運行的現象。當用 JNZ 指令時,跳轉范圍比較少,這時要用一個標號中轉。

3. 編程時要注意,在程序開始時,要寫入各定時器中斷的入口地址。

4. 編程過程中要注意加注釋或分割線,否則,在程序過長時容易變得很亂,不便于查找或更改。

5. 程序的結構要設計的合理,避免上下亂調用的現象,這樣會使程序更加清晰化。

6. 編程前要加流程圖, 這樣會使思路清晰, 例如數字音樂盒的設計思路完全可以按著 MP3 的工作方式列寫流程圖。

7 LCD 計時正常顯示的解決辦法:

a. 兩個定時器同時工作,存在中斷時序問題,剛開始時我們把定時器 1 設定在方式 3,計 250us,由于定時中斷過于頻繁,使 CPU 負載過大,導致音樂不能正常播放,時間不能正常 顯示。解決辦法:將定時器 1 設定在工作方式 1,16 位計數,計 50ms,效果有很大改觀。但還有問題。

b. 當音樂為全 4 拍起始時,此時音樂節奏與定時器 T1 中斷頻率錯開,LCD 顯示和音樂播 放都會好一些。

c. 另外,在歌曲中,當遇到一個音符發音為 4 拍,在編曲中為*CH,托因時間較長,當定 時器 T1 此時來中斷時,就會對歌曲播放產生影響,若改為發音一拍,中斷對歌曲播放影響 減弱,但音樂效果變差。

d. 改進方案:若采用可以定時時間更長的單片機,可以避免所有問題。



單片機源程序(匯編語言):
  1. RS   BIT   P2.0        ;引腳定義,定義液晶顯示端口標號
  2. RW   BIT   P2.1
  3. E    BIT   P2.2
  4. L50MS   EQU   60H        ;工作內存定義
  5. L1MS    EQU   61H
  6. L250MS  EQU   62H
  7. SEC     EQU   65H
  8. MIN     EQU   64H
  9. HOU     EQU   63H
  10.         ORG         0000H
  11.         LJMP         MAIN
  12.         ORG         000BH  ;定時器T0溢出中斷入口地址
  13.         LJMP         TT0
  14.         ORG         001BH  ; 定時器T1溢出中斷入口地址
  15. LJMP         T1INT
  16.         ORG         1000H
  17. MAIN:                   ;液晶初始化
  18.            MOV           SP,#70H   
  19.        MOV           P0,#01H  ;清屏
  20.        CALL          DISPLAY
  21.        MOV           P0,#38H  ;8位,2行顯示
  22.        LCALL          DISPLAY
  23.        MOV           P0,#0FH  ;屏顯on,光標on,閃爍on
  24.        LCALL          DISPLAY
  25.        MOV           P0,#06H  ;計數地址加1,顯示幕on
  26.        LCALL          DISPLAY
  27. LCALL         INITIL     ;內存初始化
  28. WAIT:  LCALL         KEY   ;鍵盤掃描,是否有鍵按下,否則等待
  29. LCALL         MODD         
  30.               LJMP         WAIT
  31. KEY:          NOP
  32.               NOP
  33.               LCALL         KS
  34.               JNZ         K1              ;有按鍵轉到K1
  35.               LCALL         KAIJI
  36.               LCALL         SOP
  37. XN:           LJMP         KEY
  38. K1:           LCALL         MODD
  39.               LCALL         MODD
  40.               LCALL         KS
  41.               JNZ         K2
  42.               LJMP         KEY
  43. K2:           MOV         R2,#0FEH   ;讀鍵盤
  44.               MOV         R4,#00H
  45. K3:           MOV         A,R2
  46.               MOV         P1,A
  47.               MOV         A,P1
  48. JB             ACC.4,L1     ;為1跳轉,第一行無按鍵
  49.               MOV         A,#00H
  50.               LJMP         LK
  51. L1:           JB         ACC.5,L2
  52.               MOV         A,#04H
  53.               LJMP         LK
  54. L2:           JB         ACC.6,L3
  55.               MOV         A,#08H
  56.               LJMP         LK
  57. L3:           JB         ACC.7,NEXT1
  58.               MOV         A,#0CH
  59. LK:           ADD         A,R4
  60.               PUSH         ACC
  61. K4:           LCALL         DELAY1   ;若同時有其他按鍵,則等待
  62.               LCALL         KS
  63.               JNZ         K4
  64.               MOV         R3,#07H     
  65.               CLR         A
  66.               MOV         R0,#30H
  67.               MOV         R1,#31H
  68. MM1:          MOV         A,@R1
  69.               MOV         @R0,A
  70.               INC         R0
  71.               INC         R1
  72.               DJNZ         R3,MM1
  73.               POP         ACC
  74.               MOV         @R0,A
  75.               RET
  76. NEXT1:         INC         R4           ;列掃描
  77.                MOV         A,R2
  78.                JNB         ACC.3,N2
  79.                LJMP         N1
  80. N2:            LJMP         KEY
  81. N1:            RL         A
  82.                MOV         R2,A
  83.                LJMP         K3
  84. KS:           MOV         A,#0F0H     ;判斷P1口
  85.               MOV         P1,A
  86.               NOP
  87.               NOP
  88.               MOV         A,P1
  89.               CPL         A
  90.               ANL         A,#0F0H
  91.               RET
  92. DELAY1:SETB         RS0
  93. DL:     MOV         R5,#0AH
  94. DL2:    MOV         R6,#63
  95. DL3:    NOP
  96.         NOP
  97.         DJNZ         R6,DL3
  98.         DJNZ         R5,DL2
  99.         CLR         RS0     
  100.         RET
  101. INITIL:                    ;30H-37H初值為零
  102.         MOV         R3,#08H
  103.               MOV         R0,#30H
  104. M1:           MOV         @R0,#00H
  105.               INC         R0
  106.               DJNZ         R3,M1         
  107.               RET
  108. MODD:                     ;顯示
  109.         MOV           P0,#8EH
  110.         CALL          DISPLAY         
  111.         MOV         A,37H
  112.         MOV         DPTR,#TABLE3         
  113.         MOVC         A,@A+DPTR
  114.         CALL         WRITE2      
  115.         RET
  116. KAIJI:          MOV         A,37H      ;開機提示字
  117.         CJNE         A,#0FH,DFF
  118.         MOV           P0,#80H    ;設光標地址
  119.         CALL          DISPLAY
  120.         MOV           DPTR,#TABLE1;寫數據
  121.         CALL          WRITE1         
  122. DFF:            RET
  123. ;按鍵值播放歌曲
  124. SOP:           MOV         A,37H
  125.                CJNE         A,#01H,A11
  126.                LCALL         MODD
  127.                MOV         52H,#HIGH TABLE10
  128.                MOV         53H,#LOW TABLE10
  129.                LCALL         INITILE2
  130.                LCALL         MAIN0
  131. A11:           CJNE         A,#02H,A22
  132.                LCALL         MODD
  133.                MOV         52H,#HIGH TABLE20
  134.                MOV         53H,#LOW TABLE20
  135.                LCALL         INITILE2      
  136.                lcall         MAIN0
  137. A22:           CJNE         A,#03H,A33
  138.                LCALL         MODD
  139.                MOV         52H,#HIGH TABLE30
  140.                MOV         53H,#LOW TABLE30
  141.                LCALL         INITILE2      
  142.                lcall         MAIN0      
  143. A33:           CJNE         A,#04H,A44
  144.                LCALL         MODD
  145.                MOV         52H,#HIGH TABLE40
  146.                MOV         53H,#LOW TABLE40
  147.                LCALL         INITILE2      
  148.                lcall         MAIN0
  149. A44:           CJNE         A,#05H,A55
  150.                LCALL         MODD
  151.                MOV         52H,#HIGH TABLE50
  152.                MOV         53H,#LOW TABLE50
  153.                LCALL         INITILE2      
  154.                lcall         MAIN0
  155. A55:           CJNE         A,#06H,A66
  156.                LCALL         MODD
  157.                MOV         52H,#HIGH TABLE60
  158.                MOV         53H,#LOW TABLE60
  159.                LCALL         INITILE2      
  160.                lcall         MAIN0   
  161. A66:           CJNE         A,#07H,A77
  162.                LCALL         MODD
  163.                MOV         52H,#HIGH TABLE70
  164.                MOV         53H,#LOW TABLE70
  165.                LCALL         INITILE2      
  166.                lcall         MAIN0      
  167. A77:           CJNE         A,#08H,A88
  168.                LCALL         MODD
  169.                MOV         52H,#HIGH TABLE80
  170.                MOV         53H,#LOW TABLE80
  171.                LCALL         INITILE2      
  172.                lcall         MAIN0
  173. A88:           CJNE         A,#09H,A99
  174.                LCALL         MODD
  175.                MOV         52H,#HIGH TABLE90
  176.                MOV         53H,#LOW TABLE90
  177.                LCALL         INITILE2      
  178.                lcall         MAIN0      
  179. A99:           CJNE         A,#0AH,AAA
  180.                LCALL         MODD
  181.                MOV         52H,#HIGH TABLE100
  182.                MOV         53H,#LOW TABLE100
  183.                LCALL         INITILE2      
  184.                lcall         MAIN0      
  185. AAA:           RET           
  186. INITILE2:
  187.            MOV         L50MS,#20
  188.            MOV         L1MS,#00H
  189.            MOV         L250MS,#00H
  190.            MOV         SEC,#00H
  191.            MOV         MIN,#00H
  192.            MOV         HOU,#00H
  193. MOV         A,HOU
  194.           MOV         B,#10
  195.           DIV         AB
  196.           ADD         A,#30H         ;將BCD嗎轉化為ASIIC碼
  197. MOV           P0,#0C8H    ;顯示小時十位
  198.           CALL          DISPLAY
  199.           CALL          WRITE2
  200.           MOV         A,B
  201.           ADD         A,#30H
  202.           MOV           P0,#0C9H    ;顯示小時個位
  203.           CALL          DISPLAY
  204.           CALL         WRITE2
  205.           MOV         A,#3AH
  206.           MOV           P0,#0DH    ;顯示冒號
  207.           CALL          DISPLAY
  208.           CALL         WRITE2
  209.           MOV         A,MIN
  210.           MOV         B,#10
  211.           DIV         AB
  212.           ADD         A,#30H
  213.           MOV           P0,#0CBH    ;顯示分十位
  214.           CALL          DISPLAY
  215.           CALL         WRITE2
  216.           MOV         A,B
  217.           ADD         A,#30H
  218.           MOV           P0,#0CCH    ;顯示分個位
  219.           CALL          DISPLAY
  220.           CALL         WRITE2
  221.           MOV         A,#3AH
  222.           MOV           P0,#0CDH    ;顯示冒號
  223.           CALL          DISPLAY
  224.           CALL         WRITE2
  225.           MOV         A,SEC
  226.           MOV         B,#10
  227.           DIV         AB
  228.           ADD         A,#30H
  229.     MOV           P0,#0CEH    ;顯示秒十位
  230.           CALL          DISPLAY
  231.           CALL         WRITE2
  232.           MOV         A,B
  233.           ADD         A,#30H
  234.           MOV           P0,#0CFH    ;顯示秒個位
  235.           CALL          DISPLAY
  236.           CALL         WRITE2
  237.           MOV           P0,#0C0H    ;設光標地址
  238.           CALL          DISPLAY
  239.           MOV           DPTR,#TABLE2;寫數據
  240.           CALL          WRITE1         
  241.           RET
  242. DISPLAY:         CLR           RS  ;寫指令
  243.                 CLR           RW
  244.                 CLR           E
  245.                 LCALL          DELAY
  246.                 SETB          E
  247.                 RET
  248. WRITE1:         MOV           R1,#00H     ;寫數據
  249. A1:             MOV           A,R1
  250.                 MOVC          A,@A+DPTR
  251.                 CALL          WRITE2
  252.                 INC           R1
  253.                 CJNE          A,#0FEH,A1   ;未到字符串末尾繼續
  254.                 RET
  255. WRITE2:         MOV           P0,A
  256.                 SETB          RS
  257.                 CLR           RW
  258.                 CLR           E
  259.                 CALL          DELAY
  260.                 SETB          E
  261.                 RET
  262. DELAY:          MOV           R4,#05
  263. D1:             MOV           R5,#0FFH
  264.                 DJNZ          R5,$
  265.                 DJNZ          R4,D1
  266.                 RET         
  267. TAB:    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
  268.         DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
  269. TAB1:   DB 89H,86H,0C7H,0C7H,0C0H
  270. TAB2:   DB 0C6H,88H,0C0H
  271. TABLE1: DB    'WELCOM HERE',0FEH
  272. TABLE2: DB    'DFF WB ',0FEH
  273. TABLE4: DB    'CAU',0FEH
  274. TABLE3: DB    30H,31H,32H,33h   
  275.         DB    34H,35H,36H,37H
  276.         DB    38h,39H,41H,42H
  277.         DB    43H,44H,45H,46H                               
  278. MAIN0:        MOV         TMOD,#11H     ;播放歌曲程序      
  279.             MOV         IE,#8aH
  280.         MOV TH1,  #3cH
  281.         MOV TL1,  #0b0H          
  282.               LCALL         KS
  283.             JNZ         TTM12           
  284.             MOV         40H,#00H
  285. NEXT20: MOV         A,40H
  286.             MOV         DPH,52H
  287.             MOV         DPL,53H
  288.             MOVC        A,@A+DPTR
  289.             MOV         R2,A
  290.             JZ         STOP
  291.             ANL         A,#0FH
  292.             MOV         R1,A
  293.             MOV         A,R2
  294.             SWAP         A
  295.             ANL         A,#0FH
  296.             JNZ         SING
  297.             CLR         TR0
  298.             JMP         W1
  299. SING:   DEC         A
  300.             MOV         22H,A
  301.             RL         A
  302.             MOV         DPTR,#TABLE00
  303.             MOVC         A,@A+DPTR
  304.             MOV         TH0,A
  305.             MOV         21H,A
  306.             MOV         A,22H
  307.             RL         A
  308.             INC         A
  309.             MOVC         A,@A+DPTR
  310.             MOV         TL0,A
  311.             MOV         20H,A
  312.             SETB         TR0
  313.             SETB          TR1
  314. W1:     LCALL         DELAY30
  315.             INC         40H
  316.             LCALL         KS                ;有鍵跳出
  317.             JNZ         STOP
  318.             LJMP         NEXT20
  319. STOP:  CLR         TR0
  320.             CLR         TR1
  321.         LJMP          MAIN0
  322. TTM12: LCALL         K2
  323.             MOV         A,37H
  324.             CJNE         A,#0EH,TTM13
  325.             CLR         TR1
  326.                LCALL         DELAY1
  327. TTM120:        LCALL         KS
  328.             LCALL         DELAY1
  329.             JZ         TTM120
  330.         LCALL         K2
  331.             MOV         A,37H
  332.             CJNE         A,#0EH,TTM120
  333.             SETB         TR1
  334.         LJMP         NEXT20
  335. TTM13: CJNE        A,#0CH,TTM14
  336.             MOV         A,52H
  337.             INC         A
  338.             MOV         52H,A
  339.             MOV         A,53H
  340.             INC         A
  341.             MOV         53H,A
  342.             MOV         A,36H
  343.             INC         A
  344.             MOV         37H,A
  345.             LJMP         TTM2
  346. TTM14:        CJNE        A,#0DH,TTM2
  347.             MOV         A,52H
  348.             DEC         A
  349.             MOV         52H,A
  350.             MOV         A,53H
  351.             DEC         A
  352.             MOV         53H,A
  353.             MOV         A,36H
  354.             DEC         A
  355.             MOV         37H,A
  356. TTM2:        RET
  357. TT0:           PUSH         ACC ;定時器中斷子程序0
  358.             PUSH         PSW
  359.             MOV         TL0,20H
  360.             MOV         TH0,21H
  361.             CPL         P3.7
  362.             POP         PSW
  363.             POP         ACC
  364.             RETI
  365. ;定時器中斷子程序1
  366. T1INT:  MOV         TH1,  #3CH  ;定時器中斷子程序1
  367.         MOV         TL1,  #0B0H
  368.         DJNZ         L50MS,X4
  369.               MOV         L50MS,#20
  370. SECSET:           ;每秒種時鐘刷新秒顯示一次
  371. MOV         A,SEC
  372.         MOV         B,#10
  373.              DIV         AB
  374.               ADD         A,#30H
  375.         MOV           P0,#0CEH    ;顯示秒十位
  376.             CALL          DISPLAY
  377.              CALL         WRITE2
  378. MOV         A,B
  379.              ADD         A,#30H
  380.               MOV           P0,#0CFH    ;顯示秒個位
  381.               CALL          DISPLAY
  382.               CALL         WRITE2
  383.         MOV         A,SEC
  384.              INC         A
  385.             MOV         SEC,A
  386.         XRL         A,#60
  387. X4:          JNZ         OUT
  388. MINSET: MOV         SEC,#00H   ; *每分鐘刷新分顯示一次
  389.              MOV         A,MIN
  390.                INC         A
  391.              MOV         MIN,A
  392.         MOV         B,#10
  393.             DIV         AB
  394.             ADD         A,#30H
  395. MOV           P0,#0CBH    ;顯示分十位
  396.         CALL          DISPLAY
  397.               CALL         WRITE2
  398. MOV         A,B
  399.               ADD         A,#30H
  400.               MOV           P0,#0CCH    ;顯示分個位
  401.               CALL          DISPLAY
  402.               CALL         WRITE2
  403.               MOV         A,MIN
  404.               MOV         B,#3
  405.               MUL         AB
  406.         MOV         B,#100
  407.              DIV         AB
  408.               MOV         R2,A
  409.               MOV         A,#10
  410.               XCH         A,B
  411.               DIV         AB
  412.         MOV         A,MIN
  413.               XRL         A,#60
  414.               JNZ         OUT
  415. HOUSET:
  416.               MOV         MIN,#00H  ;每小時刷新小時顯示一次  
  417.              MOV         A,HOU
  418.               MOV         B,#10
  419.               DIV         AB
  420.              ADD         A,#30H         ;將BCD嗎轉化為ASIIC碼
  421.         MOV           P0,#0C8H    ;顯示小時十位
  422.             CALL          DISPLAY
  423.               CALL          WRITE2
  424. MOV         A,B
  425.               ADD         A,#30H
  426.               MOV           P0,#0C9H    ;顯示小時個位
  427.              CALL          DISPLAY
  428.               CALL         WRITE2
  429.         MOV         A,HOU
  430.              INC         A
  431.             MOV         HOU,A
  432.            XRL         A,#10
  433.             JNZ         OUT
  434.             SJMP         OVERFLOW
  435. OUT:           RETI;溢出處理
  436. OVERFLOW:
  437.                MOV         L50MS,#20
  438.                MOV         L1MS,#00H
  439.                MOV         L250MS,#00H
  440.                MOV         SEC,#00H
  441.                MOV         MIN,#00H
  442.                MOV         HOU,#00H
  443.                RETI
  444. DELAY30:         
  445.         MOV         R7,#2
  446. W2:     MOV         R4,#125
  447. W3:     MOV         R3,#248
  448.         DJNZ         R3,$
  449.         DJNZ         R4,W3
  450.         DJNZ         R7,W2
  451.         DJNZ         R1,DELAY30
  452.         RET
  453. TABLE00:
  454.         DW 64580,64684,64777,64820
  455.         DW 64898,64968,65030,64260
  456.         DW 64400,64524,65058,63835,64021
  457. TABLE10:          ;第一首《精忠報國》


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



資料下載:
音樂盒.zip (62.11 KB, 下載次數: 99)


評分

參與人數 2黑幣 +7 收起 理由
歡666 + 2 很給力!
348652560 + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:206903 發表于 2017-6-4 00:39 | 只看該作者
此帖僅作者可見

使用道具 舉報

板凳
ID:206903 發表于 2017-6-4 00:40 | 只看該作者
此帖僅作者可見

使用道具 舉報

地板
ID:75050 發表于 2017-6-13 12:59 | 只看該作者
此帖僅作者可見

使用道具 舉報

5#
ID:211258 發表于 2017-6-15 17:45 | 只看該作者
此帖僅作者可見

使用道具 舉報

6#
ID:269398 發表于 2017-12-31 09:33 | 只看該作者
此帖僅作者可見

使用道具 舉報

7#
ID:269052 發表于 2018-1-4 17:29 | 只看該作者
此帖僅作者可見

使用道具 舉報

8#
ID:268524 發表于 2018-1-5 09:42 | 只看該作者
此帖僅作者可見

使用道具 舉報

9#
ID:559512 發表于 2019-6-11 08:48 | 只看該作者
此帖僅作者可見

使用道具 舉報

10#
ID:559512 發表于 2019-6-11 08:49 | 只看該作者
此帖僅作者可見

使用道具 舉報

11#
ID:377234 發表于 2019-6-19 14:21 | 只看該作者
此帖僅作者可見

使用道具 舉報

12#
ID:377234 發表于 2019-6-19 14:22 | 只看該作者
此帖僅作者可見

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色呦呦在线| 黄网免费 | 91网站在线观看视频 | 久草免费福利 | 精品www| 激情亚洲 | 日日噜噜噜夜夜爽爽狠狠视频97 | 毛片免费观看 | 亚洲视频区 | 亚洲 中文 欧美 日韩 在线观看 | 色婷综合网 | 精品国产乱码久久久久久图片 | www.啪啪.com| 国产日韩欧美 | 久久99蜜桃综合影院免费观看 | 日本天堂一区 | 日韩欧美手机在线 | 日日射影院 | 日日摸夜夜添夜夜添特色大片 | 最新国产视频 | 欧美精品一区三区 | 国产视频一区二区三区四区五区 | 欧日韩不卡在线视频 | 欧美日本一区 | 91在线精品视频 | 99亚洲| 色综合天天综合网国产成人网 | 久久高清 | 91麻豆蜜桃一区二区三区 | 天天干成人网 | 天天搞天天操 | 成人精品一区 | 欧美一极视频 | 欧洲精品久久久久毛片完整版 | 天天干天天爱天天爽 | 久久久久国产一级毛片高清网站 | 91精品久久久久久久久 | 国产一区二区三区色淫影院 | 日韩欧美亚洲 | 亚洲一页| 午夜电影网址 |