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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5382|回復(fù): 2
收起左側(cè)

51單片機(jī)紅外遙控電子琴匯編語(yǔ)言示例源程序

[復(fù)制鏈接]
ID:345128 發(fā)表于 2018-6-8 20:09 | 顯示全部樓層 |閱讀模式
用51單片機(jī)實(shí)現(xiàn)的用紅外線控制電子琴的部分程序,可借用。
    該程序可以實(shí)現(xiàn)用紅外遙控器控制JD51蜂鳴器發(fā)出不同音調(diào)與歌曲,其中1~7分別發(fā)出dou rai mi fa so la ti的音調(diào),8和9分別會(huì)播放一首歌曲。
    另附有“紅外接收與控制”子程序,請(qǐng)大家務(wù)必先單獨(dú)運(yùn)行子程序,弄明白遙控器上1~9對(duì)應(yīng)的二進(jìn)制編碼方式,并模仿示例中的操作,進(jìn)行補(bǔ)充完善。
    說(shuō)明:該例子除了沒(méi)有按鍵2~7,9的功能,還缺少歌曲播放中的中斷程序?qū)崿F(xiàn),請(qǐng)大家完善,謝謝!
0.png

單片機(jī)匯編語(yǔ)言源程序如下:
  1.         ORG 0030H
  2. public infrared
  3. ;DELAYY SEGMENT CODE
  4. ;RSEG   AELAYY

  5. INFRARED:
  6.     JNB    P3.2,IR        ;遙控掃描
  7.     LJMP   INFRARED           ;在正常無(wú)遙控信號(hào)時(shí),一體化紅外接收頭輸出是高電平,程序一直在循環(huán)。

  8. ;=================================================
  9. ;   解碼程序
  10. IR:
  11.     ;以下對(duì)遙控信號(hào)的9000微秒的初始低電平信號(hào)的識(shí)別
  12.     MOV    R6,#10
  13. IR_SB:
  14.     ACALL  DELAY882        ;調(diào)用882微秒延時(shí)子程序
  15.     JB     P3.2,IR_ERROR   ;延時(shí)882微秒后判斷P2.2腳是否出現(xiàn)高電平如果有就退出解碼程序
  16.     DJNZ   R6,IR_SB        ;重復(fù)10次,目的是檢測(cè)在8820微秒內(nèi)如果出現(xiàn)高電平就退出解碼程序

  17.     ;識(shí)別連發(fā)碼,和跳過(guò)4.5ma的高電平。
  18.     JNB     P3.2, $         ;等待高電平避開(kāi)9毫秒低電平引導(dǎo)脈沖
  19.     ACALL  DELAY2400
  20.     JNB     P3.2,IR_Rp    ;這里為低電平,認(rèn)為是連發(fā)碼信號(hào),見(jiàn)圖6。
  21.     ACALL  DELAY2400      ;延時(shí)4.74毫秒避開(kāi)4.5毫秒的結(jié)果碼

  22.     ;以下32數(shù)據(jù)碼的讀取 ,0和1的識(shí)別 請(qǐng)看圖2
  23.     MOV     R1,#1AH        ;設(shè)定1AH為起始RAM區(qū)
  24.     MOV     R2,#4
  25. IR_4BYTE:
  26.     MOV     R3,#8
  27. IR_8BIT:   
  28.     JNB     P3.2,$         ;等待地址碼第一位的高電平信號(hào)
  29.     LCALL  DELAY882        ;高電平開(kāi)始后用882微秒的時(shí)間尺去判斷信號(hào)此時(shí)的高低電平狀態(tài)
  30.     MOV    C,P3.2          ;將P2.2引腳此時(shí)的電平狀態(tài)0或1存入C中
  31.     JNC     IR_8BIT_0      ;如果為0就跳轉(zhuǎn)到IR_8BIT_0
  32.     LCALL  DELAY1000
  33. IR_8BIT_0:
  34.     MOV    A,@R1           ;將R1中地址的給A
  35.     RRC    A               ;將C中的值0或1移入A中的最低位
  36.     MOV    @R1,A           ;將A中的數(shù)暫時(shí)存放在R1中
  37.     DJNZ   R3,IR_8BIT      ;接收地址碼的高8位
  38.     INC    R1              ;對(duì)R1中的值加1,換下一個(gè)RAM
  39.     DJNZ   R2,IR_4BYTE     ;接收完16位地址碼和8位數(shù)據(jù)碼和8位數(shù)據(jù),
  40.                            ;存放在1AH/1BH/1CH/1DH的RAM中
  41.      ;解碼成功
  42.     JMP    IR_GOTO

  43. IR_Rp:
  44.     ;這里為重復(fù)碼執(zhí)行處
  45.     ;按住遙控按鍵時(shí),每過(guò)108ms就到這里來(lái)
  46.     JMP    IR_GOTO

  47. IR_ERROR:
  48.     ;錯(cuò)語(yǔ)退出
  49.     LJMP   INFRARED ;退出解碼子程序

  50. ;=================================================
  51. ;遙控執(zhí)行部份
  52. IR_GOTO:
  53.     ;這里還要判斷1AH和1BH 兩個(gè)系統(tǒng)碼或用戶碼,用于識(shí)別不同的遙控器
  54.     ;MOV   A,1AH
  55.     ;CJNE  A,#xxH,IR_ERROR   ;用戶碼1不對(duì)則退出
  56.     ;MOV   A,1BH
  57.     ;CJNE  A,#xxH,IR_ERROR   ;用戶碼2不對(duì)則退出



  58.     ;判斷兩個(gè)數(shù)據(jù)碼是否相反
  59.     MOV    A,1CH
  60.     CPL    A
  61.     CJNE   A,1DH,IR_ERROR    ;兩個(gè)數(shù)據(jù)碼不相反則退出
  62.     ;遙控執(zhí)行部份
  63.     ;MOV   A,1DH             ;判斷對(duì)應(yīng)按鍵
  64.     ;CJNE  A,#xxH,$+6
  65.     ;LJMP  -à跳到對(duì)應(yīng)按鍵執(zhí)行處
  66.     ;CJNE  A,#xxH,$+6
  67.     ;LJMP  -à跳到對(duì)應(yīng)按鍵執(zhí)行處
  68.     ;.
  69.     MOV     R0,1DH         ;
  70. KEYP0:   
  71.       CLR TR0
  72.       SETB P2.4     ;關(guān)蜂鳴器
  73.      SETB P2.3                           ;關(guān)數(shù)碼管
  74. //        MOV  P1,R0
  75.         CJNE R0,#11110011B,L1          ;!!!非常關(guān)鍵的一步,遙控器上的按鍵1對(duì)應(yīng)的二進(jìn)制碼為 11110011,所以此處判斷是否是按鍵1按下,獲得的功能相當(dāng)于板子的S1
  76.                                                        ; 如果不是按鍵1,則跳轉(zhuǎn)繼續(xù)判斷是否是別的按鍵,此處弱化了功能,只寫(xiě)了按鍵1 和8,
  77.                                                            ;所以此時(shí)大家的任務(wù)就是參考這個(gè)例子和原有的電子音調(diào)發(fā)生器程序,繼續(xù)添加按鍵2~7,以及9的內(nèi)容,從而完善功能
  78.     SETB P2.4        ;蜂鳴器置于高電平
  79.         MOV R4,#200  
  80. MAIN01:MOV TMOD,#01H   
  81.        MOV TL0,#021H         ;寫(xiě)入計(jì)數(shù)初值
  82.        MOV TH0,#0F9H
  83.        SETB TR0
  84. WAIT1:JNB TF0,WAIT1
  85.      CLR TF0
  86.      CPL P2.4            ;蜂鳴器響
  87.           CLR P2.3            ;數(shù)碼管顯示2
  88.           MOV A,#11111001B
  89.                  MOV P0,A
  90.      DJNZ R4,MAIN01      ;數(shù)碼管顯示1
  91.          
  92.                                                                   

  93. L1:CJNE R0,#10101101B,L2   ;   判斷是否是按鍵8按下,如果是,發(fā)出一段音樂(lè)

  94. MUSTART1:                     
  95.      MOV R0,#00H               ;節(jié)拍表指針置零
  96.      MOV R1,#00H               ;音符表指針置零
  97. RTAB:MOV A,R0
  98.      MOV DPTR,#RYTH
  99.      MOVC A,@A+DPTR            ;查表法將一個(gè)節(jié)拍數(shù)據(jù)取出放R2計(jì)數(shù)器中
  100.      MOV R2,A
  101. TTAB:MOV A,R1
  102.      MOV DPTR,#TONE
  103.      MOVC A,@A+DPTR
  104.      MOV R3,A                  ;取出音符表高8位
  105.      INC R1                    ;指針加1
  106.      MOV A,R1
  107.      MOV DPTR,#TONE
  108.      MOVC A,@A+DPTR
  109.      MOV R4,A                  ;取出低8位
  110.      SETB P2.4  

  111. LOOP:MOV R5,#3BH
  112. JMP MAIN
  113. L2:JMP L3
  114. MAIN:MOV TMOD,#01H
  115.      MOV TL0,R4
  116.      MOV TH0,R3
  117.      SETB TR0
  118. WAIT:JNB TF0,WAIT
  119.      CLR TF0
  120.      CPL P2.4

  121. RA:  DJNZ R5,MAIN             ;無(wú)打斷則繼續(xù)放第一首歌
  122.      DJNZ R2,LOOP
  123. INC R0                        ;兩個(gè)表的指針都加1
  124. INC R1
  125. CJNE R1,#88,RTAB              ;判斷是否取完
  126. LJMP KEYP0
  127. TONE:
  128. DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FH
  129. DB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68H
  130. DB 0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68H
  131. DB 0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BH
  132. DB 0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFH
  133. RYTH:
  134. DB 04,04,04,04,04,04,04,04,04,04
  135. DB 04,05,04,04,04,04,04,04,04,04
  136. DB 04,04,04,06,04,04,04,07,04,04
  137. DB 04,04,04,06,04,04,04,07,04,04
  138. DB 04,04,04,04

  139. L3:


  140.     ;清除遙控值使連按失效
  141.     MOV    1AH,#00H
  142.     MOV    1BH,#00H
  143.     MOV    1CH,#00H
  144.     MOV    1DH,#00H
  145.     LJMP   INFRARED
  146. ;=================================================
  147. ; 延時(shí)子程序
  148. ;=============================882
  149. ;1.085x ((202x4)+5)=882
  150. DELAY882:   
  151.     MOV R7,#202
  152. DELAY882_A:
  153.     NOP
  154.     NOP
  155.     DJNZ   R7,DELAY882_A
  156. RET

  157. ;=============================1000
  158. ;1.085x ((229x4)+5)=999.285
  159. DELAY1000:
  160.     MOV R7,#229
  161. DELAY1000_A:
  162.     NOP
  163.     NOP
  164.     DJNZ   R7,DELAY1000_A
  165. RET
  166. ;=============================2400
  167. ……………………

  168. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

