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

📄 song.lst

📁 单片机C语言15个实验附有原理图和程序 是我的课程作业 以经过实践验证
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   SONG                                                                  12/10/2006 12:17:20 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SONG
OBJECT MODULE PLACED IN song.OBJ
COMPILER INVOKED BY: D:\Program Files\uv2\C51\BIN\C51.EXE song.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<stdio.h>
   2          #include<reg51.h>
   3          
   4          #define POINT_NUM 36
   5          
   6          sbit clk=P0^0;
   7          sbit sda=P0^1;
   8          sbit P17=P1^7;
   9          sbit P03=P0^3;
  10          sbit P04=P0^4;
  11          sbit P05=P0^5;
  12          sbit P06=P0^6;
  13          sbit P32=P3^2;
  14          sbit P07=P0^7;
  15          sbit P11=P1^1;
  16          sbit P12=P1^2;
  17          sbit P13=P1^3;
  18          sbit P10=P1^0;
  19          sbit P14=P1^4;
  20          sbit P16=P1^6;
  21          sbit P24=P2^4;
  22          sbit P25=P2^5;
  23          sbit P26=P2^6;
  24          sbit P27=P2^7;
  25          sbit P37=P3^7;
  26          
  27          #define hi 0x3c 
  28          #define lo 0xb0
  29          #define hi1 0x01
  30          #define lo1 0x01 
  31          unsigned char code ledk[10]={0x3f,0x30,0x5b,0x4f,0x66,0x6D,0x7d,0x07,0x7f,0x6f};
  32          unsigned char dsp[4];
  33          int ms;//测距
  34          unsigned char speedl;///////左轮脉冲
  35          unsigned char speedr;///////右轮脉冲
  36          unsigned char pwm_count;/////总脉宽
  37          int distance[5];////存储铁块距?
  38          unsigned char tie_flag;///检测铁片起始标志
  39          unsigned char stopFlag;//停车标志
  40          unsigned char _5s_count;//几时5秒
  41          unsigned char Second_5;//倒几时
  42          unsigned char count;//铁片计数
  43          unsigned char index;
  44          unsigned char t0_count;//定时器0计数
  45          unsigned char time;
  46          unsigned char show_tie_juli;//显示铁片的距离
  47          unsigned char show_tie_time;//显示铁片的距
  48          unsigned char turn_l_time;
  49          unsigned char turn_r_time;
  50          unsigned char turn_count;
  51          unsigned char zawFlag;
  52          int ms1;//铁片起点的脉冲个数
  53          int ms2;//铁片终点的脉冲个数
  54          unsigned Status;
  55          
C51 COMPILER V7.50   SONG                                                                  12/10/2006 12:17:20 PAGE 2   

  56          ///////////////////////////////////
  57          void stop_5s();
  58          void display();
  59          void c_sun();
  60          void ceju();
  61          void zaw();
  62          void cheting();
  63          void ButtonAction();
  64          void delay(unsigned int n);
  65          void shift(unsigned char dd);
  66          void t0();
  67          //void hextodec(unsigned char xx);
  68          void black();
  69          ////////////////////////////////////////
  70          
  71          
  72          void main(void)
  73          {
  74   1         
  75   1        PT1=1;
  76   1        EA=1;
  77   1         EX0=1;
  78   1         IT0=1;
  79   1         EX1=1;
  80   1         IT1=1; 
  81   1         TMOD=0x21;
  82   1         ET0=1;
  83   1         TH0=hi;
  84   1         TL0=lo;
  85   1         TR0=1;
  86   1         TR1=1;
  87   1         ET1=1;
  88   1         ET0=1;
  89   1         TH1=hi1;
  90   1         TL1=lo1;
  91   1         speedl=180;
  92   1         speedr=180;
  93   1         P10=P12=1;
  94   1         tie_flag=0;
  95   1         stopFlag = 0;
  96   1         zawFlag = 0;
  97   1         Second_5 = 5;
  98   1         count=0;
  99   1         //P14 =0;
 100   1         //P03 =0;
 101   1         Status = 1;
 102   1         show_tie_juli = 0;
 103   1         
 104   1         while(1)
 105   1         {
 106   2           display();
 107   2          // ceju();
 108   2           switch (Status)
 109   2           {
 110   3                case 1://AC路段检测
 111   3                {
 112   4                  black();
 113   4                  // if(time>20) 
 114   4                  // stop_5s();
 115   4                   break;
 116   4                }
 117   3            
C51 COMPILER V7.50   SONG                                                                  12/10/2006 12:17:20 PAGE 3   

 118   3                case 2://障碍物检测
 119   3               {  
 120   4                   if (P06 ==0)
 121   4                       {
 122   5                          
 123   5                      zawFlag=1;
 124   5                      Status=3;
 125   5                       }
 126   4                    
 127   4                   break;
 128   4               }
 129   3               case 3://检测到障碍物后转玩90度
 130   3               {
 131   4                   zaw();
 132   4                   break;
 133   4               }
 134   3               case 4://寻光源,定方向
 135   3               {
 136   4                  c_sun();
 137   4                  break;
 138   4               }
 139   3               case 5://停车入库
 140   3               {   
 141   4                  cheting();
 142   4                  break;
 143   4               }
 144   3      
 145   3               case 6:
 146   3               {
 147   4                  
 148   4                  ButtonAction();
 149   4                  break;
 150   4               }
 151   3           }
 152   2        }
 153   1      }
 154          
 155          ///////////////////////////////
 156          ////////////////////////////////////延时    
 157          void delay (unsigned int n)
 158            {unsigned int i,j;
 159   1           for(i=0;i<n;i++)
 160   1              for(j=0;j<n;j++);
 161   1      }
 162          ////////////////////////////////////164串并行
 163          void shift(unsigned char dd)
 164            {static unsigned char d;
 165   1          unsigned char j=0;
 166   1          d=dd;while(j<8)
 167   1                    {                 
 168   2                              if((d&0x80)!=0)
 169   2                              sda=1;
 170   2                              else sda=0;
 171   2                              clk=0;delay(1);clk=1;
 172   2                              d<<=1;j++;}
 173   1                                              
 174   1                                              } 
 175          
 176          //////////////////////////////////// T0定时计数
 177          void t0() interrupt 1
 178          { unsigned char char_show;
 179   1        TH0=hi;TL0=lo;/////50ms
C51 COMPILER V7.50   SONG                                                                  12/10/2006 12:17:20 PAGE 4   

 180   1         t0_count++;
 181   1         if(t0_count>=20)
 182   1         {
 183   2             time++;
 184   2             if (time>30)
 185   2             {
 186   3                PX0=1;
 187   3             }
 188   2             t0_count=0;
 189   2             if (show_tie_juli == 1) 
 190   2             {
 191   3                 show_tie_time ++;
 192   3             }
 193   2             if (show_tie_time >= 3)
 194   2             {
 195   3                 show_tie_juli= 0;
 196   3                 show_tie_time =0;
 197   3                 dsp[2]= 0;
 198   3             }
 199   2      
 200   2      
 201   2             if (show_tie_juli == 0)
 202   2             {
 203   3                 char_show = (unsigned char)time / 10;
 204   3                 char_show = ledk[char_show];
 205   3           
 206   3                 dsp[1] = char_show;
 207   3           
 208   3                 char_show = time %10;
 209   3                 char_show = ledk[char_show];
 210   3           
 211   3                 dsp[0] = char_show;
 212   3      
 213   3             }
 214   2      
 215   2             if(time>=90)
 216   2              {
 217   3                  stop_5s();
 218   3                  TR0=0;
 219   3                  Status=6;
 220   3              }
 221   2              
 222   2      
 223   2         }
 224   1           ///电机停止信号
 225   1           
 226   1           /////////////////////////
 227   1           if (Status ==3)
 228   1           {
 229   2            
 230   2               turn_count++;
 231   2               if (turn_count>=20)
 232   2               {
 233   3                  turn_count=0;
 234   3                  turn_l_time++;
 235   3                  if (turn_l_time >=8)
 236   3                      {
 237   4                     Status =4;
 238   4                     //turn_l_time = 0;
 239   4                      }
 240   3               }
 241   2      
C51 COMPILER V7.50   SONG                                                                  12/10/2006 12:17:20 PAGE 5   

 242   2           }
 243   1      
 244   1           if(Status ==4)
 245   1           {
 246   2              turn_count++;
 247   2              if (turn_count>=20)
 248   2               {
 249   3                  turn_count=0;
 250   3                  turn_r_time++;
 251   3                  if (turn_r_time >=8)
 252   3                      {
 253   4                     Status =5;
 254   4                         
 255   4                     //turn_r_time=0;
 256   4                      }
 257   3               }
 258   2           }
 259   1           ///////////////////////////
 260   1      
 261   1         if (stopFlag == 1)
 262   1          {
 263   2              char_show = ledk[Second_5];
 264   2              dsp[3] = char_show;
 265   2              _5s_count++;
 266   2               
 267   2              if(_5s_count<=10)
 268   2                 P17=0;
 269   2              if(_5s_count>10)
 270   2                 P17=1;
 271   2      
 272   2               if (_5s_count == 20)
 273   2               {
 274   3                  
 275   3                  Second_5 --;
 276   3                  _5s_count=0;
 277   3                  char_show = ledk[Second_5];
 278   3                  dsp[3] = char_show;
 279   3                  if (Second_5 == 0)
 280   3                      {
 281   4                    stopFlag = 0;
 282   4                    TR1 = 1;
 283   4                    EX0=0;//关外部0中断,不再检测铁片+
 284   4      
 285   4                    Status = 2; 
 286   4                    //P04=0;
 287   4                    //P05=0;
 288   4                    speedr=180;
 289   4                    speedl=230;
 290   4                  }
 291   3               }
 292   2          }
 293   1              
 294   1      }
 295          ///////////////////////////////////  
 296          /*void hextodec(unsigned char xx)
 297          {unsigned char B;
 298            B=xx/10; 
 299            dsp[3]=B;
 300            xx=xx%10;
 301            B=xx;
 302            dsp[2]=B;
 303          }*/
