📄 xiyiji.lst
字号:
486 { P2=P3=0;
487 1 dingshi();
488 1 while(~pkey())
489 1 {
C51 COMPILER V7.07 XIYIJI 09/11/2005 16:35:01 PAGE 9
490 2 if(sflagg)P2_7=1;
491 2 else P2_7=0;
492 2 pkey();
493 2 if(flag)TR1=0;
494 2 }
495 1 while(1)
496 1 { getkey();
497 2 if((biao==3)||(biao==4)||(biao==5))disp();
498 2 if(biao==6)display();
499 2 }
500 1 }
501 //LCD显示***************************************************************************
502 unsigned char LCD_Wait(void)
503 {
504 1 LcdRs=0;
505 1 LcdRw=1; //_nop_();
506 1 LcdEn=1; //_nop_();
507 1 LcdEn=0;
508 1 return DBPort;
509 1 }
510 //向LCD写入命令或数据************************************************************
511 void LCD_Write(bit style, unsigned char input)
512 {
513 1 LcdEn=0;
514 1 LcdRs=style;
515 1 LcdRw=0; //_nop_();
516 1 DBPort=input; //_nop_();//注意顺序
517 1 LcdEn=1; //_nop_();//注意顺序
518 1 LcdEn=0; //_nop_();
519 1 LCD_Wait();
520 1 }
521 //初始化LCD*****************************************************************
522 void LCD_Initial()
523 {
524 1 LcdEn=0;
525 1 LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
526 1 LCD_Write(LCD_COMMAND,0x38);
527 1 LCD_Write(LCD_COMMAND,0x0c); //开启显示, 无光标
528 1 LCD_Write(LCD_COMMAND,0x01); //清屏
529 1 LCD_Write(LCD_COMMAND,0x06); //AC递增, 画面不动
530 1 }
531 void GotoXY(unsigned char x, unsigned char y)
532 {
533 1 if(y==0)
534 1 LCD_Write(LCD_COMMAND,0x80|x);
535 1 if(y==1)
536 1 LCD_Write(LCD_COMMAND,0x80|(x-0x40));
537 1 }
538 void Print(unsigned char *str)
539 {
540 1 while(*str!='\0')
541 1 {
542 2 LCD_Write(LCD_DATA,*str);
543 2 str++;
544 2 }
545 1 }
546 unsigned char TempBuffer[10];
547 void IntToStr( unsigned char *str)
548 {
549 1 unsigned char a[5]; char i;
550 1 a[0]=minite/10 ; //取得整数值到数组
551 1 a[1]=minite%10 ;
C51 COMPILER V7.07 XIYIJI 09/11/2005 16:35:01 PAGE 10
552 1 a[2]=':' ;
553 1 a[3]=second/10;
554 1 a[4]=second%10;
555 1 for(i=0; i<5; i++) //转成ASCII码
556 1 {if (i!=2) a[i]=a[i]+'0'; }
557 1 for(i=0; i<5; i++)
558 1 { *str=a[i]; str++; } //加入有效的数字
559 1 *str='\0';
560 1 }
561 unsigned char tep[10];
562 void charToStr( unsigned char *str)
563 {
564 1 unsigned char a[5]; char i, t;
565 1 t= ReadTemperature() ;
566 1 a[0]=' '; //取得整数值到数组
567 1 a[1]=(t%100)/10;
568 1 a[2]=(t%100)%10;
569 1 a[3]=0xdf;
570 1 a[4]='c';
571 1 for(i=1; i<3; i++) //转成ASCII码
572 1 a[i]=a[i]+'0';
573 1 for(i=0; i<5; i++)
574 1 { *str=a[i]; str++; } //加入有效的数字
575 1 *str='\0';
576 1 }
577 unsigned char wdsz[10];
578 void wdszStr( unsigned char *str)
579 {
580 1 unsigned char a[5]; char i;
581 1 a[0]=' '; //取得整数值到数组
582 1 a[1]=(wdz%100)/10;
583 1 a[2]=(wdz%100)%10;
584 1 a[3]=0xdf;
585 1 a[4]='c';
586 1 for(i=1; i<3; i++) //转成ASCII码
587 1 a[i]=a[i]+'0';
588 1 for(i=0; i<5; i++)
589 1 { *str=a[i]; str++; } //加入有效的数字
590 1 *str='\0';
591 1 }
592 //显示当前温度温度和要达到的的温度********************************
593 void display(void)
594 {
595 1 wdszStr(&wdsz[0]);
596 1 GotoXY(8,1);
597 1 Print(&wdsz[0]);
598 1 Delay1ms(100);
599 1 charToStr(&tep[0]);
600 1 GotoXY(8,0);
601 1 Print(&tep[0]);
602 1 Delay1ms(100);
603 1 }
604 //只有时间的显示****************************************************
605 void disp(void)
606 {
607 1 IntToStr(&TempBuffer[0]);
608 1 GotoXY(8,1);
609 1 Print(&TempBuffer[0]);
610 1 Delay1ms(100);
611 1 }
612 //定时器0的使用 实现倒计时 和慢洗衣服时 PWM 比值******************************
613 void daojishi(void)
C51 COMPILER V7.07 XIYIJI 09/11/2005 16:35:01 PAGE 11
614 {
615 1 TMOD=0x02;
616 1 TH0=0x06;
617 1 TL0=0x06;
618 1 TR0=1;
619 1 ET0=1;
620 1 EA=1;
621 1 }
622 void t0(void) interrupt 1 using 0
623 {
624 1 unsigned int tcnt,pwm;
625 1 tcnt++;
626 1 if(tcnt==4000)
627 1 {
628 2 pwm++;
629 2 if(pwm==3)sflag=1;
630 2 if(pwm==9) {sflag=0;pwm=0;}
631 2 tcnt=0;
632 2 second--;
633 2 if(second==0)
634 2 {
635 3 second=59;
636 3 minite--;
637 3 if(minite<=0)
638 3 {
639 4 minite=0;
640 4 }
641 3 }
642 2 }
643 1 }
644 //DS18B20读取温度的全部函数如下***************************************************
645 Init_DS18B20(void)//初始化函数
646 {
647 1 unsigned char x=0;
648 1 DQ = 1; //DQ复位
649 1 delay(8); //稍做延时
650 1 DQ = 0; //单片机将DQ拉低
651 1 delay(80); //精确延时 大于 480us
652 1 DQ = 1; //拉高总线
653 1 delay(14);
654 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
655 1 delay(20);
656 1 }
657 //读一个字节**********************************************************
658 ReadOneChar(void)
659 {
660 1 unsigned char i=0,dat = 0;
661 1 for (i=8;i>0;i--)
662 1 {
663 2 DQ = 0; // 给脉冲信号
664 2 dat>>=1;
665 2 DQ = 1; // 给脉冲信号
666 2 if(DQ)
667 2 dat|=0x80;
668 2 delay(4);
669 2 }
670 1 return(dat);
671 1 }
672 //写入一个字节***********************************************************
673 WriteOneChar(unsigned char dat)
674 {
675 1 unsigned char i=0;
C51 COMPILER V7.07 XIYIJI 09/11/2005 16:35:01 PAGE 12
676 1 for (i=8; i>0; i--)
677 1 {
678 2 DQ = 0;
679 2 DQ = dat&0x01;
680 2 delay(5);
681 2 DQ = 1;
682 2 dat>>=1;
683 2 }
684 1 }
685 //读温度值*****************************************************************
686 unsigned int ReadTemperature(void)//读取温度
687 {
688 1 unsigned char a=0;
689 1 unsigned char b=0;
690 1 unsigned int t=0;
691 1 Init_DS18B20();//初始化
692 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
693 1 WriteOneChar(0x44); // 启动温度转换
694 1 Init_DS18B20();//初始化
695 1 WriteOneChar(0xCC); //跳过读序号列号的操作
696 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
697 1 a=ReadOneChar();//读取低字节
698 1 b=ReadOneChar();//读取高字节
699 1 if((b& 0xf8)!=0x00) //如果是负数 则取反加一
700 1 {
701 2 b=~b;
702 2 a=~a;
703 2 a=a+1;
704 2 if(a>255)
705 2 b++;
706 2 }
707 1 b=b<<4;// 高字节的低4位与低字节的高4位 组合为温度值
708 1 b=b & 0x70;
709 1 a=a>>4;
710 1 a=a & 0x0f;
711 1 t=a | b;
712 1 return(t);
713 1 }
714 //**************************************************************************
715
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2483 ----
CONSTANT SIZE = 367 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 39 37
IDATA SIZE = ---- ----
BIT SIZE = 3 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -