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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1690|回復: 0
收起左側

jd51單片機紅外線控制音調發生器程序

[復制鏈接]
ID:498335 發表于 2019-6-19 23:30 | 顯示全部樓層 |閱讀模式
/***************************程序功能說明******************************
掃描方式,讀取紅外遙控器鍵值,并把獲得的鍵值顯示于8個LED,同時蜂鳴器響.
當所按鍵是0~9時,1個七段顯示器顯示對應的數字。液晶屏顯示相應的數字
當所按鍵是1~8時,蜂鳴器發出音調1、2、3、4、5、6、7、i。
按下CH+時,8個LED呈跑馬燈閃爍三個循環。
當所按鍵是0時,播放音樂1
當所按鍵是9時,播放音樂2
******************************************************************/  
ORG 0000H
LJMP MAIN
ORG 30H
MAIN:
    JNB    P3.2,IR        ;遙控掃描
    LJMP   MAIN           ;在正常無遙控信號時,一體化紅外接收頭輸出是高電平,程序一直在循環。
;=================================================
;   解碼程序
IR:
    ;以下對遙控信號的9000微秒的初始低電平信號的識別
    MOV    R6,#10
IR_SB:
    ACALL  DELAY882        ;調用882微秒延時子程序
    JB     P3.2,IR_ERROR   ;延時882微秒后判斷P2.2腳是否出現高電平如果有就退出解碼程序
    DJNZ   R6,IR_SB       ;重復10次,目的是檢測在8820微秒內如果出現高電平就退出解碼程序
    ;識別連發碼,和跳過4.5ma的高電平。
    JNB     P3.2, $         ;等待高電平避開9毫秒低電平引導脈沖
    ACALL  DELAY2400
    JNB     P3.2,IR_Rp    ;這里為低電平,認為是連發碼信號。
    ACALL  DELAY2400     ;延時4.74毫秒避開4.5毫秒的結果碼
    ;以下32數據碼的讀取 ,0和1的識別
    MOV     R1,#1AH        ;設定1AH為起始RAM區
    MOV     R2,#4
IR_4BYTE:
    MOV     R3,#8
IR_8BIT:   
    JNB     P3.2,$         ;等待地址碼第一位的高電平信號
    LCALL  DELAY882        ;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態
    MOV    C,P3.2          ;將P2.2引腳此時的電平狀態0或1存入C中
    JNC    IR_8BIT_0      ;如果為0就跳轉到IR_8BIT_0
    LCALL  DELAY1000
IR_8BIT_0:
    MOV    A,@R1           ;將R1中地址的給A
    RRC    A               ;將C中的值0或1移入A中的最低位
    MOV    @R1,A           ;將A中的數暫時存放在R1中
    DJNZ   R3,IR_8BIT      ;接收地址碼的高8位
    INC    R1             ;對R1中的值加1,換下一個RAM
    DJNZ   R2,IR_4BYTE     ;接收完16位地址碼和8位數據碼和8位數據,
                           ;存放在1AH/1BH/1CH/1DH的RAM中
     ;解碼成功
    JMP    IR_GOTO
IR_Rp:
    ;這里為重復碼執行處
    ;按住遙控按鍵時,每過108ms就到這里來
    JMP    IR_GOTO
IR_ERROR:
    ;錯語退出
    LJMP   MAIN ;退出解碼子程序
;=================================================
;遙控執行部份
IR_GOTO:
   
    ;判斷兩個數據碼是否相反
    MOV    A,1CH
    CPL    A
    CJNE   A,1DH,IR_ERROR    ;兩個數據碼不相反則退出
   MOV     P1,1DH         ;將按鍵的鍵值通過P1口的8個LED顯示出來!
    CLR     P2.4         ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功
    LCALL  DELAY2400
    LCALL  DELAY2400
    LCALL  DELAY2400
    SETB   P2.4        ;蜂鳴器停止
     LCALL JZPD
    ;清除遙控值使連按失效
    MOV    1AH,#00H
    MOV    1BH,#00H
    MOV    1CH,#00H
    MOV    1DH,#00H
     
     LJMP  MAIN
