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

📄 main.lst

📁 很实用的单片机例程
💻 LST
字号:
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:51:24 PAGE 1   


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

line level    source

   1          /**********************HL-1实验开发板例程************************
   2          *  平台:HL-1 V6.2 + Keil U3 + STC89C52RD
   3          *  公司:慧净电子科技有限公司
   4          *  淘宝:http://shop37031453.taobao.com       
   5          *  网站:www.hlmcu.com
   6          *  编写:慧净
   7          *  日期:2008-8-08
   8          *   QQ : 121350852 398115088
   9          *  晶振:11.0592MHZ
  10          *  说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
  11          *  论坛:http://hjdz.5d6d.com
  12          ******************************************************************/
  13          /*-----------------------------------------------
  14            名称:遥控器红外解码数码管显示
  15            内容:按配套遥控器上1-9会在数码管上对应显示
  16          ------------------------------------------------*/
  17          #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  18          
  19          sbit IR=P3^2;  //红外接口标志
  20          
  21          #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
  22          sbit LATCH1=P2^6;//定义锁存使能端口 段锁存
  23          sbit LATCH2=P2^7;//                 位锁存
  24          /*------------------------------------------------
  25                          全局变量声明
  26          ------------------------------------------------*/
  27          
  28          unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
  29          unsigned char  irtime;//红外用全局变量
  30          
  31          bit irpro_ok,irok;
  32          unsigned char IRcord[4];
  33          unsigned char irdata[33];
  34          
  35          /*------------------------------------------------
  36                            函数声明
  37          ------------------------------------------------*/
  38          
  39          void Ir_work(void);
  40          void Ircordpro(void);
  41          
  42          /*------------------------------------------------
  43                            定时器0中断处理
  44          ------------------------------------------------*/
  45          
  46          void tim0_isr (void) interrupt 1 using 1
  47          {
  48   1        irtime++;  //用于计数2个下降沿之间的时间
  49   1      }
  50          
  51          /*------------------------------------------------
  52                            外部中断0中断处理
  53          ------------------------------------------------*/
  54          void EX0_ISR (void) interrupt 0 //外部中断0服务函数
  55          {
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:51:24 PAGE 2   

  56   1        static unsigned char  i;             //接收红外信号处理
  57   1        static bit startflag;                //是否开始处理标志位
  58   1      
  59   1      if(startflag)                         
  60   1         {
  61   2          if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms
  62   2                              i=0;
  63   2                      irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
  64   2                      irtime=0;
  65   2                      i++;
  66   2                               if(i==33)
  67   2                              {
  68   3                                       irok=1;
  69   3                                       i=0;
  70   3                                      }
  71   2                }
  72   1               else
  73   1                      {
  74   2                      irtime=0;
  75   2                      startflag=1;
  76   2                      }
  77   1      
  78   1      }
  79          
  80          /*------------------------------------------------
  81                          定时器0初始化
  82          ------------------------------------------------*/
  83          void TIM0init(void)//定时器0初始化
  84          {
  85   1      
  86   1        TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
  87   1        TH0=0x00; //重载值
  88   1        TL0=0x00; //初始化值
  89   1        ET0=1;    //开中断
  90   1        TR0=1;    
  91   1      }
  92          /*------------------------------------------------
  93                            外部中断0初始化
  94          ------------------------------------------------*/
  95          void EX0init(void)
  96          {
  97   1       IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)
  98   1       EX0 = 1;   //使能外部中断
  99   1       EA = 1;    //开总中断
 100   1      }
 101          /*------------------------------------------------
 102                            键值处理
 103          ------------------------------------------------*/
 104          
 105          void Ir_work(void)//红外键值散转程序
 106          {
 107   1             switch(IRcord[2])//判断第三个数码值
 108   1                       {
 109   2                               case 0x0c:DataPort=dofly_DuanMa[1];break;//1 显示相应的按键值
 110   2                               case 0x18:DataPort=dofly_DuanMa[2];break;//2
 111   2                               case 0x5e:DataPort=dofly_DuanMa[3];break;//3
 112   2                               case 0x08:DataPort=dofly_DuanMa[4];break;//4
 113   2                               case 0x1c:DataPort=dofly_DuanMa[5];break;//5
 114   2                               case 0x5a:DataPort=dofly_DuanMa[6];break;//6
 115   2                               case 0x42:DataPort=dofly_DuanMa[7];break;//7
 116   2                               case 0x52:DataPort=dofly_DuanMa[8];break;//8
 117   2                               case 0x4a:DataPort=dofly_DuanMa[9];break;//9
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:51:24 PAGE 3   

 118   2                   default:break;
 119   2                               }
 120   1      
 121   1                        irpro_ok=0;//处理完成标志
 122   1      
 123   1        }
 124          /*------------------------------------------------
 125                          红外码值处理
 126          ------------------------------------------------*/
 127          void Ircordpro(void)//红外码值处理函数
 128          { 
 129   1        unsigned char i, j, k;
 130   1        unsigned char cord,value;
 131   1      
 132   1        k=1;
 133   1        for(i=0;i<4;i++)      //处理4个字节
 134   1           {
 135   2            for(j=1;j<=8;j++) //处理1个字节8位
 136   2               {
 137   3                cord=irdata[k];
 138   3                if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
 139   3                   value|=0x80;
 140   3                if(j<8)
 141   3                          {
 142   4                               value>>=1;
 143   4                              }
 144   3                 k++;
 145   3               }
 146   2           IRcord[i]=value;
 147   2           value=0;     
 148   2           } 
 149   1               irpro_ok=1;//处理完毕标志位置1
 150   1      }
 151          
 152          /*------------------------------------------------
 153                              主函数
 154          ------------------------------------------------*/
 155          void main(void)
 156          {
 157   1       EX0init(); //初始化外部中断
 158   1       TIM0init();//初始化定时器
 159   1      
 160   1        DataPort=0xfe; //取位码 第一位数码管选通,即二进制1111 1110
 161   1        LATCH2=1;      //位锁存
 162   1        LATCH2=0;
 163   1      
 164   1       while(1)//主循环
 165   1         {
 166   2          if(irok)                        //如果接收好了进行红外处理
 167   2                {   
 168   3                 Ircordpro();
 169   3                 irok=0;
 170   3                }
 171   2      
 172   2          if(irpro_ok)                   //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
 173   2                {
 174   3                 Ir_work();
 175   3                }
 176   2         }
 177   1      }
 178            
 179            
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:51:24 PAGE 4   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    252    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     39    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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