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

📄 hongwai_2.lst

📁 用C8051F020读取红外遥控
💻 LST
字号:
C51 COMPILER V7.06   HONGWAI_2                                                             05/12/2008 07:17:31 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE HONGWAI_2
OBJECT MODULE PLACED IN HongWai_2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HongWai_2.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /****************************************************/
   2          /***  题目:基于C8051F020单片机***红外遥控编码***
   3          /***  方法:扫描法 
   4          /***  创建:杨占刚
   5          /***  时间:08_04_16  
   6          /***  注解;0xAA:0键控制;0xAB:1键控制;0xAC:2键控制;0xAD:3键控制;0xB2:4键控制
   7                      0xB3:5键控制;0xB4:6键控制;0xB5:7键控制;0xCA:8键控制;0xCB:9键控制
   8          *******************************************************/
   9          
  10          #include "c8051f020.h"
  11          #include "stdio.h"
  12          
  13          #define BAUDRATE 115200
  14          #define SYSCLK 22114800
  15          #define uchar unsigned char
  16          
  17          sbit   P36=P3^6;
  18          static uchar data IRCode[3],IRCON,IRCON2;  //定义静态变量
  19          static uchar data key_number;
  20          
  21          
  22          void SYSCLK_Init(void)
  23          {   
  24   1        int i  = 0;      //定义延时变量
  25   1        OSCXCN = 0x67;   //启动外部振荡器22.1184MHz晶体
  26   1        for (i = 0; i < 3000; i++);   // Wait 1ms for initialization
  27   1        while ((OSCXCN & 0x80) == 0); //等待晶体振荡器稳定
  28   1        OSCICN = 0x88;  //使能时钟丢失检测器,检测到时钟丢失时间大于100ms将触发复位,使能外部时钟为系统时钟
  29   1      } 
  30          
  31          void PORT_Init(void)
  32          {
  33   1         WDTCN   = 0xde;
  34   1         WDTCN   = 0xad; 
  35   1         XBR0    = 0x04;
  36   1         XBR2    = 0x40;
  37   1      }
  38          
  39          void Timer1_Init(void)
  40          {
  41   1        TMOD  = 0x21; //定时T1方式2,为波特率发生器 115200
  42   1        TH1   = 0xF4;  //按波特率设置初值
  43   1        SCON0 = 0X50; //URAT0方式1,允许接收
  44   1        CKCON|= 0x10; // 
  45   1        PCON |= 0X80; //SMOD00=1
  46   1        TI0=0;
  47   1      } 
  48          
  49          
  50          void Delay(uchar j)
  51          {
  52   1        unsigned int de,i;
  53   1        if(j)//这里起到按键值正确后会有一个延时,防止重复按键
  54   1          {
  55   2            for(i=0; i<1000; i++)
C51 COMPILER V7.06   HONGWAI_2                                                             05/12/2008 07:17:31 PAGE 2   

  56   2            for(de=0; de<200; de++);
  57   2            j--;
  58   2          }
  59   1      }  
  60          
  61          void main(void)
  62          {
  63   1        SYSCLK_Init();
  64   1        PORT_Init();
  65   1        Timer1_Init();
  66   1        P5=0X18;
  67   1        EA=0;
  68   1        key_number=10;
  69   1        while(P36==1);
  70   1        while(P36==0)
  71   1        { 
  72   2              EA=1;
  73   2          ET0 = 1;  //定时器0中断打开
  74   2          TH0 = 0XFA;
  75   2          TL0 = 0X05;//T0 产生800us的定时中断 
  76   2          for (IRCON=0; IRCON<3; IRCON++)
  77   2               IRCode[IRCON] = 0;
  78   2          IRCON = 0;  
  79   2          IRCON2 = 0; //计数清零
  80   2          TR0 = 1;    //开始计数
  81   2              while(1)
  82   2              {
  83   3               if(key_number!=10)
  84   3           break;
  85   3              }
  86   2        }
  87   1      }
  88          
  89          
  90          
  91          //定时器0溢出中断
  92          void Timer0(void) interrupt 1
  93          {
  94   1        TR1 = 1; //激活定时1,产生波特率          
  95   1        TH0 = 0XFA;
  96   1        TL0 = 0X05;//T0 产生800us的定时中断 
  97   1        if(IRCON<3) 
  98   1        {
  99   2         if(IRCON2<8)
 100   2         {
 101   3          IRCON2++;
 102   3          IRCode[IRCON]=IRCode[IRCON]<<1; //每读一次放入变量中的二进制的一个位,每次左移一位
 103   3          IRCode[IRCON]=IRCode[IRCON] | P36; //每八次填满一个字节,一个字节存放遥控编码4个位
 104   3         }
 105   2         else
 106   2         {
 107   3          IRCON++; //填满一个字节,指向下一个变量[注意: 这里会抛弃一个脉冲周期 不接收 ]
 108   3          IRCON2=0; //计数清零
 109   3         }
 110   2        }
 111   1        else
 112   1        {
 113   2         //第一字节是引导码起始位、控制位等 后两个字节有意义 (IRCode[1]不都是0x55只是现在方便判断)  最后一位是
             -编码末尾的前半位
 114   2         TR1 = 1;
 115   2         TR0 = 0; //关闭定时器
 116   2         ET0 = 0; //定时器0中断关闭
C51 COMPILER V7.06   HONGWAI_2                                                             05/12/2008 07:17:31 PAGE 3   

 117   2         SBUF0=IRCode[2];
 118   2         while(TI0!=0);
 119   2         TI0=0;
 120   2         if((IRCode[1]!=0xFF) && (IRCode[2]!=0xFF))
 121   2           {
 122   3            if(IRCode[1] == 0x55)
 123   3             {
 124   4              switch(IRCode[2])
 125   4              {
 126   5               case 0xAA:    //0键控制
 127   5                    key_number=0;
 128   5                    P5=0X00;
 129   5                    Delay(1);
 130   5                    break;
 131   5               case 0xAB:    //1键控制
 132   5                    key_number=1;
 133   5                    P5=0X01;
 134   5                    Delay(1);
 135   5                    break;
 136   5               case 0xAC:    //2键控制
 137   5                    key_number=2;
 138   5                    P5=0X02;
 139   5                    Delay(1);
 140   5                    break;
 141   5               case 0xAD:   //3键控制
 142   5                    P5=0X04;
 143   5                    key_number=3;
 144   5                    Delay(1);
 145   5                    break;
 146   5               case 0xB2:   //4键控制
 147   5                    P5=0X08;
 148   5                    key_number=4;
 149   5                    Delay(1);
 150   5                    break;
 151   5               case 0xB3:   //5键控制
 152   5                    P5=0X10;
 153   5                    key_number=5;
 154   5                    Delay(1);
 155   5                    break;
 156   5               case 0xB4:   //6键控制
 157   5                    P5=0X20;
 158   5                    key_number=6;
 159   5                    Delay(1);
 160   5                    break;
 161   5               case 0xB5:   //7键控制
 162   5                    P5=0X40;
 163   5                    key_number=7;
 164   5                    Delay(1);
 165   5                    break;
 166   5               case 0xCA:   //8键控制
 167   5                    P5=0X80;
 168   5                    key_number=8;
 169   5                    Delay(1);
 170   5                    break;
 171   5               case 0xCB:   //9键控制
 172   5                    key_number=9;
 173   5                    P5=0XFF;
 174   5                    Delay(1);
 175   5                    break;
 176   5               default:
 177   5                    break; 
 178   5             }
C51 COMPILER V7.06   HONGWAI_2                                                             05/12/2008 07:17:31 PAGE 4   

 179   4           printf("key_number is:%d",key_number%256);
 180   4               printf("\n");
 181   4           printf("\n");
 182   4            }
 183   3          }
 184   2        }
 185   1      }
 186          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    466    ----
   CONSTANT SIZE    =     19    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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