⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51.c

📁 用proteus仿真
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include "adc0831.h"
#include "Serialint.h"
#include "LCD7565R.h"
#define uchar unsigned char
#define  uint unsigned int
uchar starttime[6]={0x08,0x0a,0x16,0x1e,0x00,0x02};
uchar sec100=0;sec=0,hour=0;

uchar Watertemp[4]={0x50,0x32,0x00,0x0a};
uchar codews,hotws,codewd,hotwd;
uchar WTFLG=0,keyvalue=0;
//void Watertset();
//uchar idata disbuff[16];								   		
sbit    key1=    P3^2;
sbit    key2=    P3^3;
sbit    key3=    P3^4;
sbit    key4=    P3^5;

void PanduanFlage0(uchar f)
{
	 if(ID==f) Fx_flage=0;
	 else Fx_flage=1;
}


void Mnue()
{    
    PanduanFlage0(0);
	disp_str("进行A/D转换",0,0);
    PanduanFlage0(1);
	disp_str("进行串口通讯",0,2);
    PanduanFlage0(2);	
	disp_str("温度设置",0,4);
    PanduanFlage0(3);
    disp_str("香水喷洒时间设置",0,6);
    //disp_str("密码设置",0,6);
}


void Mnue0()
{  EA=0;
   Clear();
   disp_str("退出",102,6);
   while (key3==1)
   ADchange();
   Clear();
   Mnue();
   EA=1;
}

void Mnue1()
{
    EA=0;
	Clear();
	Serialint();
    disp_str("进行串口通讯",15,0);
    disp_str("退出",102,6);
    while (key3==1)
    {
	 disp_str("AB123",20,3);
     send_string_com("123AB",16);
     send_char_com(0x0d);
     send_char_com(0x0a);
	}
	Clear();
    Mnue();
	EA=1;
}

 
/************************water set progremm****************/
void dispwatert(uchar wt,xl,yl)
{    
    b1 = wt/100+48;
    b2 = (wt%100)/10+48;
	b3 = (wt%100)%10+48;
	if(b1==48 && xl==112)
	{
	 disp_ch(b2,xl,yl);
	 disp_ch(b3,xl+8,yl);
	}

	if(xl==25)
	  { 
       if(b1==48)
	   {
	   disp_ch(b2,xl,yl);
	   disp_ch(b3,xl+8,yl);
       Fx_flage=1;
	   disp_ch(32,xl+16,yl);
	   }
	  else
	   {
       disp_ch(b1,xl,yl);
	   disp_ch(b2,xl+8,yl);
	   disp_ch(b3,xl+16,yl);
	   }
     }
}



void Watertfset(uchar f)
{
  	 if(f==WTFLG) Fx_flage=0;
	 else Fx_flage=1;
}

void Watertset()
{
    Watertfset(0);
    dispwatert(hotws,25,2);
    Watertfset(1);
    dispwatert(hotwd,25,4);

    Watertfset(2);
	dispwatert(codews,112,2);
    Watertfset(3);
	dispwatert(codewd,112,4);

    Watertfset(4);
    disp_str("保存",24,6);
    Watertfset(5);
    disp_str("退出",74,6);

}



void keyscan(uchar keyv,full)
{
     keyvalue=keyv;
   while(key4==1)
   {
    Watertset();
	if(key1==0)
	 {
	  while(key1==0);
	  if(keyvalue<full) keyvalue++;
	     else keyvalue=0;
     }     
	 if(key2==0)
	 {
	 while(key2==0);
	 if(keyvalue>0) keyvalue--;
	    else keyvalue=full;   
  	  } 

	 if(full==6)
	   WTFLG=keyvalue;
	 else 
	 switch(WTFLG)
	   {
	    case 0: hotws=keyvalue;break;
	    case 1: hotwd=keyvalue;	break;    
		case 2: codews=keyvalue;break;
		case 3: codewd=keyvalue;break;
	   }

    // Watertset();
	 }
	 while(key4==0);
}




void Mnue2()
{  //uchar d1=0;
    EA=0;
	Clear();
    WTFLG=0;
    Fx_flage=1;
	hotws= Watertemp[0];hotwd=Watertemp[1]; 
	codews=Watertemp[2];codewd=Watertemp[3];	
    disp_str("热水",8,0);
    disp_str("设置",0,2);
    disp_str("当前",0,4);

    disp_str("冷水",96,0);
    disp_str("设置",80,2);
    disp_str("当前",80,4);
	disp_ch(45,104,2);
	disp_ch(45,104,4);
    Watertset();
    while (key3==1)
    {
     Watertset();
     keyscan(WTFLG,6);
     switch(WTFLG)
	 {
      case 0:
	         keyscan(hotws,100);
			 break;
      case 1:
	         keyscan(hotwd,100);
		  	 break;

      case 2:   
			  keyscan(codews,100);
			  break;
      case 3: 	   
			  keyscan(codewd,100);
			  break;

      case 4: 
	          Watertemp[0]=hotws;Watertemp[1]=hotwd; 
	          Watertemp[2]=codews;Watertemp[3]=codewd;			  
			   goto waterover;

      case 5: goto waterover;
	 // default: break;     
	 }
     while(key4==0);
	}
waterover:
	Clear();
    Mnue();
	EA=1;
}

/*******************************////////////////////////



