在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機控制蜂鳴器播放5首歌曲匯編程序

            51單片機控制蜂鳴器播放5首歌曲匯編程序

            作者: 時間:2016-11-28 來源:網絡 收藏
            ;機器人代碼:(外部中斷用來接紅外傳感器的)
            ORG 0000H
            JMP INIT
            ORG 0003H
            JMP INT_0
            ORG 000BH
            JMP INT_T
            ORG 0023H
            JMP INT_S
            ;-------------------------------------
            FLAG_F EQU 01H ;功能選擇,0為播放,1為演奏
            FLAG_L EQU 02H ;指示燈選擇,0指示燈亮或1亮
            FLAG_P EQU 03H ;是否播放標志,0停止,1播放
            FLAG_CH EQU 04H ;演奏時是否換音符,1有效
            FLAG_LAST EQU 05H ;播放時是否到最后64分音符
            FLAG_PRESS EQU 06H ;是否有演奏按鍵
            FLAG_GO EQU 07H ;是否行走標志位(1為行走,0為停止)
            STAT_0 EQU 08H ;4位行走狀態(tài),對應P1.0--P1.3
            STAT_1 EQU 09H
            STAT_2 EQU 0AH
            STAT_3 EQU 0BH
            FLAG_MUTE EQU 0CH
            PERIOD_H EQU 30H ;音長(定時器高位)
            PERIOD_L EQU 31H ;音長(定時器低位)
            COUNTER EQU 32H ;定時器計數(設定定時周期的倍數)
            CU_COUNTER EQU 41H ;當前定時器計數
            TONE EQU 33H ;音高
            SPEED EQU 34H ;樂曲速度
            D_1 EQU 35H
            D_2 EQU 36H
            P_1 EQU 37H
            P_2 EQU 38H
            NUM EQU 39H ;樂曲的位置(第幾首)
            POSITION EQU 40H ;樂曲中音符的位置
            TAB_H EQU 42H ;當前樂曲的音長表首地址高八位
            TAB_L EQU 43H ;當前樂曲的音長表首地址低八位
            TAB_TONE_H EQU 44H ;當前樂曲的音高表首地址高八位
            TAB_TONE_L EQU 45H ;當前樂曲的音高表首地址低八位
            THIS_NUM EQU 46H ;存儲當前按鍵號
            PRE_NUM EQU 47H ;存儲上次按鍵號
            COUNTER_1 EQU 48H ;判斷是否為最后64分音符用,其值等于COUNTER-1
            D_L1 EQU 49H
            D_L2 EQU 4AH
            D_L3 EQU 4BH
            P_L1 EQU 4CH
            P_L2 EQU 4DH
            TAB_1 EQU 4EH ;查表時的高低字節(jié)序號存儲
            TAB_2 EQU 4FH
            CMD EQU 50H
            ;行走命令存儲 (1:功能選擇、2:加速、3:減速、4:原速、5:停止/前進、
            ;(6:左轉、7:右轉、8:朝前) )
            COUNTER_LOOP EQU 51H ;定時器循環(huán)計數
            ; STATUS EQU 52H ;行走狀態(tài)寄存
            PERIOD_TEMP EQU 53H
            ;*****************主程序*************************
            ORG 0030H
            INIT: ; CALL LONG
            CLR P3.7
            ; SETB P3.7
            MOV SP, #54H
            CLR FLAG_F ;初始化
            CLR FLAG_L
            CLR FLAG_P
            CLR FLAG_LAST
            SETB FLAG_CH
            CLR FLAG_PRESS
            SETB FLAG_GO
            CLR FLAG_MUTE
            SETB STAT_0
            SETB STAT_1
            SETB STAT_2
            SETB STAT_3
            MOV CMD, #00H
            MOV PERIOD_H, #00H
            MOV PERIOD_L, #00H
            MOV TONE, #00H
            MOV SPEED, #00H
            MOV COUNTER, #00H
            MOV NUM, #00H
            MOV POSITION, #00H
            ;MOV STATUS, #0FFH
            MOV D_1, #80
            MOV D_2, #79
            MOV P_L1, #01H
            MOV P_L2, #0FFH
            MOV TMOD, #21H ;定時器0為16位計數器定時 ,1為8位自動裝載
            MOV TH0, #0FFH
            MOV TL0, #0FFH
            MOV TH1, #0CCH
            MOV TL1, #0CCH
            MOV SCON, #0D0H
            SETB IT0 ;設定外部中斷0為負跳變觸發(fā)
            SETB PX0 ;外部中斷為高優(yōu)先級
            SETB PS
            SETB EA
            SETB ET0
            SETB EX0 ;開外部中斷
            SETB ES
            SETB TR1
            ;CALL DELAY
            ;-------------------------------------------
            LOOP: JB FLAG_F, PLAY ;演奏功能跳轉
            OUT: JNB FLAG_P, LOOP ;播放部分
            MOV A, TONE
            JZ MUTE
            JB FLAG_MUTE, MUTE_1
            SETB P3.7
            MUTE_1: CJNE A, #1FH, NO_OVER
            CLR TR0 ;TONE值等于1FH,樂曲結束,重新賦初值開始
            CLR P3.7
            ORL P1, #0FH
            MOV POSITION, #00H
            MOV CU_COUNTER, COUNTER
            CALL LONG
            MOV TONE, #00
            MOV COUNTER_LOOP, #0
            SETB TR0
            JMP LOOP
            NO_OVER:
            MUTE: CALL DELAY
            CLR P3.7
            CALL DELAY
            JMP LOOP
            ;------------------
            PLAY: JNB FLAG_PRESS, OVER
            SETB P3.7 ;演奏部分
            CALL DELAY
            CLR P3.7
            OVER: CALL DELAY
            JMP LOOP
            ;****************串口中斷服務程序******************
            ;INT_S: PUSH ACC
            ;CLR RI
            ;MOV A, SBUF
            ;JB P, R_1
            ;R_0: JB RB8, TO_OVER
            ;JMP RIGHT
            ;R_1: JNB RB8, TO_OVER
            ;RIGHT: MOV NUM, A ;賦樂曲號
            ;ANL A, #0FH
            ;JNZ SELECT ;選曲跳轉
            ;MOV A, NUM
            ;SWAP A
            ;MOV CMD, A
            ;----------------------------
            ;CJNE A, #01H, IF_2
            ;CLR P3.7
            ;CPL FLAG_F
            ;ORL P1, #0FH
            ;JB FLAG_F, PLAY_SET
            ;SETB FLAG_GO
            ;JMP INT_OVER
            ;PLAY_SET: CLR FLAG_P
            ;CLR TR0
            ;CLR FLAG_GO
            ;CLR FLAG_PRESS
            ;JMP INT_OVER
            ;IF_2: CJNE A, #02H, IF_3
            ;MOV A, PERIOD_H
            ;ADD A, #4
            ;MOV NUM, A
            ;CLR C
            ;SUBB A, #240
            ;JC S_UP
            ;JMP INT_OVER
            ;S_UP: MOV PERIOD_H, NUM
            ;JMP INT_OVER
            ;IF_3: MOV A, CMD
            ;CJNE A, #03H, IF_4
            ;MOV A, PERIOD_H
            ;SUBB A, #9
            ;MOV NUM, A
            ;CLR C
            ;SUBB A, #100
            ;JNC S_DOWN
            ;JMP INT_OVER
            ;S_DOWN: MOV PERIOD_H, NUM
            ;JMP INT_OVER
            ;IF_4: MOV A, CMD
            ;CJNE A, #04H, IF_5
            ;MOV PERIOD_H, PERIOD_TEMP
            ;JMP INT_OVER
            ;IF_5: CJNE A, #05H, IF_9
            ;CPL FLAG_GO
            ;JMP INT_OVER
            ;IF_9: CJNE A, #09H, CMD_OVER
            ;CPL FLAG_MUTE
            ;CMD_OVER:
            ;TO_OVER: JMP INT_OVER
            ;---------------------------
            ;SELECT: DEC NUM
            ;MOV A, NUM
            ;ANL A, #0F0H
            ;JNZ TO_OVER
            ;MOV A, NUM
            ;CLR C
            ;SUBB A, #11
            ;JNC TO_OVER
            ;MOV A, NUM
            ;RL A
            ;MOV TAB_1, A
            ;MOV TAB_2, TAB_1
            ;INC TAB_2
            ;MOV DPTR, #TAB_SPEED ;查樂曲速度
            ;MOV A, TAB_1
            ;MOVC A, @A+DPTR
            ;MOV PERIOD_L, A
            ;MOV TL0, A
            ;MOV A, TAB_2
            ;MOVC A, @A+DPTR
            ;MOV PERIOD_H, A
            ;MOV PERIOD_TEMP, A
            ;MOV TH0, A
            ;MOV DPTR, #TAB_NUM_T ;查音高位置首地址
            ;MOV A, TAB_1
            ;MOVC A, @A+DPTR
            ;MOV TAB_TONE_H, A
            ;MOV A, TAB_2
            ;MOVC A, @A+DPTR
            ;MOV TAB_TONE_L, A
            ;MOV DPTR, #TAB_NUM_L ;查音長位置首地址
            ;MOV A, TAB_1
            ;MOVC A, @A+DPTR
            ;MOV TAB_H, A
            ;MOV A, TAB_2
            ;MOVC A, @A+DPTR
            ;MOV TAB_L, A
            ;HANDLE: JB FLAG_F, PLAY_0 ;演奏樂曲時跳轉
            ;SETB FLAG_P ;允許播放
            ;MOV POSITION, #0H ;賦樂曲位置值為0,即從頭開始撥出
            ;MOV COUNTER, #02H
            ;MOV CU_COUNTER, COUNTER ;賦當前定時次數和應定時次數值,使之相等,以使定時器工作時就播放,無需等待
            ;MOV COUNTER_1, COUNTER
            ;DEC COUNTER_1
            ;CLR FLAG_LAST
            ;MOV COUNTER_LOOP, #0
            ;SETB TR0 ;啟動定時器0
            ;JMP INT_OVER
            ;PLAY_0: CLR P3.7
            ;SETB FLAG_PRESS
            ;SETB FLAG_CH
            ;MOV DPTR, #TAB_TONE ;查音高表
            ;MOV A, NUM
            ;ADD A, #07
            ;RL A ;音高表每組音高有兩個延時值
            ;MOV TAB_1, A
            ;MOVC A, @A+DPTR ;查第一個延時值
            ;MOV D_1, A
            ;MOV A, TAB_1
            ;INC A
            ;MOVC A, @A+DPTR
            ;MOV D_2, A
            ;JB FLAG_L, L_0
            ;SETB FLAG_L
            ;CLR P3.4
            ;SETB P3.3
            ;JMP INT_OVER
            ;L_0: CLR FLAG_L
            ;CLR P3.3
            ;SETB P3.4
            ;INT_OVER: POP ACC
            ;RETI

            上一頁 1 2 下一頁

            評論


            技術專區(qū)

            關閉