程序是反編譯后整理修改 單片機用的是15w201s 支持掉電喚醒 INT0 INT1 INT4喚醒
兩節CR2016電池供電 電池容量太小 紅外耗電有點大 發射時電壓從6V降到5V甚至更低 電池可能用不了多久
制作出來的實物圖如下:
51hei截圖20210916122711.jpg (61.45 KB, 下載次數: 55)
下載附件
2021-9-16 12:36 上傳
51hei截圖20210916122700.jpg (68.96 KB, 下載次數: 39)
下載附件
2021-9-16 12:36 上傳
51hei截圖20210916122723.jpg (50.05 KB, 下載次數: 45)
下載附件
2021-9-16 12:36 上傳
單片機源程序如下:
- ;==========================================================================
- //發送紅外數據 void ir_send()
- ir_send: MOV set_count_1,#02H; //發送編碼中的引導碼(9ms高電平+4.5ms低電平)
- MOV set_count_2,#9EH;
- SETB irflag ////紅外發射標志
- LCALL TX_TIME; //定時器發送
-
- MOV set_count_1,#01H; //發送編碼中的4.5ms低電平
- MOV set_count_2,#50H;
- CLR irflag //紅外發射標志 低電平則不發射
- LCALL TX_TIME; //定時器發送
-
- MOV ircode,#80H; //發送16位用戶碼的前1-8位
- LCALL ir_sendbyte //紅外發送一個字節數據
-
- MOV ircode,#7FH; //發送16位用戶碼的前9-16位
- LCALL ir_sendbyte //紅外發送一個字節數據
-
- MOV ircode,irdata; //發送8位數據碼
- LCALL ir_sendbyte //紅外發送一個字節數據
-
- MOV A,irdata;
- CPL A ; 取反
- MOV ircode,A //發送8位數據反碼
- LCALL ir_sendbyte //紅外發送一個字節數據
- MOV set_count_1,#00H; //發送編碼中的0.56ms高電平
- MOV set_count_2,#23H;
- SETB irflag //紅外發射標志
- LCALL TX_TIME; //定時器發送
-
- ; SETB IR ;//發射完了關閉紅外發射二極管
- ; RET;
- ; 不加入下面這部分程序 遙控成功概率變低很多
- LCALL DELAY23MS //延時23ms(編碼中的23ms低電平)
- MOV set_count_1,#02H; //發送編碼中的引導碼(9ms高電平+4.5ms低電平)
- MOV set_count_2,#9EH;
- SETB irflag
- LCALL TX_TIME; //定時器發送
- MOV set_count_1,#01H //發送編碼中的4.5ms低電平
- MOV set_count_2,#50H
- CLR irflag
- LCALL TX_TIME; //定時器發送
- MOV set_count_1,#00H //發送編碼中的0.56ms高電平
- MOV set_count_2,#23H;
- SETB irflag
- LCALL TX_TIME; //定時器發送
- SETB IR ;//發射完了關閉紅外發射二極管
- RET;
-
- ;----------------------------------------------------------------------------------
- //紅外發送一個字節數據
- ir_sendbyte: MOV R7,#0x00;
- Q0223: MOV set_count_1,#00H; //發送編碼中的0.56ms高電平
- MOV set_count_2,#23H;
- SETB irflag //紅外發射標志 啟動紅外發射二極管發射
- LCALL TX_TIME; //定時器發送
- MOV A,ircode //判斷紅外編碼最低位,若為1則1.69ms的低電平
- JNB ACC.0,Q024C
- MOV set_count_1,#00H; //為0則0.565ms的低電平
- MOV set_count_2,#82H;
- SJMP Q0252
- Q024C: MOV set_count_1,#00H;
- MOV set_count_2,#0x2B;
- Q0252: CLR irflag //紅外發射標志 低電平則不發射
- LCALL TX_TIME; //定時器發送
- MOV A,ircode //判斷紅外編碼最低位,若為1則1.69ms的低電平
- CLR C
- RRC A //將數據右移,即從低位到高位發送
- MOV ircode ,A
- INC R7
- CJNE R7,#0x08,Q0223
- RET
- ;------------------------------------------------------------------------------------------------
- //定時器發送
- TX_TIME: MOV count_1,#00H; //中斷計數先清0
- MOV count_2,#00H;
- SETB TR0 //開啟定時器0
- Q0232: CLR C //等待發送完
- MOV A,count_2;
- SUBB A,set_count_2;
- MOV A,count_1;
- SUBB A,set_count_1;
-
- JC Q0232
- CLR TR0 //關閉定時器0
- RET;
復制代碼
; LED燈遙控程序
;
; 15W201S 11.0592M
;==========================================================================
;標號==============指令================================地址===機器碼=======
;==========================================================================
count_1 EQU 08H;
count_2 EQU 09H;
set_count_1 EQU 0CH;
set_count_2 EQU 0DH;
irdata EQU 0EH;
ircode EQU 0FH;
keyflag EQU 20H.0; 按鍵標志位 按下=1
irflag EQU 20H.1; 紅外發射標志 發射=1
P5M1 DATA 0xC9 ; P5M1.n,P5M0.n =00--->Standard, 01--->push-pull
P5M0 DATA 0xCA
P5 EQU 0C8H
KA EQU P3.0; 開關
KB EQU P3.2; 變光
KC EQU P3.3; 亮度加
KD EQU P5.4; 亮度減
IR EQU P3.1; 輸出
LED EQU P5.5; 指示燈
INT_CLKO DATA 08FH //外部中斷與時鐘輸出控制寄存器
; INT2 BIT P3.6 //INT2引腳定義
; INT3 BIT P3.5 //INT3引腳定義
INT4 BIT P3.0 //INT4引腳定義
ORG 0000H
LJMP main;
ORG 0003H
LJMP INT_0
;==========================================================================
ORG 000BH
LJMP timer0;
ORG 0013H
LJMP INT_1
; ORG 0053H //INT2中斷入口
; RETI
; ORG 005BH //INT3中斷入口
; RETI
ORG 0083H //INT4中斷入口
RETI
ORG 100H
;==========================================================================
main: MOV SP,#3FH; MOV SP,#0x20;
; ORL INT_CLKO,#10H //(EX2 = 1)使能INT2下降沿中斷
; ORL INT_CLKO,#20H //(EX3 = 1)使能INT3下降沿中斷
ORL INT_CLKO,#40H //(EX4 = 1)使能INT4下降沿中斷
CLR A
MOV P5M1, A ;設置為準雙向口
MOV P5M0, A
LCALL timer0_init; //定時0初始化
MOV count_1,#00H //中斷計數先清0
MOV count_2,#00H
CLR irflag //紅外發射標志先置0
SETB LED;
SETB KA;
SETB KB;
SETB KC;
SETB KD;
;==========================================================================
C01C4: LCALL keyscan; //鍵值掃描
JB keyflag,C01C5 //若有按鍵按下
JNB INT0, $ ;高電平時才進入睡眠
JNB INT1, $ ;高電平時才進入睡眠
CLR IE0 ;外中斷0標志位
CLR IE1 ;外中斷1標志位
SETB EX0 ;INT0 Enable
SETB EX1 ;INT1 Enable
SETB IT0 ;INT0 下降沿中斷
SETB IT1 ;INT1 下降沿中斷
ORL PCON, #0x02;
NOP
NOP
LJMP C01C4
//---------------------------------------------------------------------------
C01C5: CLR LED;
LCALL DELAY6MS;
LCALL ir_send; //發送紅外編碼
JNB KA,$;
JNB KB,$;
LCALL DELAY6MS;
JNB KA,$;
JNB KB,$;
CLR keyflag; //按鍵標志清零
SETB LED;
; MOV R1, #110
SJMP C01C4
//---------------------------------------------------------------------------
//void keyscan() // 按鍵掃描
keyscan:
JB ka,C01EE; //A鍵按下
MOV irdata,#0x01;
SETB keyflag;
RET;
C01EE: JB kb,C01F6; //B鍵按下
MOV irdata,#0x06;
SETB keyflag;
RET;
C01F6: JB kc,C01FE; //C鍵按下
JB KD,C01F7; //D鍵按下
MOV irdata,#0x1E;
SETB keyflag;
RET;
C01F7: MOV irdata,#0x12;
SETB keyflag;
RET
C01FE: ; JB kd,C0206; //D鍵按下
; MOV irdata,#0x1E;
; SETB keyflag;
C0206: RET
;==========================================================================
//定時器0中斷 timer0_interrupt
timer0:
PUSH ACC
INC count_2;
MOV A,count_2;
JNZ Q02B3
INC count_1;
Q02B3: JNB irflag,Q02BA ; //有發射標志,則發射38khz的矩形波
CPL IR;
SJMP Q02BC
Q02BA: SETB IR;//否則不發射,即相當于發射編碼中的低電平
Q02BC: POP ACC
RETI
;==========================================================================
//定時器0初始化
timer0_init: MOV TMOD,#02H //定時0 8位自動重裝模式
MOV TH0,#0F3H; //定時13us,38K紅外矩形波
MOV TL0,#0E6H;
SETB EA
SETB ET0 ;
RET
;========================================================================
INT_1:
CLR EX1 ;INT1 Disable
CLR IE1 ;外中斷1標志位
RETI
;========================================================================
INT_0:
CLR EX0 ;INT0 Disable
CLR IE0 ;外中斷0標志位
RETI
;==========================================================================
//延時
DELAY6MS: ;誤差 -0.018084490741us
MOV R6,#0C2H
DL0:
MOV R5,#54H
DJNZ R5,$
DJNZ R6,DL0
NOP
RET
;==========================================================================
DELAY23MS: ;誤差 -0.054253472225us 11.0592 1T
MOV R7,#38H
DL3:
MOV R6,#0FCH
DL2:
MOV R5,#03H
DJNZ R5,$
DJNZ R6,DL2
DJNZ R7,DL3
MOV R5,#01H
DJNZ R5,$
RET
;==========================================================================
$INCLUDE (TX.ASM)
END;
51hei截圖20210916122649.jpg (47.01 KB, 下載次數: 57)
下載附件
2021-9-16 12:36 上傳
51hei截圖20210916122639.jpg (79.2 KB, 下載次數: 56)
下載附件
2021-9-16 12:36 上傳
51hei截圖20210916122731.jpg (37.62 KB, 下載次數: 58)
下載附件
2021-9-16 12:36 上傳
51hei.png (7.29 KB, 下載次數: 42)
下載附件
2021-9-16 16:11 上傳
上圖Keil代碼下載:
15W201S 15W204S紅外遙控器 - 掉電喚醒.rar
(30.89 KB, 下載次數: 31)
2021-9-16 12:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|