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

📄 遥控编码c编写.lst

📁 单片机红外遥控发送接收仿真
💻 LST
字号:
C51 COMPILER V7.06   襙控_嗦隒_郷_                                                         11/15/2009 01:47:48 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 襙控_嗦隒_郷_
OBJECT MODULE PLACED IN 遥控编码c编写.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 遥控编码c编写.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg51.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          #define uintlong  unsigned long 
   5          
   6          sbit p3_0=P3^0;
   7          sbit p2_1=P2^1;
   8          
   9          //sbit out=PSW^7;              //位的等同方式
  10          //sfr cy=PSW^7;
  11          sbit p1_0=P1^0;
  12          sbit p1_1=P1^1;
  13          sbit p1_2=P1^2;
  14          sbit p1_3=P1^3;
  15          bit out;
  16          
  17          uint keyvalue=0x00,flag_key=0,value1,value2,keycount=0,i,j,flag_set=0,flag_press=0;
  18          uchar code keycode[4]={0x7f,0xbf,0xdf,0xef};
  19          uchar code portvalue[16]={0x07,0x08,0x09,0x0a,0x04,0x05,0x06,0x0b,0x01,0x02,0x03,0x0c,0x0d,0x00,0x0e,0x0f}
             -;
  20          uchar code wy[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  21          
  22          //红外数据部分;
  23          
  24          uchar user1=0x00,user2=0x00;   //用户码标志位0和1
  25          uint count=0,endcount=0;
  26          
  27          uint irdata=0;
  28          
  29          void deltime(void);
  30          void key_scan(void);
  31          void sendirdata(void);
  32          
  33          main(void)
  34          {  
  35   1        EA = 1; //允许CPU中断 
  36   1        TMOD = 0x11; //设定时器0和1为16位模式1 
  37   1        ET0 = 1; //定时器0中断允许 
  38   1        p3_0=1;
  39   1        P1=0xff;
  40   1        TH0 = 0xFF; 
  41   1        TL0 = 0xE4; //设定时值0为38K 也就是每隔28us中断一次  
  42   1        TR0 = 0;
  43   1         while(1)
  44   1          { key_scan();     
  45   2            if(flag_press==1)
  46   2                   {
  47   3                         flag_press=0;
  48   3                 TR0=1;
  49   3              
  50   3                 sendirdata();
  51   3               
  52   3                       }
  53   2              }
  54   1      }
C51 COMPILER V7.06   襙控_嗦隒_郷_                                                         11/15/2009 01:47:48 PAGE 2   

  55          void key_scan(void)
  56          {
  57   1       for(i=0;i<=3;i++)
  58   1                   {
  59   2                         P1=keycode[i];
  60   2                 if(p1_3==0)
  61   2                           {keycount=i*4+0;flag_key=1; break;}
  62   2                         if(p1_2==0)
  63   2                           {keycount=i*4+1;flag_key=1;break;}
  64   2                 if(p1_1==0)
  65   2                           {keycount=i*4+2;flag_key=1;break;}
  66   2                         if(p1_0==0)
  67   2                           {keycount=i*4+3;flag_key=1;break;}
  68   2                       }
  69   1                if(flag_key==1)
  70   1                  { flag_key=0;
  71   2                        value1=P1;
  72   2                        deltime();
  73   2                        value2=P1;
  74   2                        if(value1==value2)
  75   2                              {keyvalue=portvalue[keycount];flag_set=1;flag_press=1;}
  76   2                        while(flag_set)
  77   2                             {value2=P1;
  78   3                                  if(value1!=value2)
  79   3                                         flag_set=0;
  80   3                                  }
  81   2                       }
  82   1      }
  83          void deltime(void)
  84          { uint k;
  85   1        for(k=0;k<=20;k++)
  86   1        {}
  87   1      }
  88          
  89          void time0int(void) interrupt 1 
  90          { 
  91   1        TH0=0xFF; 
  92   1        TL0=0xE4; //设定时值为38K 也就是每隔28us中断一次
  93   1        count++;
  94   1      
  95   1      } 
  96          void sendirdata()
  97          {
  98   1        uchar s=0,datapd=0;
  99   1        //发送9ms起始码的低电平      320 通过接收端得测试得到的数据
 100   1         endcount=320;       
 101   1        p3_0=0;
 102   1        count=0;
 103   1        do{}while(count<endcount);
 104   1      
 105   1        //发送4.5ms的结果码高电平
 106   1        endcount=180;                 //160通过接收端得测试得到的数据
 107   1        count=0;
 108   1        p3_0=1;
 109   1        do{}while(count<endcount); 
 110   1      
 111   1       //发送用户码1    由于已经设置了用户码分别为0和0所以这里直接发送,这里连发16个位0。
 112   1      //如果用户码不一样,这里就要进行修改了。
 113   1        for(s=0;s<=15;s++)
 114   1          {
 115   2            ///下面发送0.56ms低电平和0.56ms高电平   20和60为计算的数据
 116   2           endcount=20;
C51 COMPILER V7.06   襙控_嗦隒_郷_                                                         11/15/2009 01:47:48 PAGE 3   

 117   2           count=0;
 118   2               p3_0=0;
 119   2           do{}while(count<endcount);
 120   2          
 121   2               endcount=20;
 122   2           count=0;
 123   2               p3_0=1;
 124   2           do{}while(count<endcount);
 125   2              }        
 126   1       //发送数据
 127   1       irdata=keyvalue; 
 128   1        for(s=0;s<=7;s++)
 129   1          {       
 130   2           datapd=irdata & wy[s];
 131   2           if (datapd==0)
 132   2              {endcount=20;count=0;}       
 133   2               else
 134   2                  {endcount=60;count=0;}        
 135   2           p3_0=0;
 136   2           do{}while(count<endcount);
 137   2         //发送公共的0.56ms高电平
 138   2           endcount=20;count=0;
 139   2           p3_0=1;
 140   2           do{}while(count<endcount);
 141   2          }
 142   1        //发送数据反向 
 143   1       irdata=keyvalue; 
 144   1        for(s=0;s<=7;s++)
 145   1          {       
 146   2           datapd=irdata & wy[s];
 147   2           if (datapd==0)
 148   2              {endcount=60;count=0;}       
 149   2               else
 150   2                  {endcount=20;count=0;}        
 151   2           p3_0=0;
 152   2           do{}while(count<endcount);
 153   2         //发送公共的0.56ms高电平
 154   2           endcount=20;count=0;
 155   2           p3_0=1;
 156   2           do{}while(count<endcount);
 157   2          }
 158   1           TR0=0;   
 159   1      }
 160          
 161          
 162          
 163          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    564    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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