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

📄 e2prom.c

📁 e2prom通过i2c总线的读写 注释少了点 自己编的
💻 C
字号:
#include "reg52.h"
#include "a7279.h"
#include "ds18b20_3p.h"
#include "e2p.h"

unsigned char count_10s=0,sw=0;
unsigned char temp[3],wei,set_temp,n=10,count,addr;
unsigned int address=0;

void write_e2p_3times(unsigned char addre,unsigned char av0,unsigned char av1,unsigned char av2);
void comp(void);

sbit  PWM0 = P0^0 ;
sbit  PWM1 = P0^1 ;//电机
sbit  PWM2 = P0^2 ;//电扇



void main()
{
    TMOD=0X11;
//	IT1=1;
//    EX1=1;
	ET1=1;
    TH1 =0xfc;
    TL1 =0x18;
    ET0=1;
	EX1=1;
	IT1=1;
	EA=1;
	TH0=0x3c;
	TL0=0xaf;
	TR0=1;
	TR1=1;
	while(1)
	{
	  comp()	;
	}
    
}

void delay_1s() interrupt 1
{	unsigned int ep_av0[6],ep_av1[6],ep_av2[6],av0,av1,av2,i;

    TR0=0;
	TH0=0x3c;
	TL0=0xaf;
	TR0=1; 
	if(++count_10s==200)
	{
	
		  
	    count_10s=0;
		ce_temp0();
		ce_temp1();
		ce_temp2();
		ep_av1[i]=tempu[0]+tempu[1]*10+tempu[2]*100;
		ep_av1[i]=tempu[3]+tempu[4]*10+tempu[5]*100;
		ep_av1[i]=tempu[6]+tempu[7]*10+tempu[8]*100;
		if(i==5)
		{
		 av0=(ep_av0[0]+ep_av0[1]+ep_av0[2]+ep_av0[3]+ep_av0[4]+ep_av0[5])/6;
		 av1=(ep_av1[0]+ep_av1[1]+ep_av1[2]+ep_av1[3]+ep_av1[4]+ep_av1[5])/6;
		 av2=(ep_av2[0]+ep_av2[1]+ep_av2[2]+ep_av2[3]+ep_av2[4]+ep_av2[5])/6;
		 write_e2p_3times(addr,av0,av1,av2);
		   
		}
    	i=++i%6;
	      	  

	    
	//	 write_e2p_4times(address,,,)

	switch(sw)
	 {
	    case 0:	write7279(0x87,tempu[0]);  
	            write7279(0x86,tempu[1]+0x80);
	            write7279(0x85,tempu[2]); 
				write7279(0x80,0); break;
		case 1:write7279(0x87,tempu[3]);  
	            write7279(0x86,tempu[4]+0x80);
	            write7279(0x85,tempu[5]);
				write7279(0x80,1);	break;
		case 2:	write7279(0x87,tempu[6]);  
	            write7279(0x86,tempu[7]+0x80);
	            write7279(0x85,tempu[8]); 
				write7279(0x80,2);break;
		case 3:write7279(0x85,temp[0]);  
	            write7279(0x86,temp[1]+0x80);
	            write7279(0x87,temp[2]); 
				write7279(0x80,3); break;
	 }
                  
	}
	
}

void key0() interrupt 2
{
     unsigned char keynumb;
     static char sig=0;

	 keynumb=read7279(0x15);

     if(set_temp)
	{	
	    sw=3;
	   if(keynumb==0x13)
	     {  set_temp=0;
		 	write7279(0x88,0xff);	 }
	   else 
	   { 

	      switch(keynumb)
     	 {
	    	case 0x06:temp[wei++]=1;break;
	     	case 0x0e:temp[wei++]=2;break;
	    	case 0x16:temp[wei++]=3;break;
	     	case 0x05:temp[wei++]=4;break;
	     	case 0x0d:temp[wei++]=5;break;
	    	case 0x15:temp[wei++]=6;break;
	     	case 0x04:temp[wei++]=7;break;
	    	case 0x0c:temp[wei++]=8;break;
    		case 0x14:temp[wei++]=9;break;
    		case 0x0b:temp[wei++]=0;break;
			case 0x03:sig=++sig%2;break;
    		default:;break;
	     }  wei=wei%3;
		  switch(wei)
		  {
		     case 0:write7279(0x88,0xdf);break;
			 case 1:write7279(0x88,0xbf);break;
			 case 2:write7279(0x88,0x7f);break;
		  }
		  
	
	   }
    }	    
   else	 
   {    
  
      if(keynumb==0x1b)  sw=++sw%4;
	  if(keynumb==0x13)	{ set_temp=1;write7279(0x88,0xdf);sw=3; }
	
   }

	  if(sw==3&&sig==1)
	    write7279(0x94,0x01);
	  else write7279(0x94,0x00);	
	 
	      
	 	switch(sw)
	   {
	    case 0:	write7279(0x87,tempu[0]);  
	            write7279(0x86,tempu[1]+0x80);
	            write7279(0x85,tempu[2]);   
			 write7279(0x80,0);	 break;
		case 1:write7279(0x87,tempu[3]);  
	            write7279(0x86,tempu[4]+0x80);
	            write7279(0x85,tempu[5]);
			write7279(0x80,1);	break;
		case 2:write7279(0x87,tempu[6]);  
	            write7279(0x86,tempu[7]+0x80);
	            write7279(0x85,tempu[8]); 
			write7279(0x80,2) ;	 break;
		case 3:write7279(0x85,temp[0]);  
	            write7279(0x86,temp[1]+0x80); 
	            write7279(0x87,temp[2]);  
			write7279(0x80,3); 	 break;

	   }

}

 void comp(void)
 {	  
     int shinei,sheding,wencha; 
     shinei=tempu[0]+tempu[1]*10+tempu[2]*100;
	 sheding=temp[2]+temp[1]*10+temp[0]*100;
/*	 if(shinei>sheding)
       {
	   wencha=shinei-sheding;
		     
	           
	   if(wencha>30)
	   n=1;		//降温
	   else if(wencha>20)   
	    n=2;     // if(wencha>10)
		else n=3;
	        
		//	else n=0; 
	   }		 */
	   	
	if(shinei<sheding)
       { 
	   wencha=sheding-shinei;
	   			  write7279(0x81,wencha/100%10);
			    write7279(0x82,(wencha/10)%10+0x80);
				write7279(0x83,(wencha%10));	
	   if(wencha>=30)	  n=1;
	    if(wencha>=20&&wencha<30)  n=2;		   //升温
    	if(wencha<20&&wencha>5) n=3;
		if(wencha<=5)n=10; 
	   }  
 }


void timer0(void) interrupt 3
{   			 PWM2=1;//电扇开
                TR1 = 0;
                TH1 = 0xfc;
                TL1 = 0x18;
                if(count<n)
                 { PWM0 = 1; 
				   PWM1 = 1; 
				 }        
                else  
                 { PWM0 = 0;
				   PWM1 = 0; 
				 }
                
                count++;
                if(count==10)
                  count = 0;
                TR1 = 1;
}

⌨️ 快捷键说明

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