📄 060305.lst
字号:
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 + -