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

📄 060305.lst

📁 基于单片机的自行车计时、计速、计程的码表设计
💻 LST
📖 第 1 页 / 共 2 页
字号:
 200   1              ack();
 201   1              wri_one_char(0x01);
 202   1              ack();
 203   1              sta();
 204   1              wri_one_char(0xa1);
 205   1              ack();
 206   1              stoa+=read();
 207   1              no_ack();       
 208   1              stop();
 209   1              stoa+=(miles/10);
 210   1              return stoa;
 211   1              }
 212          void stoa_miles()
 213                  {
 214   1              unsigned int stoa=0;
 215   1              unsigned char stob;
 216   1              stoa=cal_total_miles();
 217   1      //上面程序将数据从存储器中读出加上当前里程,下面将数据回存到存储器中
 218   1              sta();
 219   1              wri_one_char(0xa0);
 220   1              ack();
 221   1              wri_one_char(0x01);
 222   1              ack();
 223   1              stob=stoa&0x00ff;
 224   1              wri_one_char(stob);
 225   1              ack();
 226   1              stop();
 227   1              Delay1ms(100);
 228   1              //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 229   1              sta();
 230   1              wri_one_char(0xa0);
 231   1              ack();
 232   1              wri_one_char(0x00);
 233   1              ack();
 234   1              stob=stoa>>8;
 235   1              wri_one_char(stob);
 236   1              ack();
C51 COMPILER V8.01   060305                                                                05/18/2008 12:47:07 PAGE 5   

 237   1              stop();
 238   1              Delay1ms(100);
 239   1              }
 240          void disp_MILES_MSpeed()                  //显示最大速度以及总里程
 241                  {
 242   1               unsigned int  MilTemp;
 243   1               unsigned char chartemp[9];
 244   1               LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
 245   1               MilTemp=cal_total_miles();
 246   1               chartemp[8]=0xff;
 247   1               chartemp[4]=0x2e;
 248   1               chartemp[6]=0x6b;
 249   1               chartemp[7]=0x6d;
 250   1               chartemp[5]=MilTemp%10+0x30;
 251   1               MilTemp/=10;
 252   1               chartemp[3]=MilTemp%10+0x30;
 253   1               MilTemp/=10;
 254   1               chartemp[2]=MilTemp%10+0x30;
 255   1               MilTemp/=10;
 256   1               chartemp[1]=MilTemp%10+0x30;
 257   1               MilTemp/=10;
 258   1               chartemp[0]=MilTemp%10+0x30;
 259   1               GotoXY(4,0);
 260   1               Print(chartemp);
 261   1      //上面一段显示了总里程,下面一段将显示行驶中的最大速度
 262   1               Delay1ms(100);
 263   1               MilTemp=max_speed;
 264   1               chartemp[8]=0xff;
 265   1               chartemp[2]=0x2e;
 266   1               chartemp[4]=0x6b;
 267   1               chartemp[5]=0x6d;
 268   1               chartemp[6]=0x2f;
 269   1               chartemp[7]=0x68;
 270   1               chartemp[3]=MilTemp%10+0x30;
 271   1               MilTemp/=10;
 272   1               chartemp[1]=MilTemp%10+0x30;
 273   1               MilTemp/=10;
 274   1               chartemp[0]=MilTemp%10+0x30;
 275   1               GotoXY(4,1);
 276   1               Print(chartemp);
 277   1              }
 278          void disp_wheel_radi()
 279                  {
 280   1               unsigned char tempchar2;
 281   1               unsigned char tempchatable[]={0x47,0x52,0x49,0x54,0x48,0x3a,0xff};
 282   1               LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
 283   1               Delay1ms(100);
 284   1               GotoXY(5,0);
 285   1               Print(tempchatable);
 286   1               tempchar2=wheel_radi;
 287   1               tempchatable[2]=tempchar2%10+0x30;
 288   1               tempchar2/=10;
 289   1               tempchatable[1]=tempchar2%10+0x30;
 290   1               tempchar2/=10;
 291   1               tempchatable[0]=tempchar2%10+0x30;
 292   1               tempchatable[3]=0x63;
 293   1               tempchatable[4]=0x6d;
 294   1               tempchatable[5]=0xff;
 295   1               GotoXY(5,1);
 296   1               Print(tempchatable);
 297   1              }
 298          void chan_radi()                                 //改变车轮周长
C51 COMPILER V8.01   060305                                                                05/18/2008 12:47:07 PAGE 6   

 299                  {
 300   1              bit changed_flag=0;
 301   1              disp_wheel_radi();
 302   1      //将当前周长显示在lcd上
 303   1              EA=0;
 304   1              do
 305   1                      {
 306   2                       if(!(P1Port&0x04))//如果发现UP键被按下
 307   2                              {
 308   3                               Delay1ms(100);//延时进行前沿消抖
 309   3                               if(!(P1Port&0x04))//确认UP键确实被按下一次
 310   3                                      {
 311   4                                      while(!(P1Port&0x04));//等待UP按键弹起
 312   4                                      Delay1ms(100);//后沿消抖
 313   4                                      wheel_radi++; //车轮周长增加1
 314   4                                      changed_flag=1;//判断车轮周长变化了的标志
 315   4                                      if(wheel_radi>230) wheel_radi=180;
 316   4                                      if(wheel_radi<180) wheel_radi=180;//限制车轮周长在180~230cm之间
 317   4                                      disp_wheel_radi();//将车轮周长在lcd上显示出来
 318   4                                      }
 319   3                               }
 320   2                       if(!(P1Port&0x02))//判断MODE键是否被按下 
 321   2                              {
 322   3                               Delay1ms(100);
 323   3                               led1=1;
 324   3                               if(!(P1Port&0x02))
 325   3                                      {
 326   4                                       while(!(P1Port&0x02));
 327   4                                       Delay1ms(100);
 328   4                                       break;
 329   4                                       }
 330   3                              }
 331   2                      }while(1);
 332   1                      if(changed_flag)
 333   1                      {
 334   2                      changed_flag=0;
 335   2                      sta();
 336   2                      wri_one_char(0xa0);
 337   2                      ack();
 338   2                      wri_one_char(0x02);
 339   2                      ack();
 340   2                      wri_one_char(wheel_radi);
 341   2                      ack();
 342   2                      stop();
 343   2                      Delay1ms(100);
 344   2                      miles=0x0000;
 345   2                      sta();
 346   2                      wri_one_char(0xa0);
 347   2                      ack();
 348   2                      wri_one_char(0x00);
 349   2                      ack();
 350   2                      wri_one_char(0x00);
 351   2                      ack();
 352   2                      stop();
 353   2                      Delay1ms(100);
 354   2                      sta();
 355   2                      wri_one_char(0xa0);
 356   2                      ack();
 357   2                      wri_one_char(0x01);
 358   2                      ack();
 359   2                      wri_one_char(0x00);
 360   2                      ack();
C51 COMPILER V8.01   060305                                                                05/18/2008 12:47:07 PAGE 7   

 361   2                      stop();
 362   2                      inttial_reg();
 363   2                      }
 364   1                      EA=1;
 365   1              }
 366          void main (void)
 367          {  
 368   1         bit dispflag1;
 369   1         bit dispflag2;
 370   1         bit MODE2flag;
 371   1         unsigned int to_time;          
 372   1         initiall();
 373   1         led1=0;//测试用句
 374   1         led2=0;//测试用句
 375   1         led3=0;//测试用句
 376   1         led4=0;//测试用句
 377   1         MODE2flag=0;
 378   1         IE=0x8f;        //开中断
 379   1         TR0=1;
 380   1         Delay1ms(1);
 381   1         TR1=1;          
 382   1         do{ 
 383   2              if(second1%2==0) dispflag1=0;
 384   2                else            dispflag1=1;
 385   2                    if(dispflag1!=dispflag2)
 386   2                           { 
 387   3                                dispflag2=dispflag1;
 388   3             display();
 389   3                 GotoXY(0,0);
 390   3                 Print(wspeedarray);
 391   3                 GotoXY(8,0);
 392   3                 Print(timearray);
 393   3                 GotoXY(0,1);
 394   3                 Print(speedarray);
 395   3                 GotoXY(8,1);
 396   3                 Print(milesarray);
 397   3                 }
 398   2                 butt_down=P1Port;
 399   2                 if(!(P1Port&0x01))//关机程序
 400   2                      {
 401   3                              EA=0;
 402   3                              for(to_time=6000;to_time>0;to_time--);
 403   3                              if(P1Port&0x01)break;
 404   3                              else{
 405   4                                      stoa_miles();
 406   4                                      LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏  shut down lcd
 407   4                                      LCD_Write(0x08,1);//显示关
 408   4                                      PCON+=0x02;//进入掉电方式
 409   4                                      }
 410   3                      }
 411   2                      else if(!(P1Port&0x02))//判断是否MODE键被按下第一次,若是则进入下一步×××××××××××××××××

⌨️ 快捷键说明

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