void disptime(uchar f)
{      
      
        if(f==1) Fx_flage=0;
		 else Fx_flage=1;
		b1 = hour/10+48;
		b2 = hour%10+48;
	    disp_ch(b1,40,4);
	    disp_ch(b2,48,4);

        if(f==0) Fx_flage=0;
		 else Fx_flage=1;
		b1 = sec/10+48;
		b2 = sec%10+48;
	    disp_ch(b1,64,4);
	    disp_ch(b2,72,4);
}



void timer0() interrupt 1 
{
 //   EA=0;
	TH0=0x3c;		//Timer0置50ms定时初值dc00H(2^16=65536D,dc00H=56320D)
	TL0=0xb0;			//定时时间=(65536-50000)*(1/12)*12=50ms (f0=11.0592Mhz)
	sec100++;
	if(sec100 >= 5)	//1秒时间 (100*10ms=1000ms=1s)
	  {sec100 = 0; 
	     
         if(sec<59) sec++;
	     else
		 {sec=0;if(hour<23) hour++;
		  else hour=0;
		 }
	  }	
    disptime(2); 
//   EA=1; 
}




void PanduanFlage1(uchar f)
{
	 if(ID0==f) Fx_flage=0;
	 else Fx_flage=1;
}


void  Funcmnue()
{
   PanduanFlage1(0);
   disp_str("开始",5,0);
   PanduanFlage1(1);
   disp_str("停止",45,0);
   PanduanFlage1(2);
   disp_str("间隔",85,0);
   PanduanFlage1(3);
   disp_str("喷洒数",85,2);
   PanduanFlage1(4);
   disp_str("开",5,2);
   PanduanFlage1(5);
   disp_str("停",5,4);
   Fx_flage=1;
   disp_str(":",56,4);
   PanduanFlage1(6);
   disp_str("退出",102,6);

}


void Functionselection(uchar keyv,full)
{
   keyvalue=keyv;
   while(key4==1)
   {
	if(key1==0)
	 {
	  while(key1==0);
	  if(keyvalue<full) keyvalue++;
	     else keyvalue=0;
     }     
	 if(key2==0)
	 {
	 while(key2==0);
	 if(keyvalue>0) keyvalue--;
	    else keyvalue=full;   
  	  } 
     if(full==2)
      { IDF=keyvalue;disptime(IDF);}
	 if(full==6)
	  { ID0=keyvalue;Funcmnue();disptime(2);}
	 else
	 {
	 if(full==59)
	   sec=keyvalue;
	 if(full==23)
	   hour=keyvalue;   
       disptime(IDF);
	  }
 	 
   }
	 while(key4==0);
}



void time0int()
{
 EA=0;
 TMOD= 0x01;
 TL0 = 0X3c;
 TH0 = 0Xb0;
 EX0=0;
 EX1=0;
 ET0 = 1;
 TR0 = 1;
 EA  = 1;

}



void timesec()
{
     while(IDF!=2)
	   	{
		Functionselection(IDF,2); 
	   	if(IDF==1) Functionselection(hour,23); 
		if(IDF==0) Functionselection(sec,59);
		} 	  
    IDF=0;

}





void Mnue3()
{
   EA=0;  
   Clear();
   Funcmnue();
   while (key3==1)
    {
	Functionselection(ID0,6); 
    switch(ID0)
     { 
	  case 0 :hour=starttime[0]; sec=starttime[1];disptime(2);timesec();starttime[0]=hour;starttime[1]=sec;break;
	  case 1 :hour=starttime[2]; sec=starttime[3];disptime(2);timesec();starttime[2]=hour;starttime[3]=sec;break;
	  case 2 :hour=starttime[4]; sec=starttime[5];disptime(2);timesec();starttime[4]=hour;starttime[5]=sec;break;
	  case 3 :disptime(0);goto Timeover; break;
	  case 4 :time0int();
	          while(key3==1)
			   {disptime(2);Functionselection(ID0,6);}
			  goto Timeover;break;
               
	  case 5 :goto Timeover; break;
	  case 6 : goto Timeover; break;
			      
     }  
  
   }
   while(key3==0);
Timeover:
    Clear();
    Mnue();
    EA=1;
}

void Scankey1() interrupt 0
{
 if(key1==0)
  {
   while (key1==0); 
   if(ID<4)
      ID+=1; 
   else ID=0;
   Mnue();
  }

}


void Scankey2() interrupt 2
{
 if(key2==0)
  {
   while (key1==0);
   if(ID>0)
   ID-=1; 
   else ID=3;
   Mnue();
  }

}

void show_ad(void)
{
	disp_ch(b1,0,0);
	disp_ch(b2,8,0);
	disp_ch(b3,16,0);
}

void ADchange()
{
	 	b3 = readadc();
		b1 = b3/100+48;
		b2 = (b3%100)/10+48;
		b3 = (b3%100)%10+48;
		show_ad();
}



void main()
{	
   LcdInit(); 
   
  // TMOD=0X01;
   EA=1;
   EX0=1;
   EX1=1;   
   Mnue();
   while(1)
	{
	if(key4==0)
	 {
		switch(ID)
   		{
   	 	case 0:Mnue0();break;
   	 	case 1:Mnue1();break;
   		case 2:Mnue2();break;
    	case 3:Mnue3();break;
	
   		}
	 }
	}
	
}



void Delayms(uint ms)
{	
	uchar j;
	while(ms--)
	  for(j=0;j<=20;j++);   
	                   
}		
	




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -