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

📄 shi.lst

📁 计程车计价毕业设计
💻 LST
字号:
C51 COMPILER V8.02   SHI                                                                   06/17/2011 01:00:25 PAGE 1   


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

line level    source

   1           #include<reg52.h>
   2           #define uchar unsigned char
   3           #define uint  unsigned int     
   4           uchar qianwei,baiwei,shiwei,gewei;       //显示数据各个位置数字的临时变量
   5           char  led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //段码表示0-9
   6           uint tt,aa,pulse,distance,cost,danjia,wait,way;        //定义路程、价钱、等待时间及一些全局的变量等;
   7           uchar dengdai,second,minute;
   8          
   9          //按键的定义,所有按键按下去为低电平
  10          sbit key0=P1^0;                 //清零
  11          sbit key1=P1^1;                 //切换路程与等待时间
  12          sbit key2=P1^2;                 //单程还是往返设置
  13          sbit key3=P1^3;                             //暂停按钮
  14          sbit led1=P1^4;                                 // 指示 
  15          sbit led2=P1^5;
  16          sbit led3=P1^6;
  17          sbit led4=P1^7; 
  18          
  19          
  20          bit      key1_flag;                                     //由于按键会自动复位,这个为标志位
  21          bit      key2_flag;     
  22          bit      key3_flag;
  23          bit      flag;                                  
  24                                                                  
  25          //初始化函数
  26          void initial_data(void)
  27          {
  28   1              distance=0;
  29   1              cost=0;
  30   1              second=0;
  31   1              minute=0;
  32   1              way=0;
  33   1              key1_flag=1;   //
  34   1              key2_flag=0;   //单程or往返,接指示灯;
  35   1              key3_flag=1;   //暂停,接指示灯;
  36   1              flag=0;
  37   1              pulse=0;
  38   1              dengdai=0;
  39   1              led1=1;          //双程指示
  40   1              led2=1;          //暂停指示
  41   1              led3=1;          //堵车指示
  42   1              led4=1;          // 等待时间切换标志
  43   1                                        
  44   1      }
  45          
  46          //暂停程序
  47          void  zanting(void)                                     
  48             {
  49   1                      if(key3_flag)  
  50   1                      {
  51   2                              EX0=0;            //关闭中断  定时器
  52   2                              TR0=0;
  53   2                      }
  54   1                      else
  55   1                      {
C51 COMPILER V8.02   SHI                                                                   06/17/2011 01:00:25 PAGE 2   

  56   2                              EX0=1;
  57   2                              TR0=1;
  58   2                      }
  59   1                 key3_flag=!key3_flag;
  60   1         }
  61          
  62          
  63          //计算数据处理 
  64          void jisuan()           
  65          {
  66   1              if(pulse<=180)                   
  67   1              {
  68   2                      distance=pulse/6+way/3000;
  69   2                      cost=50;                  //60角 
  70   2              }
  71   1              danjia=20;                      //单程价格 
  72   1              if(key2_flag)   danjia=15;         //往返价格 
  73   1              if(pulse>180) 
  74   1              {               
  75   2                      distance=pulse/6+way/3000;
  76   2                      cost=danjia*(distance-30)/10+50;
  77   2              }
  78   1              
  79   1          wait=minute*100+second;                        
  80   1      }
  81           //显示的辅助程序,分离一个数的各个数字
  82           void fenli(uint temp)   //数据的分离处理 
  83          {
  84   1              if(temp>9999) temp=9999;
  85   1              qianwei=temp/1000;
  86   1              baiwei=temp/100%10;
  87   1              shiwei=temp%100/10;
  88   1              gewei=temp%10;    
  89   1      }
  90          
  91          //延时约1ms,数码管显示时使用
  92          void diplay_delay(void)             
  93            {
  94   1           uchar i;
  95   1           for(i=0;i<240;i++);
  96   1         }
  97          
  98          //显示程序;
  99          void led_show()
 100          {
 101   1              //-----显示路程或者等待时间----
 102   1              if(key1_flag) fenli(distance);
 103   1              else     fenli(wait);
 104   1              P2=0xfe;   
 105   1              P0=led_seg_code[gewei];
 106   1              diplay_delay();
 107   1          P2=0xfd;
 108   1          if(key1_flag) P0=led_seg_code[shiwei]|0x80;    //如果是路程,点亮小数点儿
 109   1              else     P0=led_seg_code[shiwei];       //如果是时间,不需要点亮小数点儿
 110   1              diplay_delay();
 111   1              P2=0xfb;
 112   1              if(key1_flag)  P0=led_seg_code[baiwei];
 113   1              else           P0=led_seg_code[baiwei]|0x80;   
 114   1              diplay_delay();
 115   1              P2=0xfb7;
 116   1              P0=led_seg_code[qianwei];
 117   1              diplay_delay();
C51 COMPILER V8.02   SHI                                                                   06/17/2011 01:00:25 PAGE 3   

 118   1      
 119   1              //-----显示价格----
 120   1              fenli(cost);
 121   1              P2=0xef;
 122   1              P0=led_seg_code[gewei];
 123   1              diplay_delay();
 124   1              P2=0xdf;
 125   1              P0=led_seg_code[shiwei]|0x80;
 126   1              diplay_delay();
 127   1              P2=0xbf;
 128   1              P0=led_seg_code[baiwei];
 129   1              diplay_delay();
 130   1              P2=0x7f;
 131   1              P0=led_seg_code[qianwei];
 132   1              diplay_delay(); 
 133   1        }
 134           
 135           
 136           //延时时基为1ms
 137           void delay(uint x)                       
 138          {
 139   1               int i,j;
 140   1               for(i=x;i>0;i--)
 141   1                   for(j=340;j>0;j--);
 142   1      }
 143          
 144          
 145           //键盘的扫描
 146           void keyscan()
 147           {   if(key1==0)     // 按键消抖并判断按下去的次数为基数还是偶数                            
 148   1           { delay(5);
 149   2             if(key1==0)
 150   2                   key1_flag=!key1_flag;
 151   2                }
 152   1                if(key0==0)     // 清零                            
 153   1           { delay(5);
 154   2             if(key0==0)
 155   2                   initial_data();
 156   2               }
 157   1               if(key3==0)     // 暂停                            
 158   1           { delay(5);
 159   2             if(key3==0)
 160   2                   zanting();
 161   2               }
 162   1               if(key2==0)     // 单程还是往返                            
 163   1           { delay(5);
 164   2             if(key2==0)   
 165   2                 key2_flag=!key2_flag;
 166   2               }
 167   1               //指示等扫描
 168   1               led1=!key2_flag; //  指示,单程还是往返,灯低电平点亮;         往返亮;
 169   1               led2=key3_flag;  //   指示,暂停时亮; 
 170   1               led3=flag;       // 指示是否等待;
 171   1               led4=key1_flag;   //切换指示,显示路程还是等待时间;
 172   1               diplay_delay();      
 173   1                                                              
 174   1      }
 175          
 176          //定时器初始化  
 177          void initial_time()                       
 178          {
 179   1              TMOD=0x01;
C51 COMPILER V8.02   SHI                                                                   06/17/2011 01:00:25 PAGE 4   

 180   1              TH0=(65536-10000)/256;
 181   1              TL0=(65536-10000)%256;
 182   1              IE=0x83;
 183   1              IT0=1;    //外部边沿触发方式 
 184   1              TR0=1;
 185   1      }
 186          // 中断记录脉冲数
 187          void zd() interrupt 0             //中断0
 188          {
 189   1              aa++;
 190   1              if(flag)                pulse++;                 //进入中途等待计价 
 191   1      }
 192          //********* 定时器 ********
 193          void time0() interrupt 1          //定时0
 194          {
 195   1              TH0=(65536-10000)/256;          //10ms
 196   1              TL0=(65536-10000)%256;
 197   1              tt++;
 198   1              if(tt>=100)                //1s采样
 199   1              {
 200   2                      tt=0;
 201   2                      aa=aa/5;          //速度(n*圈/s)
 202   2                      if(aa<=5)    flag=0;
 203   2                      else         flag=1;
 204   2                      aa=0;
 205   2              }
 206   1              if(!flag)
 207   1              { 
 208   2                way++;
 209   2                dengdai++;
 210   2            if(dengdai==100)
 211   2                { dengdai=0;
 212   3                       second++;
 213   3                       if(second==60)
 214   3                       { 
 215   4                          minute++;
 216   4                              second=0;
 217   4                       }
 218   3                 }         
 219   2            }
 220   1      }
 221                 
 222           //主程序                     
 223           void main(void)
 224           {
 225   1          initial_data();           //初始化数据
 226   1          initial_time();              //初始化定时器
 227   1         while(1)
 228   1         {
 229   2          keyscan();
 230   2              jisuan();
 231   2              led_show();
 232   2              }
 233   1       }
 234          
 235          
 236          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    751    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V8.02   SHI                                                                   06/17/2011 01:00:25 PAGE 5   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     33    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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