紅外遙控電子琴示例程序.zip

4.91 KB, 下載次數(shù): 94, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除
ID:468878 發(fā)表于 2021-6-15 08:48 | 顯示全部樓層
厲害,其實(shí)匯編語(yǔ)言的單步思維,還比較容易學(xué),就是可移植性不太好。
回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除
ID:1021140 發(fā)表于 2022-4-24 09:34 | 顯示全部樓層
點(diǎn)贊樓主思維
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本精品一区二区 | 国产一区2区 | 91精品久久久久久久久中文字幕 | 爱爱免费视频 | av黄色网 | 美女爽到呻吟久久久久 | 久久99精品久久久久久 | 日韩久久综合网 | 精品视频久久久 | 久久精品亚洲国产奇米99 | 国产精品99久久久久 | 国产成人一区二 | 欧美久久综合 | 一级毛片免费看 | 国产三级 | 黑人巨大精品欧美一区二区一视频 | 久久久久久成人 | 91影视| 国产精品一区二区av | 精品三区| 观看av| 青青操91 | 欧美一区二区三区在线播放 | 欧美一级二级在线观看 | 久久精品国产99国产精品 | 国产成人精品一区二区三区在线 | 中文字幕日韩一区 | 精品中文字幕久久 | 欧美久久久久久 | 亚洲国产成人精品女人久久久 | 欧美 日韩 中文 | 国产视频第一页 | 欧美日韩在线一区二区三区 | 99福利 | 色网站在线免费观看 | 99免费在线视频 | 宅男噜噜噜66一区二区 | 国产精品日韩欧美一区二区三区 | 美女爽到呻吟久久久久 | 91看片在线观看 | 午夜丰满寂寞少妇精品 |