📄 hong_jie.lst
字号:
252 1 else if (X==3)
253 1 {X=0x88;}
254 1 else if (X==4)
255 1 {X=0x98;}
256 1 pos = X+Y ;
257 1
258 1 send_command(pos); //显示地址
259 1 }
260
261 /*********************************************************
262 * *
263 * 图形显示 *
264 * *
265 *********************************************************/
266 void photodisplay(uchar *bmp)
267 {
268 1 uchar i,j;
269 1
270 1 send_command(0x34); //写数据时,关闭图形显示
271 1
272 1 for(i=0;i<32;i++)
273 1 {
274 2 send_command(0x80+i); //先写入水平坐标值
275 2 send_command(0x80); //写入垂直坐标值
276 2 for(j=0;j<16;j++) //再写入两个8位元的数据
277 2 send_data(*bmp++);
278 2 // delay(1);
279 2 }
280 1
281 1 for(i=0;i<32;i++)
282 1 {
283 2 send_command(0x80+i);
284 2 send_command(0x88);
285 2 for(j=0;j<16;j++)
286 2 send_data(*bmp++);
287 2 // delay(1);
288 2 }
289 1 send_command(0x36); //写完数据,开图形显示
290 1 }
291
292
293 /*****************1ms延时程序****************/
294 delay1ms(uint t)
295 {
296 1 for(i=0;i<t;i++)
297 1 for(n=0;n<120;n++)
298 1 ;
299 1 }
300 //
301 /************100us延时程序********************/
302 delay_jingque(uint m)
303 {
C51 COMPILER V8.02 HONG_JIE 09/06/2008 20:26:15 PAGE 6
304 1 TMOD=0x22;
305 1 TR0=1;
306 1 while(m!=0)
307 1 {
308 2 TH0=0x9b;
309 2 TL0=0x9b;
310 2 while(TF0!=1);
311 2 TF0=0;
312 2 m--;
313 2 }
314 1 TR0=0;
315 1 }
316 //
317 /*****************初始化函数******************/
318
319 /********************主函数**************************/
320 /*main()
321 {
322 IE = 0x81; //允许总中断中断,使能 INT0 外部中断
323 TCON = 0x01; //触发方式为脉冲负边沿触发
324 clearmen();
325 while(1);
326 } */
327 /****************外部中断0中断服务程序*********************/
328 void IR_IN() interrupt 0 using 0
329 {
330 1 unsigned char j,k,N=0;
331 1 EX0 = 0;
332 1 delay_jingque(15);
333 1 if (IRIN==1)
334 1 {
335 2 EX0 =1;
336 2 return;
337 2 }
338 1 //确认IR信号出现
339 1 while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
340 1 {delay_jingque(1);}
341 1
342 1 for (j=0;j<4;j++) //收集四组数据
343 1 {
344 2 for (k=0;k<8;k++) //每组数据有8位
345 2 {
346 3 while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
347 3 {delay_jingque(1);}
348 3 while (!IRIN) //等 IR 变为高电平
349 3 {delay_jingque(1);}
350 3 while (IRIN) //计算IR高电平时长
351 3 {
352 4 delay_jingque(1);
353 4 N++;
354 4 if (N>=28)
355 4 {
356 5 EX0=1;
357 5 return;
358 5 } //0.1ms计数过长自动离开(超过2.8ms)。
359 4 } //高电平计数完毕
360 3 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
361 3 if (N>=12) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
362 3 N=0; //1.2ms~2.8ms算作"1"
363 3 }//end for k
364 2 }//end for j
365 1 if (IRCOM[2]!=~IRCOM[3])
C51 COMPILER V8.02 HONG_JIE 09/06/2008 20:26:15 PAGE 7
366 1 {
367 2 EX0=1;
368 2 return;
369 2 }
370 1 IRCOM[5]=IRCOM[2] & 0x0F; //取键码的低四位
371 1 IRCOM[6]=IRCOM[2] >> 4; //右移4次,高四位变为低四位
372 1 if(IRCOM[6]==8)
373 1 {
374 2 key=IRCOM[5]+1;
375 2 } //解码后判断的键值1~16
376 1 if(IRCOM[6]==9)
377 1 {
378 2 key=IRCOM[5]+17;
379 2 } //解码后判断的键值17~32
380 1
381 1 lcd_pos(2,2);
382 1 send_data(0x30+key/10);
383 1 send_data(0x30+key%10) ;
384 1
385 1 EX0=1;
386 1 }
387
388 //矩阵按键程序
389 void keyscan()
390 {
391 1 P0=0xfe;
392 1 temp=P0;
393 1 temp&=0xf0;
394 1 if(temp!=0xf0)
395 1 {
396 2 delay(20);
397 2 switch(temp)
398 2 {
399 3 case 0xe0: kk=0;break;
400 3 case 0xd0: kk=1;break;
401 3 case 0xb0: kk=2;break;
402 3 case 0x70: kk=3;break;
403 3
404 3 }
405 2 }
406 1 P0=0xfd;
407 1 temp=P0;
408 1 temp&=0xf0;
409 1 if(temp!=0xf0)
410 1 {
411 2 delay(20);
412 2 switch(temp)
413 2 {
414 3 case 0xe0: kk=4;break;
415 3 case 0xd0: kk=5;break;
416 3 case 0xb0: kk=6;break;
417 3 case 0x70: kk=7;break;
418 3
419 3 }
420 2 }
421 1 P0=0xfb;
422 1 temp=P0;
423 1 temp&=0xf0;
424 1 if(temp!=0xf0)
425 1 {
426 2 delay(20);
427 2 switch(temp)
C51 COMPILER V8.02 HONG_JIE 09/06/2008 20:26:15 PAGE 8
428 2 {
429 3 case 0xe0: kk=8;break;
430 3 case 0xd0: kk=9;break;
431 3 case 0xb0: kk=10;break;
432 3 case 0x70: kk=11;break;
433 3
434 3 }
435 2 }
436 1 P0=0xf7;
437 1 temp=P0;
438 1 temp&=0xf0;
439 1 if(temp!=0xf0)
440 1 {
441 2 delay(20);
442 2 switch(temp)
443 2 {
444 3 case 0xe0: kk=12;break;
445 3 case 0xd0: kk=13;break;
446 3 case 0xb0: kk=14;break;
447 3 case 0x70: kk=15;break;
448 3
449 3 }
450 2 }
451 1
452 1
453 1
454 1
455 1 }
456 main()
457 {
458 1 uchar command_data;
459 1 uchar i;
460 1 EA=1;
461 1 EX0=1;
462 1 IT0=1;
463 1 IRIN=1; //I/O口初始化
464 1 lcd_init();
465 1 send_command(0x01);
466 1 //photodisplay(Photo1); //显示图片1
467 1 //lcdflag();
468 1 //send_command(0x80);
469 1 //send_data(0xa1);
470 1 //send_data(0xf8);
471 1 //delay(1000);
472 1 //send_command(0x80);
473 1 // send_command(0x00);
474 1 while(1)
475 1 {
476 2 keyscan();
477 2 //lcd_pos(2,2);
478 2 // send_data(0x30+key/10);
479 2 // send_data(0x30+key%10) ;
480 2
481 2
482 2 }
483 1
484 1
485 1
486 1
487 1
488 1
489 1 }
C51 COMPILER V8.02 HONG_JIE 09/06/2008 20:26:15 PAGE 9
*** WARNING C280 IN LINE 458 OF HONG_JIE.C: 'command_data': unreferenced local variable
*** WARNING C280 IN LINE 459 OF HONG_JIE.C: 'i': unreferenced local variable
490
491 //
492 //
493 /**********************************END************************************/
494
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 953 ----
CONSTANT SIZE = 1024 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -