📄 text7.lst
字号:
242 uchar Receive()
243 {
244 1 uchar tmp,j=0,i;
245 1 DE = 1;
246 1 RE = 1;
247 1 RI = 0;
248 1 while ((!RI)&&j<200)
249 1 {
250 2 for(i=0;i<50;i++);
251 2 j++;
252 2 }
253 1 if(RI)
254 1 {
255 2 tmp = SBUF;
256 2 RI=0;
257 2 return tmp;
258 2 }
259 1 else
260 1 return 0xff;
261 1 }
262
263 /**********延时1ms程序*************/
264 void Delay_ms(uint count)
265 {
266 1 uchar i,j;
267 1 for(;count>0;count--)
268 1 {
269 2 for(j=2;j>0;j--)
270 2 for(i=0;i<248;i++)
271 2 ;
272 2 }
273 1 }
274
275 /**********修改卡数据*************/
276 void dataprocess()
277 {
278 1 uchar k;
279 1 if(DATA[2]==0x0A)
280 1 {
281 2 DATA[2]=0x05; //修改为还车状态
282 2 }
283 1 else if(DATA[2]==0x05) //如果是还车状态的话,先扣费,再转为取车状态
284 1 {
285 2 if(DATA[0]!=0x00)
286 2 {
287 3 DATA[0]=DATA[0]-1;
288 3 DATA[2]=0x0A;
289 3 }
290 2 else
291 2 bee=1; //如果余额为0,蜂鸣器长鸣
292 2
293 2 }
294 1 for(k=0;k<3;k++)
295 1 {
296 2 WRITEDATA[4+k]=DATA[k];
297 2 }
298 1 if(DATA[2]==0x0A)
299 1 {
300 2 WRITEDATA[20]=0x97^DATA[0]+0x80;
301 2 }
302 1 else if(DATA[2]==0x05)
303 1 {
C51 COMPILER V7.50 TEXT7 04/10/2009 11:52:04 PAGE 6
304 2 WRITEDATA[20]=0x98^DATA[0]+0x80;
305 2 }
306 1 }
307
308 /**********液晶显示余额及卡状态*************/
309 void Display()
310 {
311 1 Account[10]=DATA[0]/100%10+0x30;
312 1 Account[11]=DATA[0]/10%10+0x30;
313 1 Account[12]=DATA[0]%10+0x30;
314 1 Borrow_bicycle[4]=addr/100%10+0x30;
315 1 Borrow_bicycle[5]=addr/10%10+0x30;
316 1 Borrow_bicycle[6]=addr%10+0x30;
317 1 Return_bicycle[4]=addr/100%10+0x30;
318 1 Return_bicycle[5]=addr/10%10+0x30;
319 1 Return_bicycle[6]=addr%10+0x30;
320 1 if(DATA[2]==0x05)
321 1 {
322 2 LCD_Wcmd ( 0x01 );
323 2 OutWord(0x88, 8, Account);
324 2 OutWord(0x90, 8, Borrow_bicycle);
325 2 }
326 1 else if(DATA[2]==0x0a)
327 1 {
328 2 LCD_Wcmd ( 0x01 );
329 2 OutWord(0x88, 8, Account);
330 2 OutWord(0x90, 8, Return_bicycle);
331 2 }
332 1 Delay_ms(200);
333 1 Delay_ms(200);
334 1 }
335 void LCD_Busy () /*判断lcd是否处于忙状态,是返回1,否返回0*/
336 {
337 1
338 1 lcd_port = 0xff;
339 1 RS = 0;
340 1 RW = 1;
341 1 EN = 1;
342 1 while (rd);
343 1 EN = 0;
344 1 }
345
346 void LCD_Wcmd ( uchar cmd ) /*对lcd指令寄存器写显示控制命令字*/
347 {
348 1 LCD_Busy();
349 1 RS = 0;
350 1 RW = 0;
351 1 lcd_port = cmd; /*写指令到端口上*/
352 1 EN = 1;
353 1 _nop_ ();
354 1 EN = 0;
355 1 }
356
357 void LCD_Wdat ( uchar dat ) /*对lcd数据寄存器写显示数据*/
358 {
359 1 LCD_Busy();
360 1 RS = 1;
361 1 RW = 0;
362 1 lcd_port = dat; /*写数据到端口上*/
363 1 EN = 1;
364 1 _nop_ ();
365 1 EN = 0;
C51 COMPILER V7.50 TEXT7 04/10/2009 11:52:04 PAGE 7
366 1 }
367
368 void LCD_Init () /*lcd初始化*/
369 {
370 1 LCD_Wcmd ( 0x30 ); /*功能设置*/
371 1 LCD_Wcmd ( 0x01 ); /*清屏*/
372 1 LCD_Wcmd ( 0x0c ); /*显示开,光标关,光标闪烁关*/
373 1 OutWord(0x80, 8, Wellcome);
374 1 OutWord(0x88, 8, Unit);
375 1 OutWord(0x90, 8, Design);
376 1 OutWord(0x98, 8, Time);
377 1 Delay_ms(200);
378 1 Delay_ms(200);
379 1 }
380
381 void OutWord( uchar place, uchar unit, uchar charcode[] ) /*输出中文或字符*/
382 {
383 1 uchar i;
384 1 LCD_Wcmd ( place );
385 1 for ( i=0; i < unit*2; i++)
386 1 LCD_Wdat ( charcode[i] );
387 1 }
388
389 void Transmit()
390 {
391 1 uchar tmp,i;
392 1 P1= 0xFF;
393 1 addr=P1;
394 1 tmp = addr-1;
395 1 i=0;
396 1 while(tmp!=addr)
397 1 {
398 2 uint j=0;
399 2 i++;
400 2 DE = 1;
401 2 RE = 1;
402 2 /* 发送从机地址 */
403 2 TI = 0;
404 2 TB8 = 1; // 发送地址帧
405 2 SBUF = addr;
406 2 while(!TI);
407 2 TI = 0;
408 2 DE = 0;
409 2 RE = 0;
410 2 RI=0;
411 2 /* 接收从机应答 */
412 2 while ((!RI)&&j<1000)
413 2 {
414 3 j++;
415 3 }
416 2 if(RI)
417 2 {
418 3 tmp = SBUF;
419 3 RI=0;
420 3 }
421 2 else if(i==10)
422 2 {
423 3 tmp=addr;
424 3 i=0;
425 3 }
426 2 }
427 1
C51 COMPILER V7.50 TEXT7 04/10/2009 11:52:04 PAGE 8
428 1 /* 发送数据并接收校验信息,如果接收到SUCC,表示从机接收成功,否则将重新发送该组数据 */
429 1 tmp = ERR;
430 1 i=0;
431 1 while(tmp!=SUCC)
432 1 {
433 2 uint j=0;
434 2 i++;
435 2 DE = 1;
436 2 RE = 1;
437 2 TI = 0;
438 2 TB8 = 0;
439 2 SBUF =DATA[2];
440 2 while(!TI);
441 2 TI = 0; // 发送数据
442 2 DE = 0;
443 2 RE = 0;
444 2 RI = 0;
445 2 while ((!RI)&&j<1000)
446 2 {
447 3 j++;
448 3 }
449 2 if(RI)
450 2 {
451 3 tmp = SBUF;
452 3 if(tmp==SUCC)
453 3 {
454 4 Transmit_f=1;
455 4 }
456 3 else if(tmp==ERR)
457 3 {
458 4 tmp=SUCC;
459 4 LCD_Wcmd(0x01);
460 4 OutWord(0x88, 8, Transmit_error);
461 4 // Delay_ms(1000);
462 4 }
463 3 RI = 0;
464 3 }
465 2 else if(i==10)
466 2 {
467 3 tmp=SUCC;
468 3 i=0;
469 3 LCD_Wcmd(0x01);
470 3 OutWord(0x88, 8, Transmit_error);
471 3 // Delay_ms(1000);
472 3 }
473 2
474 2 }
475 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1605 ----
CONSTANT SIZE = 111 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 13
IDATA SIZE = 96 ----
BIT SIZE = 1 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -