⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 红外线发射.lst

📁 红外线遥控Proteus仿真电路 发射接收程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V9.00   红蚠线发蒧                                                            07/22/2011 12:24:18 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE 红蚠线发蒧
OBJECT MODULE PLACED IN 红外线发射.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 红外线发射.c BROWSE DEBUG OBJECTEXTEND CODE

line level    source

   1          /***************************************************************
   2                  作品:红外线发射
   3            单片机:STC89C52RC
   4              晶振:12M
   5          编译环境:Keil uVision4 V9.00
   6          ***************************************************************/
   7          //
   8          //      发射引脚(接PNP三极管b极)
   9          //      PNP三极管e极接2Ω电阻,c极接红外发射管
  10               
  11          #include <REG51.h>
  12          #include <intrins.h>
  13          #define uchar unsigned char 
  14          #define uint  unsigned int 
  15          
  16          #define SBM   0x80                //识别码
  17          
  18          #define m9    (65536-9000)            //约9mS
  19          #define m4_5  (65536-4500)            //约4.5mS
  20          #define m1_6  (65536-1630)            //约1.65mS
  21          #define m_65  (65536-580)             //约0.65mS
  22          #define m_56  (65536-560)             //约0.56mS
  23          #define m40   (65536-40000)       //约40mS
  24          #define m56   (65536-56000)       //56mS
  25          #define m2_25 (65536-2250)        //约2.25mS
  26          
  27          sbit IR  = P3^6;                                  //定义发射引脚(接PNP三极管基极)
  28          sbit LED = P3^7;                                  //发射指示灯
  29          
  30          uchar KEY(void);
  31          void  SanZhuan(void);
  32          void  ZZ(uchar x);
  33          void  Z0(uchar temp);
  34          void  TT0(bit BT,uint x);
  35          void  YS(uchar time);
  36          
  37          /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  38          函数功能:主函数
  39          ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  40          void main(void)
  41          { 
  42   1      
  43   1        TMOD = 0x01;         //T0 16位工作方式
  44   1        IR=1;                            //发射端口常态为高电平
  45   1      
  46   1        while(1) 
  47   1        {
  48   2         SanZhuan();
  49   2        }
  50   1      }
  51          /***************************************************************
  52          函数功能:             4×4矩阵键盘
  53                                     键值                    
  54          P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 
  55          │     │    │    │    │    │    │    │    ┃
C51 COMPILER V9.00   红蚠线发蒧                                                            07/22/2011 12:24:18 PAGE 2   

  56          │     │    │    └────13   14   15   16   ┃   
  57          │     │    └─────────9    10   11   12   ┃   
  58          │     └──────────────5    6    7    8    ┃   
  59          └────────────────────1    2    3    4    ┃  
  60          ***************************************************************/
  61          uchar KEY(void)
  62          {
  63   1       uchar H,L;            //行值,列值
  64   1       H=0;
  65   1       L=0;
  66   1       P1 = 0xf0;            //将键盘端口行值设为1,列值设为0
  67   1       if(P1!= 0xf0)         //检测是否有按键按下,如果有则hangval必不为0x0f
  68   1         {
  69   2          YS(10);            //按键去抖动,延时10毫秒
  70   2          if(P1!=0xf0)       //确实有按键按下
  71   2            {
  72   3             H  = P1&0xf0;   //按键后得到按键的行标志位,将行标志位赋值给hangval
  73   3             P1 = 0x0f;      //翻转键盘接口输出
  74   3             L  = P1&0x0f;   //得到列标志位
  75   3            }
  76   2              return (H+L);
  77   2         }
  78   1        return 0;
  79   1      }
  80          /***************************************************************
  81          函数功能:散转程序
  82          入口参数:v
  83          //
  84          //  13 14 15 16
  85          //  9  10 11 12
  86          //  5  6  7  8
  87          //  1  2  3  4
  88          ***************************************************************/
  89          void SanZhuan(void)
  90          {
  91   1       uchar v;
  92   1       v = KEY();
  93   1       
  94   1       switch(v)
  95   1       {
  96   2        case 0x77:ZZ(0x01);v=0;break;         //"  "
  97   2        case 0xb7:ZZ(0x02);v=0;break;         //"  "
  98   2        case 0xd7:ZZ(0x03);v=0;break;         //"  "
  99   2        case 0xe7:ZZ(0x04);v=0;break;         //"  "
 100   2        case 0x7b:ZZ(0x05);v=0;break;         //"  "
 101   2        case 0xbb:ZZ(0x06);v=0;break;         //"  "
 102   2        case 0xdb:ZZ(0x07);v=0;break;         //"  "
 103   2        case 0xeb:ZZ(0x08);v=0;break;         //"  "
 104   2        case 0x7d:ZZ(0x09);v=0;break;         //"  "
 105   2        case 0xbd:ZZ(0x10);v=0;break;         //"  "
 106   2        case 0xdd:ZZ(0x11);v=0;break;         //"  "
 107   2        case 0xed:ZZ(0x12);v=0;break;         //"  "
 108   2        case 0x7e:ZZ(0x13);v=0;break;         //"  "
 109   2        case 0xbe:ZZ(0x14);v=0;break;         //"  "
 110   2        case 0xde:ZZ(0x15);v=0;break;         //"  "
 111   2        case 0xee:ZZ(0x16);v=0;break;         //"  "
 112   2        default:v=0;
 113   2       }
 114   1      }
 115          /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
 116          函数功能:发送主程序
 117          ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
C51 COMPILER V9.00   红蚠线发蒧                                                            07/22/2011 12:24:18 PAGE 3   

 118          void ZZ(uchar x)
 119          { 
 120   1        TT0(1,m9);               //高电平9mS
 121   1        TT0(0,m4_5);         //低电平4.5mS
 122   1      
 123   1        /*┈ 发送4帧数据 ┈*/
 124   1        Z0(SBM);                                                                                                                                     
 125   1        Z0(~SBM);
 126   1        Z0(x);
 127   1        Z0(~x);
 128   1      
 129   1        /*┈┈ 结束码 ┈┈*/
 130   1        TT0(1,m_65);
 131   1        TT0(0,m40);
 132   1      
 133   1        /*┈┈ 重复码 ┈┈*/
 134   1        while(KEY())
 135   1         {
 136   2              TT0(1,m9);
 137   2              TT0(0,m2_25);
 138   2      
 139   2              TT0(1,m_56);
 140   2              TT0(0,m40);
 141   2                      TT0(0,m56);
 142   2                      
 143   2                      LED = !LED;               //指示灯                                        
 144   2          }
 145   1      
 146   1         LED = 1;               
 147   1      
 148   1      }
 149          /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
 150          函数功能:单帧发送程序
 151          入口参数:1帧数据
 152          ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
 153          void Z0(uchar temp)
 154          { 
 155   1        uchar v;
 156   1        for (v=0;v<8;v++)                     //循环8次移位 
 157   1             {     
 158   2                       TT0(1,m_65);                   //高电平0.65mS         
 159   2                               if(temp&0x01) TT0(0,m1_6); //发送最低位
 160   2                               else          TT0(0,m_56);     
 161   2                               temp >>= 1;                //右移一位 
 162   2              }    
 163   1      }
 164          
 165          /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
 166          函数功能:38KHz脉冲发射 + 延时程序
 167          入口参数:(是否发射脉冲,延时约 x (uS))
 168          ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
 169          void TT0(bit BT,uint x)
 170          {
 171   1        TH0 = x>>8;               //输入T0初始值
 172   1        TL0 = x;
 173   1        TF0=0;                                //清0
 174   1        TR0=1;                                //启动定时器0
 175   1        if(BT == 0) while(!TF0);      //BT=0时不发射38KHz脉冲只延时;BT=1发射38KHz脉冲且延时;
 176   1        else while(1)                     //38KHz脉冲,占空比5:26
 177   1               {
 178   2                        IR = 0;
 179   2                        if(TF0)break;
C51 COMPILER V9.00   红蚠线发蒧                                                            07/22/2011 12:24:18 PAGE 4   

 180   2                    if(TF0)break;
 181   2                        IR = 1;
 182   2                    if(TF0)break;
 183   2                    if(TF0)break;
 184   2                    if(TF0)break;
 185   2                        if(TF0)break;
 186   2                    if(TF0)break;
 187   2                    if(TF0)break;
 188   2                    if(TF0)break;
 189   2                    if(TF0)break;
 190   2                    if(TF0)break;
 191   2                        if(TF0)break;
 192   2                       }
 193   1        TR0=0;                                //关闭定时器0
 194   1        TF0=0;                                //标志位溢出则清0
 195   1      
 196   1        IR =1;                                //脉冲停止后,发射端口常态为高电平
 197   1      }
 198          /***************************************************************
 199          函数功能:按键消抖    延时程序
 200          入口参数:1ms×time       (晶振=12MHz)
 201          ***************************************************************/
 202          void YS(uchar time)
 203          {
 204   1           uchar i,j;
 205   1               for(i=0; i<time; i++)
 206   1           for(j=0; j<247; j++)_nop_();
 207   1      }
