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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3406|回復: 4
打印 上一主題 下一主題
收起左側

單片機紅外遙控器匯編程序 控制LED燈 支持掉電喚醒

[復制鏈接]
跳轉到指定樓層
樓主
程序是反編譯后整理修改 單片機用的是15w201s  支持掉電喚醒  INT0 INT1 INT4喚醒

兩節CR2016電池供電 電池容量太小  紅外耗電有點大  發射時電壓從6V降到5V甚至更低  電池可能用不了多久

制作出來的實物圖如下:

單片機源程序如下:


  1. ;==========================================================================
  2. //發送紅外數據  void ir_send()
  3. ir_send:           MOV   set_count_1,#02H; //發送編碼中的引導碼(9ms高電平+4.5ms低電平)  
  4.                    MOV   set_count_2,#9EH;                  
  5.                    SETB  irflag  ////紅外發射標志      
  6.                                    LCALL TX_TIME;   //定時器發送
  7.                                                 
  8.                    MOV   set_count_1,#01H; //發送編碼中的4.5ms低電平
  9.                    MOV   set_count_2,#50H;                 
  10.                    CLR   irflag      //紅外發射標志   低電平則不發射   
  11.                                    LCALL TX_TIME;    //定時器發送  
  12.                                                 
  13.                    MOV   ircode,#80H;   //發送16位用戶碼的前1-8位   
  14.                    LCALL ir_sendbyte    //紅外發送一個字節數據
  15.                                                 
  16.                    MOV   ircode,#7FH;   //發送16位用戶碼的前9-16位
  17.                    LCALL ir_sendbyte    //紅外發送一個字節數據  
  18.                                                 
  19.                    MOV   ircode,irdata; //發送8位數據碼     
  20.                    LCALL ir_sendbyte    //紅外發送一個字節數據
  21.                                                 
  22.                    MOV   A,irdata;
  23.                    CPL   A ;              取反                  
  24.                    MOV   ircode,A       //發送8位數據反碼      
  25.                    LCALL ir_sendbyte    //紅外發送一個字節數據  

  26.                    MOV   set_count_1,#00H; //發送編碼中的0.56ms高電平
  27.                    MOV   set_count_2,#23H;               
  28.                    SETB  irflag        //紅外發射標志
  29.                                    LCALL TX_TIME;   //定時器發送   
  30.   
  31. ;                                   SETB  IR    ;//發射完了關閉紅外發射二極管  
  32. ;                       RET;
  33. ;   不加入下面這部分程序 遙控成功概率變低很多               
  34.                    LCALL DELAY23MS   //延時23ms(編碼中的23ms低電平)                  
  35.                    MOV   set_count_1,#02H;  //發送編碼中的引導碼(9ms高電平+4.5ms低電平)  
  36.                    MOV   set_count_2,#9EH;           
  37.                    SETB  irflag  
  38.                                    LCALL TX_TIME;  //定時器發送                                                           
  39.                    MOV   set_count_1,#01H    //發送編碼中的4.5ms低電平  
  40.                    MOV   set_count_2,#50H                  
  41.                    CLR   irflag   
  42.                    LCALL TX_TIME;  //定時器發送   
  43.                    MOV   set_count_1,#00H     //發送編碼中的0.56ms高電平   
  44.                    MOV   set_count_2,#23H;                    
  45.                    SETB  irflag  
  46.                    LCALL TX_TIME;  //定時器發送                             
  47.                                    SETB  IR    ;//發射完了關閉紅外發射二極管  
  48.                        RET;
  49.                                                                                                 
  50. ;----------------------------------------------------------------------------------
  51. //紅外發送一個字節數據
  52. ir_sendbyte:       MOV   R7,#0x00;
  53. Q0223:             MOV   set_count_1,#00H; //發送編碼中的0.56ms高電平
  54.                    MOV   set_count_2,#23H;                 
  55.                    SETB  irflag   //紅外發射標志  啟動紅外發射二極管發射   
  56.                                    LCALL TX_TIME;  //定時器發送
  57.                                    MOV   A,ircode        //判斷紅外編碼最低位,若為1則1.69ms的低電平
  58.                    JNB   ACC.0,Q024C               
  59.                    MOV   set_count_1,#00H;    //為0則0.565ms的低電平  
  60.                    MOV   set_count_2,#82H;                  
  61.                    SJMP  Q0252                        
  62. Q024C:             MOV   set_count_1,#00H;                    
  63.                    MOV   set_count_2,#0x2B;               
  64. Q0252:             CLR   irflag    //紅外發射標志    低電平則不發射   
  65.                             LCALL TX_TIME;   //定時器發送
  66.                                    MOV   A,ircode        //判斷紅外編碼最低位,若為1則1.69ms的低電平  
  67.                    CLR   C                       
  68.                    RRC   A       //將數據右移,即從低位到高位發送           
  69.                    MOV   ircode ,A                     
  70.                    INC   R7                          
  71.                    CJNE  R7,#0x08,Q0223              
  72.                    RET  
  73. ;------------------------------------------------------------------------------------------------                                                               
  74. //定時器發送                                            
  75. TX_TIME:           MOV   count_1,#00H;  //中斷計數先清0               
  76.                    MOV   count_2,#00H;                  
  77.                    SETB  TR0          //開啟定時器0            
  78. Q0232:             CLR   C            //等待發送完            
  79.                    MOV   A,count_2;
  80.                    SUBB  A,set_count_2;
  81.                    MOV   A,count_1;
  82.                    SUBB  A,set_count_1;
  83.         
  84.                    JC    Q0232                     
  85.                    CLR   TR0          //關閉定時器0              
  86.                                    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;