C51 COMPILER V7.50   SONG                                                                  12/10/2006 12:17:20 PAGE 6   

 304          ///////////////////////////////////检测黑线子涵数
 305          void  black()
 306           {
 307   1          if(P04==1) 
 308   1          {
 309   2            speedl=2;    ///////左轮压黑线 
 310   2            speedr=250;
 311   2          }
 312   1          else  
 313   1          {
 314   2             speedl=250;
 315   2             //speedr=180;
 316   2          }
 317   1      
 318   1          if(P05==1) 
 319   1          {
 320   2             speedr=2; ///右轮压黑线
 321   2             speedl =250;
 322   2          }
 323   1          else 
 324   1          {
 325   2            speedr=250; //没压黑线
 326   2            //speedl=180;
 327   2            
 328   2          }
 329   1          if(P04==0&&P05==0)
 330   1          {
 331   2           speedl =250;
 332   2           speedr =250;
 333   2          }
 334   1      }
 335          //////////////////////////////
 336          void PWM() interrupt 3
 337          { if(pwm_count==speedl)
 338   1          P10=1;
 339   1         
 340   1        if(pwm_count==speedr)
 341   1          P12=1;
 342   1        ++pwm_count;
 343   1        if(pwm_count==255)
 344   1          {pwm_count=0;
 345   2           P10=0;
 346   2           P12=0;}
 347   1        
 348   1       
 349   1      }
 350          ///////////////金属数目检测及显示涵数
 351          void int0() interrupt 0
 352          {
 353   1       unsigned char i,char_show;
 354   1        
 355   1         display();
 356   1         if ( P32 ==1)
 357   1         return;
 358   1      
 359   1         ms1=ms;
 360   1         if (time>30)

⌨️ 快捷键说明

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