C51 COMPILER V9.00   红蚠线发蒧                                                            07/22/2011 12:24:18 PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION main (BEGIN)
                                           ; SOURCE LINE # 40
                                           ; SOURCE LINE # 41
                                           ; SOURCE LINE # 43
0000 758901            MOV     TMOD,#01H
                                           ; SOURCE LINE # 44
0003 D2B6              SETB    IR
0005         ?C0001:
                                           ; SOURCE LINE # 46
                                           ; SOURCE LINE # 47
                                           ; SOURCE LINE # 48
0005 120000      R     LCALL   SanZhuan
                                           ; SOURCE LINE # 49
0008 80FB              SJMP    ?C0001
             ; FUNCTION main (END)

             ; FUNCTION KEY (BEGIN)
                                           ; SOURCE LINE # 61
                                           ; SOURCE LINE # 62
                                           ; SOURCE LINE # 64
0000 E4                CLR     A
0001 F500        R     MOV     H,A
                                           ; SOURCE LINE # 65
0003 F500        R     MOV     L,A
                                           ; SOURCE LINE # 66
0005 7590F0            MOV     P1,#0F0H
                                           ; SOURCE LINE # 67
0008 E590              MOV     A,P1
000A 64F0              XRL     A,#0F0H
000C 6020              JZ      ?C0004
                                           ; SOURCE LINE # 68
                                           ; SOURCE LINE # 69
000E 7F0A              MOV     R7,#0AH
0010 120000      R     LCALL   _YS
                                           ; SOURCE LINE # 70
0013 E590              MOV     A,P1
0015 64F0              XRL     A,#0F0H
0017 600F              JZ      ?C0005
                                           ; SOURCE LINE # 71
                                           ; SOURCE LINE # 72
0019 E590              MOV     A,P1
001B 54F0              ANL     A,#0F0H
001D F500        R     MOV     H,A
                                           ; SOURCE LINE # 73
001F 75900F            MOV     P1,#0FH
                                           ; SOURCE LINE # 74
0022 E590              MOV     A,P1
0024 540F              ANL     A,#0FH
0026 F500        R     MOV     L,A
                                           ; SOURCE LINE # 75
0028         ?C0005:
                                           ; SOURCE LINE # 76
0028 E500        R     MOV     A,H
002A 2500        R     ADD     A,L
002C FF                MOV     R7,A
002D 22                RET     
                                           ; SOURCE LINE # 77
002E         ?C0004:
                                           ; SOURCE LINE # 78
C51 COMPILER V9.00   红蚠线发蒧                                                            07/22/2011 12:24:18 PAGE 6   

002E 7F00              MOV     R7,#00H
                                           ; SOURCE LINE # 79
0030         ?C0006:
0030 22                RET     
             ; FUNCTION KEY (END)

             ; FUNCTION SanZhuan (BEGIN)
                                           ; SOURCE LINE # 89
                                           ; SOURCE LINE # 90
                                           ; SOURCE LINE # 92
0000 120000      R     LCALL   KEY
;---- Variable 'v' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 94
0003 EF                MOV     A,R7
0004 120000      E     LCALL   ?C?CCASE
0007 0000        R     DW      ?C0008
0009 77                DB      077H
000A 0000        R     DW      ?C0012
000C 7B                DB      07BH
000D 0000        R     DW      ?C0016
000F 7D                DB      07DH
0010 0000        R     DW      ?C0020
0012 7E                DB      07EH
0013 0000        R     DW      ?C0009
0015 B7                DB      0B7H
0016 0000        R     DW      ?C0013
0018 BB                DB      0BBH
0019 0000        R     DW      ?C0017
001B BD                DB      0BDH
001C 0000        R     DW      ?C0021
001E BE                DB      0BEH
001F 0000        R     DW      ?C0010
0021 D7                DB      0D7H
0022 0000        R     DW      ?C0014
0024 DB                DB      0DBH
0025 0000        R     DW      ?C0018
0027 DD                DB      0DDH
0028 0000        R     DW      ?C0022
002A DE                DB      0DEH
002B 0000        R     DW      ?C0011
002D E7                DB      0E7H
002E 0000        R     DW      ?C0015
0030 EB                DB      0EBH
0031 0000        R     DW      ?C0019
0033 ED                DB      0EDH
0034 0000        R     DW      ?C0023
0036 EE                DB      0EEH
0037 0000              DW      00H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -