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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STC89C52學習型遙控器源程序

          STC89C52學習型遙控器源程序

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

          做的,可存八個紅外遙控信息,只要再把按鍵用定時器中斷2完成就可以用于商業(yè)生產(chǎn).

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

          RXIN BIT P2.0
          TXZAI BIT P2.2
          TXOUT BIT P2.1
          KEY_SIGN BIT 20H ;為0按鍵錯誤,為1按鍵正確
          RXTX_SIGN BIT 21H ;為0是為發(fā)射狀態(tài),為1是為接收狀態(tài)

          ISP_DATA DATA 0E2H ;ISP功能寄存器定義
          ISP_ADDRH DATA 0E3H
          ISP_ADDRL DATA 0E4H
          ISP_CMD DATA 0E5H
          ISP_TRIG DATA 0E6H
          ISP_CONTR DATA 0E7H

          ISP_CMD_NO EQU 0 ;操作數(shù)
          ISP_CMD_READ EQU 1
          ISP_CMD_PROGRAM EQU 2
          ISP_CMD_ERASE EQU 3

          WAIT_TIME EQU 1 ;等待時間

          ZHIL EQU 30H
          ZHIH EQU 31H
          GESHU EQU 32H
          JISHU EQU 33H
          KEY_WORD EQU 34H
          KEY_VALUE EQU 35H
          ADDRH EQU 36H
          ADDRL EQU 37H
          TX_GESHU EQU 38H


          ORG 0000H
          LJMP START
          ORG 000BH
          LJMP T0IN
          ORG 001BH
          LJMP T1IN

          ORG 0100H
          START: MOV SP,#10H
          CLR RXTX_SIGN
          LJMP KEY_MAIN


          KEY_MAIN:LCALL SCAN_KEY ;檢測有沒有單個按鍵按下
          MOV A,KEY_WORD
          CJNE A,#00H,NEXT1
          LJMP KEY_MAIN
          NEXT1: JNB KEY_SIGN,KEY_MAIN
          MOV KEY_VALUE,A

          LCALL RE_DELAY ;消抖時間20ms

          LCALL SCAN_KEY ;是否依然是按下的
          MOV A,KEY_WORD
          CJNE A,#00H,NEXT2
          LJMP KEY_MAIN
          NEXT2: JNB KEY_SIGN,KEY_MAIN
          CJNE A,KEY_VALUE,KEY_MAIN

          RELEASE: LCALL SCAN_KEY ;查看是否放開按鍵了
          MOV A,KEY_WORD
          CJNE A,#00H,RELEASE



          MOV DPTR,#TAB ;執(zhí)行相應(yīng)的程式
          CLR C
          MOV A,KEY_VALUE
          ADD A,KEY_VALUE
          JMP @A+DPTR

          TAB: AJMP KEY_0
          AJMP KEY_1
          AJMP KEY_2
          AJMP KEY_3
          AJMP KEY_4
          AJMP KEY_5
          AJMP KEY_6
          AJMP KEY_7
          AJMP KEY_8
          AJMP KEY_9
          AJMP KEY_10
          AJMP KEY_11
          AJMP KEY_12
          AJMP KEY_13
          AJMP KEY_14
          AJMP KEY_15
          AJMP KEY_16

          KEY_0: LJMP KEY_MAIN ;無效的按健值

          KEY_1: JNB RXTX_SIGN,T1RX ;接收發(fā)送鍵設(shè)定鍵,P1燈亮為接收存儲狀態(tài),燈滅是為發(fā)射狀態(tài)
          T1TX: CLR RXTX_SIGN
          MOV P1,#0FFH
          LJMP KEY_MAIN
          T1RX: SETB RXTX_SIGN
          MOV P1,#00H
          LJMP KEY_MAIN

          KEY_2: MOV ADDRH,#20H
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY2_RX
          KEY2_TX:LJMP TX_START
          KEY2_RX:LJMP RX_START


          KEY_3: MOV ADDRH,#22H
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY3_RX
          KEY3_TX:LJMP TX_START
          KEY3_RX:LJMP RX_START


          KEY_4: MOV ADDRH,#24H
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY4_RX
          KEY4_TX:LJMP TX_START
          KEY4_RX:LJMP RX_START


          KEY_5: MOV ADDRH,#26H
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY5_RX
          KEY5_TX:LJMP TX_START
          KEY5_RX:LJMP RX_START


          KEY_6: MOV ADDRH,#28H
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY6_RX
          KEY6_TX:LJMP TX_START
          KEY6_RX:LJMP RX_START


          KEY_7: MOV ADDRH,#2AH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY7_RX
          KEY7_TX:LJMP TX_START
          KEY7_RX:LJMP RX_START


          KEY_8: MOV ADDRH,#2CH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY8_RX
          KEY8_TX:LJMP TX_START
          KEY8_RX:LJMP RX_START


          KEY_9: MOV ADDRH,#2EH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY9_RX
          KEY9_TX:LJMP TX_START
          KEY9_RX:LJMP RX_START

          KEY_10: MOV ADDRH,#2EH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY10_RX
          KEY10_TX:LJMP TX_START
          KEY10_RX:LJMP RX_START


          KEY_11: MOV ADDRH,#2EH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY11_RX
          KEY11_TX:LJMP TX_START
          KEY11_RX:LJMP RX_START

          KEY_12: MOV ADDRH,#2EH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY12_RX
          KEY12_TX:LJMP TX_START
          KEY12_RX:LJMP RX_START


          KEY_13: MOV ADDRH,#2EH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY13_RX
          KEY13_TX:LJMP TX_START
          KEY13_RX:LJMP RX_START


          KEY_14: MOV ADDRH,#2EH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY14_RX
          KEY14_TX:LJMP TX_START
          KEY14_RX:LJMP RX_START


          KEY_15: MOV ADDRH,#2EH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY15_RX
          KEY15_TX:LJMP TX_START
          KEY15_RX:LJMP RX_START


          KEY_16: MOV ADDRH,#2EH
          MOV ADDRL,#00H
          JB RXTX_SIGN,KEY16_RX
          KEY16_TX:LJMP TX_START
          KEY16_RX:LJMP RX_START

          SCAN_KEY:CLR KEY_SIGN
          MOV KEY_WORD,#00H


          KEY1: MOV P3,#11111110B ;第一行
          JB P3.4,KEY2
          JB KEY_SIGN,KEYWRONG1
          MOV KEY_WORD,#1
          SETB KEY_SIGN
          KEY2: JB P3.5,KEY3
          JB KEY_SIGN,KEYWRONG1
          MOV KEY_WORD,#2
          SETB KEY_SIGN
          KEY3: JB P3.6,KEY4
          JB KEY_SIGN,KEYWRONG1
          MOV KEY_WORD,#3
          SETB KEY_SIGN
          KEY4: JB P3.7,KEY5
          JB KEY_SIGN,KEYWRONG1
          MOV KEY_WORD,#4
          SETB KEY_SIGN
          LJMP KEY5
          KEYWRONG1: LJMP KEYWRONG

          KEY5: MOV P3,#11111101B ;第二行
          JB P3.4,KEY6
          JB KEY_SIGN,KEYWRONG2
          MOV KEY_WORD,#5
          SETB KEY_SIGN
          KEY6: JB P3.5,KEY7
          JB KEY_SIGN,KEYWRONG2
          MOV KEY_WORD,#6
          SETB KEY_SIGN
          KEY7: JB P3.6,KEY8
          JB KEY_SIGN,KEYWRONG2
          MOV KEY_WORD,#7
          SETB KEY_SIGN
          KEY8: JB P3.7,KEY9
          JB KEY_SIGN,KEYWRONG2
          MOV KEY_WORD,#8
          SETB KEY_SIGN
          LJMP KEY9

          KEYWRONG2:LJMP KEYWRONG

          KEY9: MOV P3,#11111011B ;第三行
          JB P3.4,KEY10
          JB KEY_SIGN,KEYWRONG3
          MOV KEY_WORD,#9
          SETB KEY_SIGN
          KEY10: JB P3.5,KEY11
          JB KEY_SIGN,KEYWRONG3
          MOV KEY_WORD,#10
          SETB KEY_SIGN
          KEY11: JB P3.6,KEY12
          JB KEY_SIGN,KEYWRONG3
          MOV KEY_WORD,#11
          SETB KEY_SIGN
          KEY12: JB P3.7,KEY13
          JB KEY_SIGN,KEYWRONG3
          MOV KEY_WORD,#12
          SETB KEY_SIGN
          LJMP KEY13

          KEYWRONG3:LJMP KEYWRONG

          KEY13: MOV P3,#11110111B ;第四行
          JB P3.4,KEY14
          JB KEY_SIGN,KEYWRONG4
          MOV KEY_WORD,#13
          SETB KEY_SIGN
          KEY14: JB P3.5,KEY15
          JB KEY_SIGN,KEYWRONG4
          MOV KEY_WORD,#14
          SETB KEY_SIGN
          KEY15: JB P3.6,KEY16
          JB KEY_SIGN,KEYWRONG4
          MOV KEY_WORD,#15
          SETB KEY_SIGN
          KEY16: JB P3.7,SCAN_END
          JB KEY_SIGN,KEYWRONG4
          MOV KEY_WORD,#16
          SETB KEY_SIGN
          LJMP SCAN_END

          KEYWRONG4: LJMP KEYWRONG

          KEYWRONG:CLR KEY_SIGN
          SCAN_END:RET

          RE_DELAY:MOV R7,#5
          DE2:MOV R6,#10
          DE1:MOV R5,#200
          DJNZ R5,$
          DJNZ R6,DE1
          DJNZ R7,DE2
          RET


          RX_START: CLR P2.4 ;接收紅外信號,存入外部擴展寄存器0~256
          CLR P2.6
          CLR P2.7
          CLR P2.2
          CLR TXOUT
          MOV R1,#00H
          MOV R0,#00H
          MOV TMOD,#00010001B
          MOV TH0,#00H
          MOV TL0,#00H
          MOV TH1,#00H
          MOV TL1,#00H
          CLR ET0
          CLR ET1
          CLR EA
          CLR TR0
          CLR TR1
          LJMP RX_MAIN

          RX_MAIN: MOV R0,#00H
          JB RXIN,$
          SETB TR0

          JUDGE1: JB TF0,RXEND
          JNB RXIN,JUDGE1
          CLR TR0
          SETB TR1
          MOV A,TL0
          MOVX @R0,A
          INC R0
          MOV A,TH0
          MOVX @R0,A
          INC R0
          MOV TL0,#00H
          MOV TH0,#00H
          INC R1
          JUDGE2: JB TF1,RXEND
          JB RXIN,JUDGE2
          CLR TR1
          SETB TR0
          MOV A,TL1
          MOVX @R0,A
          INC R0
          MOV A,TH1
          MOVX @R0,A
          INC R0
          MOV TL1,#00H
          MOV TH1,#00H
          INC R1
          AJMP JUDGE1

          RXEND: CLR TR0
          CLR TR1
          CLR TF0
          CLR TF1
          MOV TL0,#00H
          MOV TH0,#00H
          MOV TL1,#00H
          MOV TH1,#00H
          MOV GESHU,R1


          MOV R1,GESHU ;取反轉(zhuǎn)換重新存入外部擴展寄存器
          MOV R0,#00H
          LOOP_CPL: MOVX A,@R0
          CPL A
          MOVX @R0,A
          INC R0
          MOVX A,@R0
          CPL A
          MOVX @R0,A
          INC R0
          DJNZ R1,LOOP_CPL
          LJMP ISP_STORE

          ISP_STORE: LCALL ISP_ERASE


          MOV ISP_DATA,GESHU ;將個數(shù)輸入到ISP_EEPROM的第一位
          MOV ISP_ADDRH,ADDRH
          MOV ISP_ADDRL,ADDRL
          CLR EA
          MOV ISP_CONTR,#WAIT_TIME
          ORL ISP_CONTR,#10000000B
          MOV ISP_CMD,#ISP_CMD_PROGRAM
          MOV ISP_TRIG,#46H
          MOV ISP_TRIG,#0B9H
          NOP


          MOV R1,GESHU
          MOV R0,#00H
          LOOP_WRITE: LCALL BYTE_WRITE ;將擴展寄存器中的計時值依次放入ISP_EEPROM第二位開始的存儲器中
          INC R0
          LCALL BYTE_WRITE
          INC R0
          DJNZ R1,LOOP_WRITE

          MOV ISP_CMD,#00H ;ISP指令清零,防止誤觸發(fā)
          MOV ISP_TRIG,#00H
          MOV ISP_ADDRH,#00H
          MOV ISP_ADDRL,#00H
          mov p1,geshu

          LJMP KEY_MAIN

          BYTE_WRITE: MOVX A,@R0
          MOV ISP_DATA,A
          MOV ISP_ADDRH,ADDRH
          INC R0
          MOV ISP_ADDRL,R0
          DEC R0
          CLR EA
          MOV ISP_CONTR,#WAIT_TIME
          ORL ISP_CONTR,#10000000B
          MOV ISP_CMD,#ISP_CMD_PROGRAM
          MOV ISP_TRIG,#46H
          MOV ISP_TRIG,#0B9H
          NOP
          RET

          ISP_ERASE: MOV ISP_ADDRH,ADDRH
          MOV ISP_ADDRL,ADDRL
          CLR EA
          MOV ISP_CONTR,#WAIT_TIME
          ORL ISP_CONTR,#10000000B
          MOV ISP_CMD,#ISP_CMD_ERASE
          MOV ISP_TRIG,#46H
          MOV ISP_TRIG,#0B9H
          NOP
          RET


          TX_START: MOV ISP_ADDRH,ADDRH ;取出第一位的個數(shù)
          MOV ISP_ADDRL,ADDRL
          CLR EA
          MOV ISP_CONTR,#WAIT_TIME
          ORL ISP_CONTR,#10000000B
          MOV ISP_CMD,#ISP_CMD_READ
          MOV ISP_TRIG,#46H
          MOV ISP_TRIG,#0B9H
          NOP
          MOV ISP_CMD,#00H ;ISP指令清零,防止誤觸發(fā)
          MOV ISP_TRIG,#00H
          MOV ISP_ADDRH,#00H
          MOV ISP_ADDRL,#00H

          MOV A,ISP_DATA ;為0FF則是錯誤的,回去,不為0FF則繼續(xù)
          CJNE A,#0FFH,ISP_READ
          LJMP KEY_MAIN


          ISP_READ: MOV GESHU,ISP_DATA
          MOV R1,GESHU
          MOV R0,#00H
          LOOP_READ: LCALL BYTE_READ
          INC R0
          LCALL BYTE_READ
          INC R0
          DJNZ R1,LOOP_READ
          LJMP TX_EXROM


          BYTE_READ: INC R0
          MOV ISP_ADDRH,ADDRH
          MOV ISP_ADDRL,R0
          DEC R0
          CLR EA
          MOV ISP_CONTR,#WAIT_TIME
          ORL ISP_CONTR,#10000000B
          MOV ISP_CMD,#ISP_CMD_READ
          MOV ISP_TRIG,#46H
          MOV ISP_TRIG,#0B9H
          NOP
          MOV A,ISP_DATA
          MOVX @R0,A
          RET


          TX_EXROM: MOV TMOD,#00010010B
          MOV TH0,#0F4H
          MOV TL0,#0F4H
          MOV R1,GESHU
          MOV R0,#00H
          MOVX A,@R0
          MOV TL1,A
          INC R0
          MOVX A,@R0
          MOV TH1,A
          INC R0
          DEC R1
          MOVX A,@R0
          MOV ZHIL,A
          INC R0
          MOVX A,@R0
          MOV ZHIH,A
          INC R0
          DEC R1

          SETB ET1
          SETB ET0
          SETB EA
          SETB TR1
          SETB TR0
          CLR TXOUT

          MAIN2:CJNE R1,#00H,MAIN2
          CLR TXOUT
          mov p1,#55h
          LJMP KEY_MAIN


          T0IN:CPL TXZAI
          RETI

          T1IN: MOV TL1,ZHIL
          MOV TH1,ZHIH
          JB TR0,NEXTT1
          SETB TR0
          LJMP NEXTT
          NEXTT1:CLR TR0
          CLR TXZAI

          NEXTT:CPL TXOUT
          MOVX A,@R0
          MOV ZHIL,A
          INC R0
          MOVX A,@R0
          MOV ZHIH,A
          INC R0
          DJNZ R1,OUTTI
          CLR TR1
          CLR TR0
          CLR TXZAI
          CLR TXOUT
          OUTTI:RETI

          DELAYXMS:MOV R7,#255
          DEL1:MOV R6,#4
          DEL2:MOV R5,#5
          DJNZ R5,$
          DJNZ R6,DEL2
          DJNZ R7,DEL1
          RET

          DELAYX2MS:MOV R7,#255
          DEL12:MOV R6,#50
          DEL22:MOV R5,#50
          DJNZ R5,$
          DJNZ R6,DEL22
          DJNZ R7,DEL12
          RET


          END



          關(guān)鍵詞: 源程序 遙控器 學習型 STC89C52

          評論


          相關(guān)推薦

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

          關(guān)閉