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

📄 main.lst

📁 51单片机开发板提供的参考程序
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  06/21/2008 18:44:18 PAGE 1   


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

stmt level    source

   1          /*copyright 2007,ShangHai  HaoTun Electronic Technology co.,Ltd
   2           *
   3           *This sample is used for control light by infrared .
   4           *
   5           *write by Shifang
   6           *
   7           *V1.1
   8           */
   9          //该程序使用LCD1602显示
  10          #include<reg52.h>
  11          #include<stdio.h>
  12          #include<intrins.h>
  13          
  14          ////////////////////////////////////////////////
  15          #define TURE 1
  16          #define FALSE 0
  17          
  18          ////////////////////////////////////////////////
  19          
  20          sbit IR=P3^2;//红外接口标志
  21          sbit RS = P2^4;//Pin4
  22          sbit RW = P2^5; //Pin5
  23          sbit E  = P2^6;//Pin6
  24          
  25          #define Data  P0    //数据端口
  26          
  27          unsigned int hour,minute,second,count;
  28          char code Tab[16]="0123456789ABCDEF";
  29          
  30          char data TimeNum[]="                ";
  31          char data Test1[]="                  ";
  32          
  33          ////////////////////////////////////////////
  34          
  35          unsigned char  irtime;//红外用全局变量
  36          
  37          bit irpro_ok,irok;
  38          unsigned char IRcord[4];
  39          unsigned char   irdata[33];
  40          void ShowString (unsigned char line,char *ptr);
  41          
  42          //////////////////////////////////////////////
  43          
  44          void Delay(unsigned char mS);
  45          void Ir_work(void);
  46          void Ircordpro(void);
  47          
  48          
  49          ////////////////////////////////////////////////////////////////
  50          void Delay(unsigned char mS)//delay mS
  51          {
  52   1       unsigned char us,usn;
  53   1      
  54   1       while(mS!=0)
  55   1        { 
C51 COMPILER V7.06   MAIN                                                                  06/21/2008 18:44:18 PAGE 2   

  56   2         usn = 4;
  57   2         while(usn!=0)
  58   2          {
  59   3           us=0xf0;
  60   3           while (us!=0) {us--;};
  61   3           usn--;
  62   3          }
  63   2      
  64   2         mS--;
  65   2      
  66   2        }
  67   1      }
  68          
  69          
  70          //////////////////////////////////////////////////////////////////
  71          //************************************************************* // 
  72          //////////////////////////////////////////////////////////////////  
  73          
  74          void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
  75          {
  76   1        irtime++;
  77   1      }
  78          
  79          ///////////////////////////////////////////////////////////////////////
  80          void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
  81          {
  82   1        static unsigned char  i;
  83   1        static bit startflag;
  84   1      
  85   1       if(startflag)
  86   1       {
  87   2         
  88   2          if(irtime<63&&irtime>=33)//引导码 TC9012的头码
  89   2                  i=0;
  90   2           
  91   2                      irdata[i]=irtime;
  92   2                      irtime=0;
  93   2                      i++;
  94   2                               if(i==33)
  95   2                              {
  96   3                                       irok=1;
  97   3                                       i=0;
  98   3                                      }
  99   2                }
 100   1               
 101   1               else
 102   1                      {irtime=0;startflag=1;}
 103   1      
 104   1      }
 105          
 106          ////////////////////////////////////////////////////////////////////
 107          void TIM0init(void)//定时器0初始化
 108          {
 109   1      
 110   1        TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
 111   1        TH0=0x00;//reload value
 112   1        TL0=0x00;//initial value
 113   1        ET0=1;//开中断
 114   1        TR0=1;
 115   1      }
 116          ///////////////////////////////////////////////////////////////////
 117          void EX0init(void)
C51 COMPILER V7.06   MAIN                                                                  06/21/2008 18:44:18 PAGE 3   

 118          {
 119   1       IT0 = 1;   // Configure interrupt 0 for falling edge on /INT0 (P3.2)
 120   1       EX0 = 1;   // Enable EX0 Interrupt
 121   1       EA = 1;  
 122   1      }
 123          /****************************************************************/
 124          
 125          /******************************************************************/
 126          
 127            void Ir_work(void)//红外键值散转程序
 128            {
 129   1             
 130   1             TimeNum[5] = Tab[IRcord[0]/16];
 131   1                 TimeNum[6] = Tab[IRcord[0]%16];
 132   1                 TimeNum[8] = Tab[IRcord[1]/16];
 133   1                 TimeNum[9] = Tab[IRcord[1]%16];
 134   1                 TimeNum[11] = Tab[IRcord[2]/16];
 135   1                 TimeNum[12] = Tab[IRcord[2]%16];
 136   1                 TimeNum[14] = Tab[IRcord[3]/16];
 137   1                 TimeNum[15] = Tab[IRcord[3]%16];
 138   1               
 139   1             ShowString(1,TimeNum);
 140   1      
 141   1                        irpro_ok=0;
 142   1      
 143   1        }
 144          
 145          /*****************************************************************/
 146          void Ircordpro(void)//红外码值处理函数
 147          { 
 148   1        unsigned char i, j, k;
 149   1        unsigned char cord,value;
 150   1      
 151   1        k=1;
 152   1        for(i=0;i<4;i++)//处理4个字节
 153   1           {
 154   2            for(j=1;j<=8;j++) //处理1个字节8位
 155   2               {
 156   3                cord=irdata[k];
 157   3                if(cord>7)//大于某值为1
 158   3                          {
 159   4                   value=value|0x80;
 160   4                              }
 161   3                else 
 162   3                          {
 163   4                   value=value;
 164   4                              }
 165   3                if(j<8)
 166   3                          {
 167   4                               value=value>>1;
 168   4                              }
 169   3                 k++;
 170   3               }
 171   2           IRcord[i]=value;
 172   2           value=0;     
 173   2           } irpro_ok=1;//处理完毕标志位置1
 174   1          
 175   1      }
 176          
 177          
 178          
 179          /******************************************************************/
C51 COMPILER V7.06   MAIN                                                                  06/21/2008 18:44:18 PAGE 4   

 180          void DelayUs(unsigned char us)//delay us
 181          {
 182   1       unsigned char uscnt;
 183   1       uscnt=us>>1;/* Crystal frequency in 12MHz*/
 184   1       while(--uscnt);
 185   1      }
 186          /******************************************************************/
 187          void DelayMs(unsigned char ms)//delay Ms
 188          {
 189   1       while(--ms)
 190   1         {
 191   2           DelayUs(250);
 192   2           DelayUs(250);
 193   2               DelayUs(250);
 194   2               DelayUs(250);
 195   2         }
 196   1      }
 197          void WriteCommand(unsigned char c)
 198          {
 199   1       DelayMs(5);//short delay before operation
 200   1       E=0;
 201   1       RS=0;
 202   1       RW=0;
 203   1       _nop_();
 204   1       E=1;
 205   1       Data=c;
 206   1       E=0;
 207   1      }
 208          /****************************************************************/
 209          void WriteData(unsigned char c)
 210          {
 211   1       DelayMs(5);   //short delay before operation
 212   1       E=0;
 213   1       RS=1;
 214   1       RW=0;
 215   1       _nop_();
 216   1       E=1;
 217   1       Data=c;
 218   1       E=0;
 219   1       RS=0;
 220   1      }
 221          /*********************************************************************/
 222          void ShowChar(unsigned char pos,unsigned char c)
 223          {
 224   1       unsigned char p;
 225   1       if (pos>=0x10)
 226   1          p=pos+0xb0; //是第二行则命令代码高4位为0xc
 227   1       else 
 228   1          p=pos+0x80; //是第二行则命令代码高4位为0x8
 229   1       WriteCommand (p);//write command
 230   1       WriteData (c);   //write data
 231   1      }
 232          /*************************************************************************/
 233          void ShowString (unsigned char line,char *ptr)
 234          {
 235   1       unsigned char l,i;
 236   1       l=line<<4;
 237   1       for (i=0;i<16;i++)
 238   1       ShowChar (l++,*(ptr+i));//循环显示16个字符
 239   1      }
 240          /*********************************************************************/
 241          void InitLcd()
C51 COMPILER V7.06   MAIN                                                                  06/21/2008 18:44:18 PAGE 5   

 242          {
 243   1       DelayMs(15);
 244   1       WriteCommand(0x38); //display mode
 245   1       WriteCommand(0x38); //display mode
 246   1       WriteCommand(0x38); //display mode
 247   1       WriteCommand(0x06); //显示光标移动位置
 248   1       WriteCommand(0x0c); //显示开及光标设置
 249   1       WriteCommand(0x01); //显示清屏
 250   1      
 251   1      }
 252          
 253          
 254          /////////////////////////////////////////////////////////////////
 255          
 256          void main(void)
 257          {
 258   1       EX0init(); // Enable Global Interrupt Flag
 259   1       TIM0init();
 260   1      
 261   1       InitLcd();//
 262   1       DelayMs(15);
 263   1      
 264   1       sprintf(Test1," www.haotun.com ");//the first line
 265   1       ShowString(0,Test1);
 266   1      
 267   1       sprintf(TimeNum,"Code            ");//the second line
 268   1       ShowString(1,TimeNum);
 269   1      
 270   1      
 271   1       while(1)//主循环
 272   1         {
 273   2          if(irok)
 274   2                {   
 275   3                 Ircordpro();
 276   3                 irok=0;
 277   3                }
 278   2      
 279   2          if(irpro_ok)//step press key
 280   2                {
 281   3                 Ir_work();
 282   3                }
 283   2         }
 284   1      }
 285            


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    492    ----
   CONSTANT SIZE    =     50    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     83       5
   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 + -