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

標題: 求大神幫忙看一下程序 音樂噴泉控制 能達到目的嗎 [打印本頁]

作者: 假裝舍不得我吧    時間: 2018-6-27 13:18
標題: 求大神幫忙看一下程序 音樂噴泉控制 能達到目的嗎
               ORG    0000H                    ;主程序起始地址
               LJMP   KONGZHI               ;跳至控制程序
               ORG    000BH                    ;TIMER0中斷起始地址
               LJMP   TIM0                  ;跳至TIMER0中斷子程

KONGZHI:       MOV    P1,#0FFH              ;P1口初始化(低四位為輸入、高四位輸出口)
               JNB    P1.0,MUSIC1           ;P1.0口為0放第一曲
               JNB    P1.1,MUSIC2           ;P1.1口為0放第二曲
               JNB    P1.2,MUSIC3           ;P1.2口為0放第三曲
               JNB    P1.3,XUNHUAN          ;P1.3口為0執行循環
               MOV    5CH,#00H              ;P1.3口為1順序執行一次結束
               AJMP   START                 ;放第一首歌曲
MUSIC1:        MOV    5CH,#00H              ;取第一首歌的簡譜指針
               MOV    20H,P1                ;將P1.0口的值暫存于20H單元
               SETB   P1.0                  ;恢復P1.0的初值
               AJMP   START                 ;執行循環
MUSIC2:        MOV    5CH,#01H              ;取第二首歌的簡譜指針
               MOV    20H,P1                ;將P1.1口的值暫存于20H單元
               SETB   P1.1                  ;恢復P1.1的初值
               AJMP   START                 ;執行循環
MUSIC3:        MOV    5CH,#02H              ;取第三首歌的簡譜指針
               MOV    20H,P1                ;將P1.2口的值暫存于20H單元
               SETB   P1.2                  ;恢復P1.2的初值
               AJMP   START                 ;執行循環
XUNHUAN:       MOV    5CH,#00H
               MOV    21H,P1                ;將P1.3口的值暫存于21H單元
               SETB   P1.3                  ;恢復P1.3的初值
               AJMP   START                 ;跳至主程序

START:         MOV    TMOD,#01H                    ;設TIMER0在MODE1
               MOV    IE,#82H               ;中斷使能
START0:        MOV    30H,#00H              ;取簡譜碼指針
NEXT:                MOV    A,30H                 ;簡譜碼指針載入A
                      MOV    DPTR,#TABLE           ;至TABLE取簡譜碼
               MOVC   A,@A+DPTR      
               MOV    R2,A                  ;取到的簡譜碼暫存于R2
               JZ     END0                  ;是否取到00(結束碼)?
               ANL    A,#0FH                ;不是,則取低4位(節拍碼)
               MOV    90H,A                 ;為調速保存數據
               MOV    R5,A                  ;將節拍碼存入R5
               MOV    A,R2                  ;將取到的簡譜碼再載入A
               SWAP   A                     ;高低4位交換
               ANL    A,#0FH                ;取低4位(音符碼)
               MOV    90H,A                 ;保存音符碼,為調速做準備
               JNZ    SING                  ;取到的音符碼是否為0?
               CLR    TR0                   ;是,則不發音
               JMP    D1                    ;跳至D1
SING:                DEC    A                     ;取到的音符碼減1(不含0)
               MOV    22H,A                    ;存入(22H)
               RL     A                     ;乘2
               MOV    DPTR,#TABLE1          ;至TABLE1取相對的高位字節計數值
               MOVC   A,@A+DPTR      
               MOV    TH0,A                 ;取到的高位字節存入TH0
               MOV    21H,A                 ;取到的高位字節存入(21H)
               MOV    A,22H                    ;再載入取到的音符碼
               RL     A                     ;乘2
               INC    A                     ;加1
               MOVC   A,@A+DPTR             ;至TABLE1取相對的低位字節計數值
               MOV    TL0,A                 ;取到的低位字節存入TL0
               MOV    20H,A                 ;取到的低位字節存入(20H)
               SETB   TR0                   ;啟動TIMER0
D1:                LCALL  TIAOSU                ;調用以1/4拍為基本單位時間的調速子程序
               INC    30H                   ;取簡譜碼指針加1
               JMP    NEXT                  ;取下一個碼
END0:                CLR    TR0                   ;停止TIMER0
                     JMP    START0                ;重復循環
                     
TIM0:          PUSH   ACC                   ;將A的值暫存于堆棧
                    PUSH   PSW                   ;將PSW的值暫存于堆棧
               MOV    TL0,20H               ;重設計數值
                   MOV    TH0,21H
               CPL    P1.0                  ;將P1.0位反相
               POP    PSW                   ;至堆棧取回PSW的值
               POP    ACC                   ;至堆棧取回A的值
               RETI                         ;返回主程序
TABLE1:
               DW         63625,63833,64019,64104,64260,64400,64524 ;低音區:1 2 3 4 5 6 7
               DW          64580,64685,64778,64820,64898,64968,65030 ;中音區:1 2 3 4 5 6 7
               DW         65058,65110,65157,65178,65217,65252,65283 ;高音區:1 2 3 4 5 6 7
               DW         65297                                     ;超高音:1



作者: lxa0    時間: 2018-6-27 22:53
控制音樂噴泉還要有配套的硬件
光是代碼不行啊




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品视频免费观看 | av大片在线观看 | 日本三级网址 | 亚洲国产成人久久综合一区,久久久国产99 | 日本a视频| 欧美高清视频一区 | 国产成人精品999在线观看 | 日韩精品成人 | 久久成人综合 | 成人国产精品一级毛片视频毛片 | 久久久久国产精品一区二区 | av网站免费在线观看 | 国产欧美一级 | 亚州av在线| 91不卡| 久久精品国产久精国产 | a级片在线观看 | 91精品国产综合久久精品图片 | 99视频 | 久草视频在线看 | 欧美色综合一区二区三区 | 国产中文字幕亚洲 | 成人午夜网 | 日韩精品免费播放 | 一级毛片黄片 | 精品视频国产 | 国产99视频精品免费视频7 | 久久国产一区二区三区 | 国产在线不卡 | 91精品国产乱码久久蜜臀 | 欧美中文字幕在线观看 | 免费午夜剧场 | av在线天堂网 | 久久久国产一区二区三区四区小说 | av在线免费观看网址 | 久久精品小视频 | 九色在线观看 | 久久国产一区二区三区 | 亚洲精品乱码久久久久久久久 | www.国产日本 | 日韩在线欧美 |