main.lst

来自「单片机c语言 用于DY500或同类型的开发板」· LST 代码 · 共 318 行

LST
318
字号
C51 COMPILER V7.06   MAIN                                                                  08/21/2008 11:33:55 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          
  22          sbit RS = P2^2;//Pin4
  23          sbit RW = P2^3; //Pin5
  24          sbit E  = P2^4;//Pin6
  25          
  26          #define Data  P0    //数据端口
  27          
  28          unsigned int hour,minute,second,count;
  29          char code Tab[16]="0123456789ABCDEF";
  30          
  31          char data TimeNum[]="                ";
  32          char data Test1[]="                  ";
  33          
  34          ////////////////////////////////////////////
  35          
  36          unsigned char  irtime;//红外用全局变量
  37          
  38          bit irpro_ok,irok;
  39          unsigned char IRcord[4];
  40          unsigned char   irdata[33];
  41          void ShowString (unsigned char line,char *ptr);
  42          
  43          //////////////////////////////////////////////
  44          
  45          void Delay(unsigned char mS);
  46          void Ir_work(void);
  47          void Ircordpro(void);
  48          
  49          
  50          ////////////////////////////////////////////////////////////////
  51          void Delay(unsigned char mS)//delay mS
  52          {
  53   1       unsigned char us,usn;
  54   1      
  55   1       while(mS!=0)
C51 COMPILER V7.06   MAIN                                                                  08/21/2008 11:33:55 PAGE 2   

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

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

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

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


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 + =
减小字号Ctrl + -
显示快捷键?