色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 帶存儲功能的學(xué)習(xí)型紅外遙控器源代碼

          帶存儲功能的學(xué)習(xí)型紅外遙控器源代碼

          作者: 時間:2012-09-04 來源:網(wǎng)絡(luò) 收藏

          很詳細(xì)的,儲存在24c64中的匯編子程序,在你自己的設(shè)計(jì)中只要修改一下IO調(diào)用它就可以了,是本人的工程驗(yàn)證能學(xué)習(xí)市面常用的絕大部分

          本文引用地址:http://cafeforensic.com/article/170920.htm

          用的是stc89c52單片機(jī),下面是匯編代碼:

          ;**********************************
          ;---------------------AT24C64 CODE-------------------------
          ;==========================================================
          ICSTART: ;I2C 開始
          SETB SDA
          NOP
          NOP
          NOP
          NOP
          SETB SCK
          NOP
          NOP
          NOP
          NOP
          CLR SDA
          NOP
          NOP
          NOP
          NOP
          CLR SCK
          RET
          ;==========================================================
          ICSTOP: ;I2C 結(jié)束
          CLR SDA
          NOP
          NOP
          NOP
          NOP
          CLR SCK
          NOP
          NOP
          NOP
          NOP
          SETB SCK
          NOP
          NOP
          NOP
          NOP
          SETB SDA
          RET
          ;==========================================================
          ICACK: ;I2C 應(yīng)答
          CLR SDA
          NOP
          NOP
          NOP
          NOP
          SETB SCK
          NOP
          NOP
          NOP
          NOP
          CLR SCK
          RET
          ;==========================================================
          NOACK: ;I2C 無應(yīng)答
          SETB SDA
          NOP
          NOP
          NOP
          NOP
          SETB SCK
          NOP
          NOP
          NOP
          NOP
          CLR SCK
          RET
          ;==========================================================
          ICREADBIT: ;I2C 讀取一位
          SETB SDA
          NOP
          NOP
          NOP
          NOP
          SETB SCK
          NOP
          NOP
          NOP
          NOP
          MOV C,SDA
          CLR SCK
          RET
          ;----------------------------------------------------------
          ICREADACK:
          MOV R7,#200
          SETB SDA
          NOP
          NOP
          NOP
          NOP
          SETB SCK
          NOP
          NOP
          NOP
          NOP
          READACKS:
          JNB SDA,ACKEND
          DJNZ R7,READACKS
          SETB C
          CLR SCK
          RET
          ACKEND:
          CLR C
          CLR SCK
          RET

          ;==========================================================
          ICREADBYTE: ;I2C 讀取一個字節(jié)
          MOV R7,#8
          READLOOP:
          LCALL ICREADBIT
          RLC A
          DJNZ R7,READLOOP
          MOV R7,A
          RET
          ;==========================================================
          ICWRITEBIT: ;I2C 寫一位
          MOV SDA,C
          NOP
          NOP
          NOP
          NOP
          SETB SCK
          NOP
          NOP
          NOP
          NOP
          CLR SCK
          RET
          ;==========================================================
          ICWRITEBYTE: ;I2C 寫一個字節(jié)
          MOV A,R7
          MOV R7,#8
          WRITELOOP:
          RLC A
          LCALL ICWRITEBIT
          DJNZ R7,WRITELOOP
          RET
          ;==========================================================
          READAT:
          MOV A,R7 ;計(jì)算I2C地址
          MOV B,#208 ;144
          MUL AB
          MOV R2,B
          MOV R3,A


          LCALL ICSTART ;I2C 數(shù)據(jù)讀入緩沖區(qū)
          MOV R7,#0A0H ;R2R3 I2C地址
          LCALL ICWRITEBYTE ;R0 緩沖區(qū)地址
          LCALL ICREADACK ;R1 數(shù)據(jù)個數(shù)
          JNC RACKEND
          RET
          ;
          RACKEND:
          MOV A,R2
          MOV R7,A
          LCALL ICWRITEBYTE
          LCALL ICREADACK
          MOV A,R3
          MOV R7,A
          LCALL ICWRITEBYTE
          LCALL ICREADACK

          LCALL ICSTART
          MOV R7,#0A1H
          LCALL ICWRITEBYTE
          LCALL ICREADACK
          MOV R0,#LRDBUF
          MOV R1,#208 ;144

          READDATAS:
          LCALL ICREADBYTE
          LCALL ICACK
          MOV @R0,A
          INC R0
          DJNZ R1,READDATAS
          LCALL NOACK
          LCALL ICSTOP
          RET

          ;==========================================================
          WRITEAT: ;緩沖區(qū)數(shù)據(jù)寫入 I2C

          MOV A,R7 ;計(jì)算I2C地址
          MOV B,#208 ;;144
          MUL AB
          MOV R2,B
          MOV R3,A
          MOV R5,#13 ;9 13*16=208

          MOV R0,#LRDBUF

          ICWRITENEXT:
          LCALL ICSTART
          MOV R7,#0A0H
          LCALL ICWRITEBYTE
          LCALL ICREADACK
          JNC WACKEND
          ;
          ;
          WACKEND:
          MOV A,R2
          MOV R7,A
          LCALL ICWRITEBYTE
          LCALL ICREADACK
          MOV A,R3
          MOV R7,A
          LCALL ICWRITEBYTE
          LCALL ICREADACK


          MOV R1,#16
          WRITEDATAS:
          MOV A,@R0
          INC R0
          MOV R7,A
          LCALL ICWRITEBYTE
          LCALL ICREADACK
          DJNZ R1,WRITEDATAS
          LCALL ICSTOP


          MOV R7,#250
          DELAY_D:
          MOV R6,#20
          DJNZ R6,$
          DJNZ R7,DELAY_D

          MOV A,R3
          ADD A,#16
          MOV R3,A
          MOV A,R2
          ADDC A,#0
          MOV R2,A


          DJNZ R5,ICWRITENEXT
          RET
          ;*****************************************************************

          ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
          LRDREAD:
          ;代碼讀取
          MOV R0,#LRDBUF ;代碼緩沖區(qū)清零
          MOV R1,#208 ;144
          CLR A
          CLRLRDBUF:
          MOV @R0,A
          INC R0
          DJNZ R1,CLRLRDBUF
          MOV R0,#LRDBUF
          SETB LRDR
          LRDTEST:
          SETB TR2
          SETB ES ;紅外代碼起始檢測
          JB RI,LLOOP ;這里是檢測有鍵按下時。。。。。。
          CLR TR2
          JNB LRDR,READSTART
          JB HWXX,LRDTEST ;紅外學(xué)習(xí)標(biāo)志位
          LJMP LLLOOP
          LLOOP: ;
          CLR RI
          MOV A,SBUF
          MOV R0,#250
          MOV R1,#250
          LP4: JB RI,LP3
          DJNZ R0,LP4
          DJNZ R1,LP4
          LJMP LRDTEST
          LP3: CLR RI
          CLR ES
          MOV A,SBUF
          MOV A,#00H

          LP2:
          CLR HONGWAI ;紅外按鈕標(biāo)志位
          CLR P3.3
          CLR HWXX
          MOV SBUF,#37H
          JNB TI,$
          CLR TI
          DEC SP
          DEC SP
          LJMP LOOP
          LLLOOP: RET

          ;--------------------------------------
          READSTART:
          CLR EA
          ;SETB P0.6
          MOV TH1,#0
          MOV TL1,#12
          SETB LRDR
          ;--------------------------------------
          READLOOP_S:
          SETB TR1
          CLR TF1
          TEST_LRDR:
          MOV A,TH1
          JB TF1,LRDOVER
          JNB LRDR,TEST_LRDR
          CLR TR1 ;

          INC R0
          MOV A,TL1
          MOV @R0,A
          INC R0
          MOV A,TH1
          MOV @R0,A
          INC R1 ;紅外線時間 1
          ;--------------------------------------
          ;--------------------------------------
          MOV TH1,#0
          MOV TL1,#12
          SETB TR1
          CLR TF1

          TESTLRD:
          MOV A,TH1
          JB TF1,LRDOVER
          JB LRDR,TESTLRD

          CLR TR1
          INC R0
          MOV A,TL1
          MOV @R0,A
          INC R0
          MOV A,TH1
          MOV @R0,A ;代碼 2
          INC R1
          ;**************************************

          TEST_DATA:
          MOV TH1,#0
          MOV TL1,#12
          SETB TR1
          CLR TF1

          MOV A,R1
          SUBB A,#101 ;44H
          JC READLOOP_S ;下一代碼
          ;--------------------------------------
          LRDOVER:
          CLR TR1
          SETB EA
          MOV A,R1
          MOV LRDBUF,A ;代碼個數(shù)緩沖
          RET
          ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
          ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
          LRD1SEND:
          CLR EA
          MOV R1,LRDBUF
          MOV R0,#LRDBUF
          MOV A,R1
          JZ LRD_END
          SUBB A,#101 ;72
          JNC LRD_END
          CLR EA
          MOV TH1,#0

          LRD1OUTLOOP:
          CLR TR1
          INC R0
          MOV A,@R0
          CPL A
          MOV TL1,A
          INC R0
          MOV A,@R0
          CPL A
          MOV TH1,A
          SETB TR1
          CLR TF1
          ;--------------------------------------
          LRD1CONT:
          CPL LRD1
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP ;發(fā)送紅外波形 38K HZ
          JNB TF1,LRD1CONT ;紅外前導(dǎo)代碼
          CLR LRD1
          DJNZ R1,SEND_DATA
          LJMP LRD_END

          SEND_DATA:
          ;--------------------------------------

          CLR TR1
          INC R0
          MOV A,@R0
          CPL A
          MOV TL1,A
          INC R0
          MOV A,@R0
          CPL A
          MOV TH1,A
          SETB TR1
          CLR TF1
          DJNZ R1,OUT_1_CODE


          LRD_END:
          CLR TR1
          CLR TF1
          SETB EA
          RET
          OUT_1_CODE:
          JNB TF1,$ ;紅外代碼
          ;--------------------------------------
          LJMP LRD1OUTLOOP
          RET ;取下一個代碼
          ;==========================================================
          ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


          DELAY:
          MOV R7,#200
          DEL_L:
          MOV R6,#30
          DJNZ R6,$
          DJNZ R7,DEL_L
          RET

          DELY_2:
          MOV R7,#250
          DEL_2:
          LJMP DELAY
          DJNZ R7,DEL_2
          MOV R7,#250
          DEL_3: LJMP DEL_2
          DJNZ R7,DEL_3
          RET

          紅外遙控器相關(guān)文章:紅外遙控器原理

          萬能遙控器相關(guān)文章:萬能遙控器代碼




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