;=================================================
;鍵值判斷
JZPD:   MOV A,1DH
IRD0: CJNE A,#0E9H,IRD1        ;按鍵"0"判斷顯示,若為"0"則繼續執行程序,不為零則繼續判斷是否為"1"
    MOV R3,#200
    MAIN0:MOV TMOD,#01H    ;初始化,工作方式1
             MOV TL0,#21H     ;寫入計數初值
             MOV TH0,#0F9H
             SETB TR0         ;啟動計數      
    WAIT0:JNB TF0,WAIT0     
             CLR TF0         
             CLR P2.1  
             ;數碼管顯示0
             MOV A,#0C0H
            MOV P0,A
             DJNZ R3,MAIN0
         LJMP MUSTART1    ;跳轉到音樂1的執行程序
      
         
    RET
IRD1: CJNE A,#0F3H,IRD2    ;按鍵"1"判斷顯示
    MOV R3,#200
    MAIN01:MOV TMOD,#01H    ;初始化,工作方式1
             MOV TL0,#0E1H     ;寫入計數初值
             MOV TH0,#0F9H
             SETB TR0         ;啟動計數
         
    WAIT1:JNB TF0,WAIT1     
             CLR TF0         
             CPL P2.4             ;蜂鳴器響
             CLR P2.0             ;數碼管顯示1
             CLR P1.0;
         
             MOV A,#0F9H
            MOV P0,A
             DJNZ R3,MAIN01
           LCALL DELAY2400
             CPL P1.0;
             CPL P2.0  
    RET
IRD2: CJNE A,#0E7H,IRD3    ;按鍵"2"判斷顯示
MOV R3,#200  
MAIN02:MOV TMOD,#01H   
       MOV TL0,#021H         ;寫入計數初值
       MOV TH0,#0F9H
       SETB TR0
WAIT2:JNB TF0,WAIT2
     CLR TF0
     CPL P2.4            ;蜂鳴器響
      CLR P2.1      ;數碼管顯示2
      CLR P1.1;
      MOV A,#0A4H
         MOV P0,A
     DJNZ R3,MAIN02
LCALL DELAY2400
             CPL P1.1;
             CPL P2.1;
    RET
IRD3: CJNE A,#0A1H,IRD4    ;按鍵"3"判斷顯示
MOV R3,#200
MAIN03:MOV TMOD,#01H      
       MOV TL0,#08CH
       MOV TH0,#0FAH
       SETB TR0
WAIT3:JNB TF0,WAIT3
     CLR TF0
     CPL P2.4
      CLR P2.2
     
      CLR P1.2;
      
      MOV A,#0B0H
         MOV P0,A
     DJNZ R3,MAIN03
LCALL DELAY2400
             CPL P1.2
             CPL P2.2
    RET
IRD4: CJNE A,#0F7H,IRD5    ;按鍵"4"判斷顯示
MOV R3,#200
MAIN04:MOV TMOD,#01H            
       MOV TL0,#0D8H
       MOV TH0,#0FAH
       SETB TR0
WAIT4:JNB TF0,WAIT4
     CLR TF0
     CPL P2.4
      CLR P2.3
     CLR P1.3
      MOV A,#099H
         MOV P0,A
     DJNZ R3,MAIN04
LCALL DELAY2400
             CPL P1.3;
             CPL P2.3
    RET
IRD5: CJNE A,#0E3H,IRD6   ;按鍵"5"判斷顯示
MOV R3,#200   
MAIN05:MOV TMOD,#01H           
       MOV TL0,#068H
       MOV TH0,#0FBH
       SETB TR0
WAIT5:JNB TF0,WAIT5
     CLR TF0
     CPL P2.4
      CLR P2.1
      CLR P1.4
      MOV A,#092H
         MOV P0,A
     DJNZ R3,MAIN05
LCALL DELAY2400
             CPL P1.4;
    RET
IRD6: CJNE A,#0A5H,IRD7    ;按鍵"6"判斷顯示
MOV R3,#200            
MAIN06:MOV TMOD,#01H
       MOV TL0,#0E9H
       MOV TH0,#0FBH
       SETB TR0
WAIT6:JNB TF0,WAIT6
     CLR TF0
     CPL P2.4
      CLR P2.1
      CLR P1.5
      MOV A,#082H
         MOV P0,A
     DJNZ R3,MAIN06
LCALL DELAY2400
             CPL P1.5;
    RET
IRD7: CJNE A,#0BDH,IRD8   ;按鍵"7"判斷顯示
MOV R3,#200         
MAIN07:MOV TMOD,#01H
       MOV TL0,#05BH
       MOV TH0,#0FCH
       SETB TR0
WAIT7:JNB TF0,WAIT7
     CLR TF0
     CPL P2.4
      CLR P2.1
      CLR P1.6
      MOV A,#0F8H
         MOV P0,A
     DJNZ R3,MAIN07
LCALL DELAY2400
             CPL P1.6;
    RET
IRD8: CJNE A,#0ADH,IRD9    ;按鍵"8"判斷顯示
MOV R3,#200      
MAIN08:MOV TMOD,#01H
       MOV TL0,#08FH
       MOV TH0,#0FCH
       SETB TR0
WAIT8:JNB TF0,WAIT8
     CLR TF0
     CPL P2.4
      CLR P2.1
      CLR P1.7
      MOV A,#080H
         MOV P0,A
     DJNZ R3,MAIN08
LCALL DELAY2400
             CPL P1.7;
    RET
IRD9:   CJNE A,#0B5H,IRDp ;按鍵"9"判斷顯示
        MOV R3,#200
    MAIN09:MOV TMOD,#01H    ;初始化,工作方式1
             MOV TL0,#21H     ;寫入計數初值
             MOV TH0,#0F9H
             SETB TR0         ;啟動計數      
    WAIT9:JNB TF0,WAIT9   
             CLR TF0         
             CLR P2.1             ;數碼管顯示9
             CLR P1.0
             CLR P1.1
             CLR P1.2
             CLR P1.3
             CLR P1.4
             CLR P1.5
             CLR P1.6
             CLR P1.7
             MOV A,#090H
            MOV P0,A
             DJNZ R3,MAIN09
LJMP MUSTART2   ;跳轉到音樂2的執行程序
    RET
IRDp:   CJNE A,#0B8H,IRDEND   ;按鍵"PLAY"判斷顯示
    MOV A,#0FEH      ;給A賦值成11111110
    MOV R0,#24
    LOOP:MOV P1,A    ;點亮LED1
    MOV R3,#150
    MAIN10:MOV TMOD,#01H    ;初始化,工作方式1
             MOV TL0,#21H     ;寫入計數初值
             MOV TH0,#0F9H
             SETB TR0         ;啟動計數      
    WAIT10:JNB TF0,WAIT10     
             CLR TF0         
             DJNZ R3,MAIN10
    RL A         ;A的值循環左移一位
    DJNZ R0,LOOP
    MOV   1AH,#00H
    MOV   1BH,#00H
    MOV   1CH,#00H
    MOV   1DH,#00H
    LJMP MAIN
IRDEND:RET
;=================================================
; 延時子程序
;=============================882
;1.085x ((202x4)+5)=882
DELAY882:   
    MOV R7,#202
DELAY882_A:
    NOP
    NOP
    DJNZ   R7,DELAY882_A
RET
;=============================1000
;1.085x ((229x4)+5)=999.285
DELAY1000:
    MOV R7,#229
DELAY1000_A:
    NOP
    NOP
    DJNZ   R7,DELAY1000_A
RET
;=============================2400
;1.085x ((245x9)+5)=2397.85
DELAY2400:   
    MOV R7,#245
DELAY2400_A:
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    DJNZ R7,DELAY2400_A
RET
;=================================================
; 延時子程序TAO
;=============================882
;1.085x ((202x4)+5)=882
MUSTART1:                      ;歌曲1的播放程序
     MOV R0,#00H               ;節拍表指針置零
     MOV R1,#00H               ;音符表指針置零
RTAB:MOV A,R0
     MOV DPTR,#RYTH
     MOVC A,@A+DPTR            ;查表法將一個節拍數據取出放R2計數器中
     MOV R2,A
TTAB:MOV A,R1
     MOV DPTR,#TONE
     MOVC A,@A+DPTR
     MOV R3,A                  ;取出音符表高8位
     INC R1                    ;指針加1
     MOV A,R1
     MOV DPTR,#TONE
     MOVC A,@A+DPTR
     MOV R4,A                  ;取出低8位
     SETB P2.4                 ;輸出相應音調的方波
LOOP1:MOV R5,#3BH
BBB:MOV TMOD,#01H
     MOV TL0,R4
     MOV TH0,R3
     SETB TR0
WAIT:JNB TF0,WAIT
     CLR TF0
     CPL P2.4
        
RA:  DJNZ R5,BBB            ;無打斷則繼續放第一首歌
     DJNZ R2,LOOP1
INC R0                       ;兩個表的指針都加1
INC R1
CJNE R1,#88,RTAB              ;判斷是否取完
LJMP IRD0
TONE:
DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FH
DB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68H
DB 0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68H
DB 0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BH
DB 0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFH
RYTH:
DB 04,04,04,04,04,04,04,04,04,04
DB 04,05,04,04,04,04,04,04,04,04
DB 04,04,04,06,04,04,04,07,04,04
DB 04,04,04,06,04,04,04,07,04,04
DB 04,04,04,04
MUSTART2:    ;歌曲2的播放程序
     MOV R0,#00H      ;節拍表指針置0
     MOV R1,#00H      ;音符表指針置0
RTAB2:
     MOV A,R0
     MOV DPTR,#TABLE1
     MOVC A,@A+DPTR
     MOV R2,A
TTAB2: MOV A,R1
     MOV DPTR,#TONE2
     MOVC A,@A+DPTR
     MOV R3,A
     INC R1
      MOV A,R1
      MOV DPTR,#TONE2
      MOVC A,@A+DPTR
      MOV R4,A
     SETB P2.4
LOOP2: MOV R5,#9BH
MAIN2:
      MOV TMOD,#01H
     MOV TL0,R4
     MOV TH0,R3
     SETB TR0
WAITR:JNB TF0,WAITR
     CLR TF0
     CPL P2.4
RB:  DJNZ R5,MAIN2
     DJNZ R2,LOOP2
   
INC R0
INC R1
CJNE R1,#64,RTAB2
LJMP IRD9
TONE2:
DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FH
DB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68H
DB 0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68H
DB 0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BH
DB 0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFH
TABLE1:
DB 04,04,04,04,04,04,04,04,04,04
DB 04,05,04,04,04,04,04,04,04,04
DB 04,04,04,06,04,04,04,07,04,04
DB 04,04,04,06,04,04,04,07,04,04
DB 04,04,04,04
END
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区 中文字幕 | 午夜精品影院 | 99热这里有精品 | 日韩精品免费在线 | 国产日韩一区二区三免费高清 | 成人在线视 | 亚洲综合天堂 | 99久久亚洲 | 精品国产精品三级精品av网址 | 91精品久久久久久久久 | 日本久久网 | 不卡av电影在线播放 | 亚洲第一av | 久久精品一级 | 91久久 | 日韩午夜场| 中文字幕一区在线观看视频 | 亚洲品质自拍视频 | 午夜av电影 | 日韩一区二区三区视频 | 国产精品久久久久免费 | 成人性生交大片免费看中文带字幕 | 精品国产一区一区二区三亚瑟 | 一区二区中文 | 日韩福利| 拍真实国产伦偷精品 | 日韩一区二区三区视频在线播放 | 美国一级黄色片 | 久久精品欧美一区二区三区麻豆 | 亚洲www啪成人一区二区麻豆 | 国产日韩久久久久69影院 | 久久在线看 | 男人午夜视频 | 国产毛片久久久久久久久春天 | 激情综合五月 | 国产精品99久久久久久久久久久久 | 福利二区| 精精国产xxxx视频在线野外 | 久久久久一区 | www.青娱乐 | 国产免费一区 |