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

📄 all-test.lst

📁 Keil写的nRF2401的发射程序,,,可以配合我刚才发的nRF2401的接受程序来看,,所有的关键注释我都写的很清楚,,非常合适新手学习的再次开发使用.
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   ALL_TEST                                                              06/15/2007 10:53:26 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE ALL_TEST
OBJECT MODULE PLACED IN All-test.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE file\All-test.c BROWSE DEBUG OBJECTEXTEND PRINT(.\All-test.lst) OBJECT(All-
                    -test.obj)

line level    source

   1          #include <at89x51.h>
   2          #include <i2c.h>
   3          #include <math.h>
   4          
   5          #define uint  unsigned int
   6          #define uchar unsigned char
   7          #define comm  0
   8          #define dat   1
   9          
  10          sbit  e = P2^2;   //input enable;                // e
  11          sbit rw = P2^1;   //H=read; L=write;     // rw
  12          sbit rs = P2^0;   //H=data; L=command;   // rs
  13          
  14          uchar xdata eeprom_buffer[5];
  15          uchar code keycode[8]={1,2,3,4,5,6,7,8};
  16          uchar xdata e_key,key_buf;
  17          float xdata temp;
  18          bit bkey=0;
  19          bit state=0;    // 0 : r457    1: ry               // just have a test
  20          
  21          //uchar xdata gg[32]={"Preheating...   "
  22          //                    "1234567890123456"};
  23          uchar code cgram_char[][8]={0x11,0x0a,0x04,0x0a,0x11,0x00,0x00,0x00,
  24                                      0x00,0x00,0x0A,0x0A,0x0F,0x02,0x02,0x00,
  25                                                                  0x00,0x00,0x0F,0x08,0x0E,0x01,0x0E,0x00,
  26                                                                  0x00,0x00,0x0F,0x01,0x02,0x04,0x04,0x00,
  27                                                                  0x00,0x00,0x09,0x09,0x06,0x04,0x08,0x00
  28                                     };
  29          uchar xdata lcd_display[32];
  30          bit down_time;
  31          uchar time_inc=0,count;
  32          uchar code pre[10]={"Preheating"};
  33          uchar code name[13]={"White measure"};
  34          uchar code sequence[8]={"01234567"};
  35          uchar code step[3]={">^/"};
  36          uchar code init_result[]={"Data Check:Good"};
  37          
  38          bit pr=0,flash;
  39          uchar inc=0,other_flash_cnt=0;
  40          
  41          bit r457,b_enprint=0;
  42          uchar byte_dat;
  43          bit u_afunction=0;
  44          bit r457zeroflag,ryzeroflag,r457adflag,ryadflag;
  45          bit bfail=0,b_ini_fail=0,flashzero=0;
  46          float xdata r457se,ryse,r457ade,ryade,r457ad0,ryad0,r457s0,rys0;
  47          float xdata r457adc,ryadc,r457sc,rysc,r0sc,fsc,F;
  48          float xdata r0adc,fadc;
  49          float xdata r457sc_com[20],rysc_com[20];
  50          float xdata ucof,gcof;
  51          float xdata standard_L,standard_H;       //标准上下限数值
  52          float xdata u_B,u_A;
  53          
  54          uint xdata zero_inc=0,cut_time;
C51 COMPILER V8.02   ALL_TEST                                                              06/15/2007 10:53:26 PAGE 2   

  55          
  56          uchar  read_count=0;
  57          float xdata s=0;
  58          int xdata dats;
  59          int xdata min1,min2,max1,max2;// ADC比较数据
  60          //uchar xdata read_count=0;
  61          
  62          uchar cs_temp=0xff;
  63          bit bell=0;
  64          
  65          //------------------------------------------------//
  66          void lcddis_series(uchar lcd_pos ,uchar num, uchar  *p, uchar p_n, bit dig);
  67          void write_DDRAM(uchar pos ,uchar cont );
  68          //------------------------------------------------//
  69          
  70          void delay_lcd (uchar ms)   //delay time
  71          {
  72   1        int i,j;
  73   1        for(i=0;i<ms;i++)
  74   1          for(j=0;j<123;j++);
  75   1      }
  76          
  77          void delayms(uchar time)
  78          {
  79   1        uchar del,i;
  80   1              for(i=time;i>0;i--)
  81   1           for(del=80;del>0;del--);  
  82   1      }
  83          
  84          uchar keyscan(void)
  85          {  
  86   1         uchar s,i;
  87   1         P0=0x00;
  88   1         P2_7=0;
  89   1         P2_6=1;
  90   1         P3_7=0;
  91   1         P3_7=1;   
  92   1         if((P1&0x18)!=0x18)            //以按下键有效
  93   1           {  delay_lcd(2);
  94   2                  if((P1&0x18)!=0x18)
  95   2                       {
  96   3                 s=0x80;
  97   3                 for(i=0;i<8;i++)
  98   3                   {
  99   4                     if(i==0)
 100   4                       s=s;
 101   4                     else
 102   4                       s=(s>>1);
 103   4                     P0=~s;           
 104   4                                 P2_7=0;
 105   4                     P2_6=1;
 106   4                     P3_7=0;
 107   4                     P3_7=1;
 108   4                     if((P1&0x10)==0)
 109   4                       {
 110   5                                        key_buf=keycode[i];
 111   5                                        bkey=1;                                                          
 112   5                                    break;                                                                    
 113   5                       }
 114   4                     if((P1&0x08)==0)
 115   4                       {
 116   5                                        key_buf=keycode[i]+8;
C51 COMPILER V8.02   ALL_TEST                                                              06/15/2007 10:53:26 PAGE 3   

 117   5                                        bkey=1;                                                          
 118   5                                    break;
 119   5                       }
 120   4                   }  
 121   3                       }              // <--break跳出地址
 122   2           }
 123   1               else
 124   1               {
 125   2                if(bkey)
 126   2                 {
 127   3                  e_key=key_buf;
 128   3                      bkey=0;
 129   3                 } 
 130   2               }
 131   1               return(e_key);
 132   1      }
 133          
 134          void split_data(float f)           //具有把float类型数据拆分
 135          {
 136   1        uint dis_r;
 137   1          eeprom_buffer[0]=((uint)f/10000);      //modified...
 138   1            dis_r=((uint)f%10000);      /////
 139   1          eeprom_buffer[1]=(dis_r/1000);
 140   1            dis_r=(dis_r%1000);
 141   1          eeprom_buffer[2]=(dis_r/100);
 142   1            dis_r=(dis_r%100);
 143   1          eeprom_buffer[3]=(dis_r/10);
 144   1            dis_r=(dis_r%10);
 145   1              eeprom_buffer[4]=dis_r;
 146   1      }
 147          
 148          void ReadStatusLCM(void)        //读LCM状态,检测忙信号,无返回
 149          {  
 150   1        P0=0xFF;   
 151   1        rs=0;
 152   1        rw=1; 
 153   1        e=1;
 154   1        e=0;
 155   1        while (P0 & 0x80); //检测忙信号
 156   1      }
 157          
 158          void wr_lcd (uchar dat_comm,uchar content, bit busy)
 159          {
 160   1        if(busy)
 161   1         ReadStatusLCM();
 162   1        P0=content;   //output data or comm
 163   1        if(dat_comm)
 164   1         {
 165   2          rs=1;   //data
 166   2          rw=0;   //write
 167   2         }
 168   1        else 
 169   1         {
 170   2          rs=0;   //command
 171   2          rw=0;   //write
 172   2         }
 173   1        
 174   1        e=1;
 175   1        delay_lcd(1);
 176   1        e=0;
 177   1      }
 178          
C51 COMPILER V8.02   ALL_TEST                                                              06/15/2007 10:53:26 PAGE 4   

 179          /*------------------初始化------------------*/
 180          void init_lcd (void)
 181          {
 182   1        uchar i;
 183   1        e=0;
 184   1        wr_lcd (comm,0x06,0);  /*光标的移动方向*/
 185   1        wr_lcd (comm,0x0c,0);  /*开显示,关光标*/     
 186   1        wr_lcd (comm,0x38,0);  /*8位接口两行显示模式*/
 187   1        for(i=0;i<32;i++)
 188   1         lcd_display[i]=' ';   //全部为空,针对MCU物理内部
 189   1        wr_lcd (comm,0x01,0);  /*清屏,地址指针指向00H*/
 190   1      }
 191          
 192          
 193          
 194          ///*----------------显示字符-----------------*/
 195          //void char_disp (uchar  *chrt)
 196          //{
 197          //  uchar i,j;
 198          //  wr_lcd (comm,0x80,1);        // DDRAM首地址设置   // 00H
 199          //    j=0;
 200          //    for (i=0;i<16;i++)
 201          //    wr_lcd (dat,chrt[j*16+i],1);
 202          //      j=1;
 203          //      wr_lcd(comm,0xc0,1);                      // 40H
 204          //      for (i=0;i<16;i++)
 205          //    wr_lcd (dat,chrt[j*16+i],1);
 206          //    wr_lcd (comm,0x0c,1);
 207          //}
 208          
 209          void cgram_wr (uchar addr, uchar n, uchar *p)   //---- test OK ---//
 210          {
 211   1        uchar i;
 212   1        wr_lcd (comm,(0x40+addr*8),1);  //自定义字符字模数据存储地址
 213   1        for(i=0;i<8;i++)
 214   1          wr_lcd (dat,*(p+n*8+i),1);
 215   1              
 216   1      }
 217          
 218          //void all_display(uchar  *chrt)
 219          //{
 220          //  uchar i,j;
 221          //  wr_lcd (comm,0x80,1);          // DDRAM首地址设置,用于显示 ,  地址:80H + 00H
 222          //  j=0;
 223          //  for(i=0;i<16;i++)
 224          //    wr_lcd (dat,chrt[j*16+i],1);
 225          //
 226          //  wr_lcd (comm,0xc0,1);          // 地址:80H + 40H
 227          //  j=1;
 228          //  for(i=0;i<16;i++)
 229          //    wr_lcd (dat,chrt[j*16+i],1);
 230          // 
 231          //  wr_lcd (comm,0x0c,1);
 232          //}
 233          
 234          int measure(void)                       // 之前P1.7 =0,之后关闭  
 235          {
 236   1      //  uint dat;            // ADC转换过来的数据,这里不考虑负数。
 237   1        uchar buf_adc;
 238   1        do
 239   1         {
 240   2           ACC=P0;        //第一次读数判断
C51 COMPILER V8.02   ALL_TEST                                                              06/15/2007 10:53:26 PAGE 5   

 241   2         }while(!ACC4);   //ds=1
 242   1        if(!ACC3&&ACC0)   //over range
 243   1         {
 244   2           dats=1999;      //when over range , It reaches to max.
 245   2           goto end;
 246   2         }
 247   1        if(!ACC2)
 248   1          {
 249   2           dats=0;                    //负数为0
 250   2               goto end;
 251   2          }
 252   1        if(ACC3)
 253   1           buf_adc=0;    //第一位为1或0
 254   1        else
 255   1           buf_adc=1;
 256   1        dats=buf_adc*1000;
 257   1      
 258   1        do              ////第二次读数判断
 259   1         {
 260   2           ACC=P0;
 261   2         }while(!ACC5);
 262   1        buf_adc=(ACC&0x0f);     
 263   1        dats=dats+buf_adc*100;
 264   1      
 265   1        do                  //第3次读数判断
 266   1         {
 267   2           ACC=P0;
 268   2         }while(!ACC6);
 269   1        buf_adc=(ACC&0x0f);
 270   1        dats=dats+buf_adc*10;
 271   1      
 272   1        do                    //第4次读数判断
 273   1         {
 274   2           ACC=P0;
 275   2         }while(!ACC7);
 276   1        buf_adc=(ACC&0x0f);
 277   1        dats=dats+buf_adc;
 278   1      
 279   1      end:    read_count++;
 280   1              //      P3_7=1;     //关闭
 281   1                      s=s+dats;
 282   1              return(dats);  
 283   1      }
 284          
 285          void compare_four_data(void)     
 286          {
 287   1        if(dats>max2)
 288   1         {
 289   2           max1=max2;
 290   2           max2=dats;
 291   2         }
 292   1        else
 293   1         {
 294   2           if(dats>max1)
 295   2             max1=dats;  
 296   2           else 
 297   2            {
 298   3             if(dats<min1)
 299   3              {
 300   4                min2=min1;
 301   4                min1=dats;
 302   4              }
C51 COMPILER V8.02   ALL_TEST                                                              06/15/2007 10:53:26 PAGE 6   

 303   3             else
 304   3              {
 305   4                if(dats<min2)
 306   4                   min2=dats;
 307   4              }
 308   3            }
 309   2         }
 310   1        
 311   1      }
 312          
 313          void adc_idle(void)
 314          {
 315   1      //  uchar xdata i;
 316   1        float r; //余数部分
 317   1        float dp; //整数部分
 318   1        min1=2000;
 319   1        min2=2000;
 320   1        max1=-1;
 321   1        max2=-1;
 322   1      
 323   1      
 324   1        wr_lcd (comm,0x01,1);  /*清屏,地址指针指向00H*/
 325   1        lcddis_series(0,7,name,6,0);
 326   1        write_DDRAM(7,'.');
 327   1        write_DDRAM(8,'.');
 328   1        write_DDRAM(9,'.');
 329   1        wr_lcd (comm,0x0c,1);  /*开显示,关光标*/

⌨️ 快捷键说明

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