上圖Keil代碼下載: 15W201S 15W204S紅外遙控器 - 掉電喚醒.rar (30.89 KB, 下載次數: 31)

評分

參與人數 1黑幣 +70 收起 理由
admin + 70 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:72088 發表于 2021-9-17 21:00 | 只看該作者
有學習功能么,就是兩個遙控對著紅外線管學習
回復

使用道具 舉報

板凳
ID:88256 發表于 2021-9-17 21:11 | 只看該作者
電路板可以去免費打樣雙面板啊,這樣更精致美觀
回復

使用道具 舉報

地板
ID:261025 發表于 2021-9-18 11:17 | 只看該作者
新鄉家電維修 發表于 2021-9-17 21:00
有學習功能么,就是兩個遙控對著紅外線管學習

沒有  還不會寫
回復

使用道具 舉報

5#
ID:261025 發表于 2021-9-18 11:18 | 只看該作者
hhdsdy 發表于 2021-9-17 21:11
電路板可以去免費打樣雙面板啊,這樣更精致美觀

不做產品就是自己做著玩 用不著打樣  
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品欧美精品系列 | 国产精品视频999 | 日本一区二区高清不卡 | 91欧美| 国产精品不卡 | 午夜视频网站 | 中文字幕日韩欧美一区二区三区 | 欧美一级毛片在线播放 | 精品视频一区二区三区 | 一区二区三区欧美 | 99精品在线免费观看 | 国产欧美日韩一区二区三区在线 | 国产精品国产精品国产专区不片 | 成人乱人乱一区二区三区软件 | 欧美一区二区三区一在线观看 | 成人av观看 | 久久精品视频99 | 日本手机看片 | 在线播放精品视频 | a免费观看 | 免费污视频 | a级毛片毛片免费观看久潮喷 | 久草精品视频 | 黄色网址av | 成人欧美一区二区三区黑人孕妇 | 91传媒在线播放 | 午夜精品网站 | 亚洲免费精品一区 | 免费视频一区 | 国产精品国产三级国产aⅴ浪潮 | 精品欧美乱码久久久久久1区2区 | 色婷婷av一区二区三区软件 | 在线看91| 亚洲精品久久久一区二区三区 | 国产欧美日韩精品一区二区三区 | 澳门永久av免费网站 | 国产一区91在线 | 国产精品视频偷伦精品视频 | 亚洲精品一级 | 欧美在线播放一区 | 日韩中文字幕免费 |