📄 shtxx_sample_code.lst
字号:
306 1 i = ISendStr_8(0xd0,0x04,dt);
307 1 lcd_wrd(0x30+(uchar)i);
308 1 mn = ((mn/10)<<4)+(mn%10);
309 1 i = ISendStr_8(0xd0,0x05,mn);
310 1 lcd_wrd(0x30+(uchar)i);
311 1 yr = ((yr/10)<<4)+(yr%10);
312 1 i = ISendStr_8(0xd0,0x06,yr);
313 1 lcd_wrd(0x30+(uchar)i);
314 1 }
315
316
317 void ad_en(void)
318 {
319 1
320 1 e = 0; //lcd not enable
321 1 le = 0; //three-states latched
322 1 ce = 0; //ad enable
323 1
324 1 }
325 void lcd_en(void)
326 {
327 1 ce = 1; //ad not enable
328 1 le = 0; //three-states latched
329 1 e = 1; //lcd enable
330 1 }
331
332 void three_en(void)
333 {
334 1 ce = 1; //ad not enable
335 1 e = 0; //lcd not enable
336 1 le = 1; //tree-states open
337 1 }
338
339
340 void lcd_ini()
341 {
342 1 delay(100);
343 1 lcd_wrc(0x34);
344 1 delay(10);
345 1 lcd_wrc(0x30);
346 1 delay(10);
347 1 lcd_wrc(0x01);
348 1 delay(10);
349 1 lcd_wrc(0x06);
350 1 delay(10);
351 1 lcd_wrc(0x0c);
352 1 delay(200);
353 1 }
354 void lcd_wrc(uchar com)
355 {
356 1 lcd_en();
357 1 lcd_checkbusy();
358 1 rs = 0;
359 1 rw = 0;
360 1 P0 = com;
361 1 e = 1;
362 1 delay(10);
363 1 e = 0;
C51 COMPILER V7.07 SHTXX_SAMPLE_CODE 04/04/2007 18:18:08 PAGE 7
364 1 }
365
366 void lcd_wrd(uchar dat)
367 {
368 1 // checkbusy();
369 1 lcd_en();
370 1 lcd_checkbusy();
371 1 rs = 1;
372 1 rw = 0;
373 1 P0 = dat;
374 1 e = 1;
375 1 delay(5);
376 1 e = 0;
377 1 }
378 void lcd_checkbusy()
379 {
380 1
381 1 uchar busy = 0;
382 1 lcd_en();
383 1 P0 = 0XFF;
384 1 busy = P0;
385 1 if(busy>0x7f)
386 1 {
387 2 rs = 0;
388 2 rw = 1;
389 2 e = 1;
390 2 busy = P0;
391 2 e = 0;
392 2 delay(10);
393 2 }
394 1 }
395 uchar lcd_rdd();
396 void delay(uchar n)
397 {
398 1 while(n--);
399 1 }
400
401 void ldelay(uchar n)
402 {
403 1 uchar a=250;
404 1 while(a--)
405 1 {
406 2 while(n--);
407 2 }
408 1 }
409
410
411 void lcd_on()
412 {
413 1 lcd_deng = 0;
414 1 }
415 void lcd_off()
416 {
417 1 lcd_deng = 1;
418 1 }
419 uchar lcd_read_ac()
420 {
421 1 uchar dat = 0;
422 1 lcd_en();
423 1 // P0 = 0X00;
424 1 e = 1;
425 1 rs = 0;
C51 COMPILER V7.07 SHTXX_SAMPLE_CODE 04/04/2007 18:18:08 PAGE 8
426 1 rw = 1;
427 1 // e = 1;
428 1 delay(10);
429 1 dat = P0;
430 1 // delay(10);
431 1 // e = 0;
432 1 return(dat&0x7f);
433 1 }
434 void lcd_dis_num(uint dat)
435 {
436 1 uint a=0;
437 1 dat =dat%10000;
438 1 a =dat/1000;
439 1 lcd_wrd(0x30+a);
440 1 dat =dat%1000;
441 1 a =dat/100;
442 1 lcd_wrd(0x30+a);
443 1 dat =dat%100;
444 1 a=dat/10;
445 1 lcd_wrd(0x30+a);
446 1 dat =dat%10;
447 1 lcd_wrd(0x30+dat);
448 1 }
449 void lcd_dis_ch(uchar h,uchar l)
450 {
451 1 lcd_wrd(h);
452 1 lcd_wrd(l);
453 1 }
454
455 void lcd_add(uchar h,uchar l) //定位地址
456 {
457 1 l--;
458 1 switch(h)
459 1 {
460 2 case 1:
461 2 {
462 3 lcd_wrc(0x80+l);
463 3 break;
464 3 }
465 2 case 2:
466 2 {
467 3 lcd_wrc(0x90+l);
468 3 break;
469 3 }
470 2 case 3:
471 2 {
472 3 lcd_wrc(0x88+l);
473 3 break;
474 3 }
475 2 case 4:
476 2 {
477 3 lcd_wrc(0x98+l);
478 3 break;
479 3 }
480 2 }
481 1 }
482
483
484
485 unsigned char key_data() //判断键值
486 {
487 1 uchar a=0,b=0,c=0,d=0,i=0;
C51 COMPILER V7.07 SHTXX_SAMPLE_CODE 04/04/2007 18:18:08 PAGE 9
488 1 a = 0xef;
489 1 for(i = 0;i<4;i++) //读行
490 1 {
491 2 P1 = a;
492 2 delay(10);
493 2 b = P1;
494 2 b = b&0x0f;
495 2 // b = b>>4;
496 2 if(b!=0x0F) //表示有键按下
497 2 {
498 3 delay(200); //软件延时 确认有键按下
499 3 b = P1&0X0F;
500 3 // b = b>>4;
501 3 if(b != 0x0F)
502 3 {
503 4 // return b;
504 4
505 4 c=b;
506 4 if(c==0X07)
507 4 {
508 5 d=i*4+3;
509 5 }
510 4 else if(c==0X0B)
511 4 {
512 5 d=i*4+2;
513 5 }
514 4 else if(c==0X0D)
515 4 {
516 5 d=i*4+1;
517 5 }
518 4 else if(c==0X0E)
519 4 {
520 5 d=i*4;
521 5 }
522 4 break;
523 4 }
524 3 }
525 2 else
526 2 {
527 3 a = a<<1;
528 3 a = a+0x01;
529 3 if(a==0xFF)
530 3 {
531 4 // return 0x0f;
532 4 d = 0x0f+1;
533 4 break;
534 4 }
535 3 }
536 2 }
537 1 return d;
538 1 }
539
540
541
542 void Start_I2c() //起动总线函数
543 {
544 1 SDA=1; //发送起始条件的数据信号
545 1 _Nop();
546 1 SCL=1;
547 1 _Nop(); //起始条件建立时间大于4.7us,延时
548 1 _Nop();
549 1 _Nop();
C51 COMPILER V7.07 SHTXX_SAMPLE_CODE 04/04/2007 18:18:08 PAGE 10
550 1 _Nop();
551 1 _Nop();
552 1 SDA=0; //发送起始信号
553 1 _Nop(); // 起始条件锁定时间大于4
554 1 _Nop();
555 1 _Nop();
556 1 _Nop();
557 1 _Nop();
558 1 SCL=0; //钳住I2C总线,准备发送或接收数据
559 1 _Nop();
560 1 _Nop();
561 1 }
562
563 void Stop_I2c() //结束总线函数
564 {
565 1 SDA=0; /*发送结束条件的数据信号*/
566 1 _Nop(); /*发送结束条件的时钟信号*/
567 1 SCL=1; /*结束条件建立时间大于4*/
568 1 _Nop();
569 1 _Nop();
570 1 _Nop();
571 1 _Nop();
572 1 _Nop();
573 1 SDA=1; /*发送I2C总线结束信号*/
574 1 _Nop();
575 1 _Nop();
576 1 _Nop();
577 1 _Nop();
578 1 }
579
580
581
582 void SendByte(uchar c) //字节数据传送函数send
583 {
584 1 uchar BitCnt;
585 1 for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
586 1 {
587 2 if((c<<BitCnt)&0x80)SDA=1; /*判断发送位*/
588 2 else SDA=0;
589 2 _Nop();
590 2 SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/
591 2 _Nop();
592 2 _Nop(); /*保证时钟高电平周期大于4*/
593 2 _Nop();
594 2 _Nop();
595 2 _Nop();
596 2 SCL=0;
597 2 }
598 1 _Nop();
599 1 _Nop();
600 1 SDA=1; /*8位发送完后释放数据线,准备接收应答位*/
601 1 _Nop();
602 1 _Nop();
603 1 SCL=1;
604 1 _Nop();
605 1 _Nop();
606 1 _Nop();
607 1 if(SDA==1)ack=0;
608 1 else ack=1; /*判断是否接收到应答信号*/
609 1 SCL=0;
610 1 _Nop();
611 1 _Nop();
C51 COMPILER V7.07 SHTXX_SAMPLE_CODE 04/04/2007 18:18:08 PAGE 11
612 1 }
613
614
615 uchar RcvByte() //字节数据传送函数 receive
616 {
617 1 uchar retc;
618 1 uchar BitCnt;
619 1 retc=0;
620 1 SDA=1; /*置数据线为输入方式*/
621 1 for(BitCnt=0;BitCnt<8;BitCnt++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -