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

📄 tyn-001.c

📁 曾经给别人做的太阳能充电器源程序
💻 C
字号:
/*
THIS PRAGROM IS USE ABOUT SUNNY BATTERY LI-ION
SETUP CHIP IS PIC16F716,PRODUCE WILL USE MDT2051
CYCSTAL USE RC 110K  
*/
#include <pic.h>
#define	XTAL_FREQ	110KHZ
#include  "delay.c"
#include  <delay.h>

#define  delay_ms  DelayMs
#define  delay_us  DelayUs

#define	 radio	RB7
#define	 model	RB5
#define	 select_v	RB6
#define	 check_a	RB4
#define	 check_v	RB3

static unsigned char time,volt_state,j;
static unsigned char radio_temp,radio_flag,model_state,model_flag,volt_flag,over_flag;
static unsigned int i;
   
//unsigned char v42or84(unsigned char volt);	
unsigned char v5or9v(unsigned char volt);
void radio_key(void);

static void interrupt timer1(void){
         GIE=0;  
         if(TMR1IF==1)time++;
         TMR1IF=0;   //PIR1:0
         TMR1L=0;
	 	 TMR1H=0xf0;
         GIE=1;
         }

void main(void)
{


	PORTA=0;
    ADCON1=0X07;        //ALL AS OUTPUT
    PORTA=0X01;
	TRISA=0x0;		 //PORTA all as OUTPUT      	
	PORTB=0xf8;
	TRISB=0xf8;      //rb3-rb7 as input other output
	GIE=0;	
	TMR1IE=0;
	PEIE=1;		//T1CON=0b00000000;	  //fre 1:8
	delay_ms(10);
	TMR1IF=0;	
	TMR1L=0;
	TMR1H=0xf0;
	TMR1ON=1;	
    OPTION=0x0f;	//enable weak pull-up wdt prescaler 1:128
    CLRWDT();
	time=0;
	radio_temp=0;
	radio_flag=0;
	model_state=0;
	model_flag=0;
	volt_flag=0;
	volt_state=0;
	over_flag=0;
	i=0;
	j=0;
	for(;;){				//@1***
		///////////
		 CLRWDT();
		if((radio==0)&&(radio_flag==0)){
			radio_flag=1;
			if(radio_temp==0){radio_temp=1;RB2=1;} //to radio on or off
				else {radio_temp=0;RB2=0;}
				}
		if(radio==1)radio_flag=0;	//check radio key free
		////////////
		if((model==0)&&(model_flag==0)){
			model_flag=1;
			model_state++;
			if(model_state>2)model_state=0;
			}

		if(model==1)model_flag=0;
		if(model_state==0){		//OFF MODEL
			RB0=0;RB1=0;
			PORTA=0x01;
			}
		if(model_state==2){		//LED LIGHT MODEL
			RB0=0;RB1=0;
			PORTA=0x03;
			}
		if(model_state==1){		//sunbattery discharge MODEL @2***
		  for(;;){
		  	 CLRWDT();
			if((select_v==0)&&(volt_flag==0)){ 		//volt convert 
				TMR1IF=0;
				GIE=1;	
				TMR1IE=1;				
				TMR1L=0;
				TMR1H=0xf0;
				time=0;
		    	    for(;;){		//sure key press time if have 3 second 
			    		volt_flag=1;
            			CLRWDT();
            			if((select_v!=0)&&(time<15)){volt_flag=0;break;}
            			
            			if(time>14){volt_flag=0;volt_state++;break;}
            			} 					
				GIE=0;
				TMR1IE=0;
				TMR1L=0;
				TMR1H=0;
				time=0;
            			}            		
			
			if(volt_state>3)volt_state=0;
			if(volt_flag==0){
				switch(volt_state){
				case 0: over_flag=v5or9v(0);break;
				case 1: over_flag=v5or9v(1);break;
				case 2: over_flag=v5or9v(2);break;
				case 3: over_flag=v5or9v(3);break;
				default: break;}
				};
			  if((model==0)||(over_flag==1)) break;
			  if(over_flag==2){model_state=0;RA2=0;RA3=0;RB0=0;RB1=0;break;}
				  		//SHUT OFF ALL VOLTAGE DISPLAY LED AND SHUT DOWN
			 ///////////
			if(radio==1)radio_flag=0;	//check radio key free 
			if((radio==0)&&(radio_flag==0)){
				radio_flag=1;
				if(radio_temp==0){radio_temp=1;RB2=1;} //to radio on or off
					else {radio_temp=0;RB2=0;}
				}			
			////////////
			  }
			 }				//@2***
			
				
    
		}					//@1***
}


unsigned char v5or9v(unsigned char volt){
	TMR1IF=0;
	GIE=1;	
	TMR1IE=1;
	TMR1L=0;
	TMR1H=0xf0;
	time=0;
	RA2=0;RA3=0;RB0=0;RB1=0;	//SHUT OFF ALL VOLTAGE DISPLAY LED
	if(volt==0)RB1=1;
	if(volt==1)RA2=1;	
	if(volt==2)RA3=1;
	if(volt==3)RB0=1;	
	//while(model==0);
	for(;;){
		CLRWDT();
		if(model==1){
			delay_ms(10);
			if(model==1)break;
			}
		}
	model_flag=0;
	while(select_v==0);
	volt_flag=0;
	for(;;){
		CLRWDT();
		if(volt==0){	//OUTPUT VOLTAGE 4.8V
			RB1=1;
			delay_ms(5);
			RA0=0;
			if(RB4==0)time=0;
			if(time>250){
				RA0=1;	//RA2=0;RB0=0;
				GIE=0;
				TMR1IE=0;
				TMR1L=0;
				TMR1H=0;
				time=0;
	 			return(2);
	 			}		
		    }
		    
		if(volt==1){	//OUTPUT VOLTAGE 5.8V
			RA2=1;
			delay_ms(5);
			RA0=0;
			if(RB4==0)time=0;
			if(time>250){
				RA0=1;	//RA2=0;RB0=0;
				GIE=0;
				TMR1IE=0;
				TMR1L=0;
				TMR1H=0;
				time=0;
	 			return(2);
	 			}		
		    }	
		    
		if(volt==2){	//OUTPUT VOLTAGE 8.4V
			RA3=1;
			delay_ms(5);
			RA0=0;
			if(RB4==0)time=0;
			if(time>250){
				RA0=1;	//RA2=0;RB0=0;
				GIE=0;
				TMR1IE=0;
				TMR1L=0;
				TMR1H=0;
				time=0;
	 			return(2);
	 			}		
		    }		    	    
		if(volt==3){	//OUTPUT VOLTAGE 9V
			RB0=1;
			delay_ms(5);
			RA0=0;
			if(RB4==0)time=0;
			if(time>250){
				RA0=1;	//RA2=0;RB0=0;
				GIE=0;
				TMR1IE=0;
				TMR1L=0;
				TMR1H=0;
				time=0;
	 			return(2);
	 			}		
			}
			
		if(RB4==0)time=0;
		if(time>3){if(select_v==0)break;}				
		if(model==0)break;		
		if(radio==1)radio_flag=0;	//check radio key free 
		if((radio==0)&&(radio_flag==0)){
			radio_flag=1;
			if(radio_temp==0){radio_temp=1;RB2=1;} //to radio on or off
				else {radio_temp=0;RB2=0;}				
			}
	 }
	 RA0=1;	//RA2=0;RB0=0;
	GIE=0;
	TMR1IE=0;
	TMR1L=0;
	TMR1H=0;
	time=0;
	 return(1);
	}
	
/*	
unsigned char v42or84(unsigned char volt){
	TMR1IF=0;
	GIE=1;	
	TMR1IE=1;	
	TMR1L=0;
	TMR1H=0xf0;
	time=0;
	RA2=0;RA3=0;RB0=0;RB1=0;	//SHUT OFF ALL VOLTAGE DISPLAY LED
	if(volt==0)RB1=1;
	if(volt==2)RA3=1;
	while(model==0);	//waitting free model key
	model_flag=0;
	while(select_v==0); //waitting free select_v key
	volt_flag=0;	
	for(;;){
		CLRWDT();
		if(volt==0){	//OUTPUT VOLTAGE 4.2V@1***
		
			if(RB3!=0){	//@2*** no battery or battery error				
					RA0=1;RB1=0;
					j=0;
					while(j<30){
						CLRWDT();
						if(time>11){j++;time=0;RB1=1;RA0=0;} //EVERY a SECOND CHECK IF HAVE BATTERY
						delay_ms(100);
						RA0=1;RB1=0;
						if(time>8){if(RB3==0)break;}	//if have battery will get out 				
						if(model==0)break;
						if(select_v==0)return(1);
						radio_key();
						}											
				}	//@2***
				
			if(RB3==0){RB1=1;RA0=0;delay_ms(10);}
			
			}		//@1***
			   
		if(volt==2){	//OUTPUT VOLTAGE 8.4V@1***
	
			if(RB3!=0){	//@2*** no battery or battery error				
					RA0=1;RA3=0;
					j=0;
					while(j<30){
						CLRWDT();
						if(time>11){j++;time=0;RA3=1;RA0=0;} //EVERY TWO SECOND CHECK IF HAVE BATTERY
						delay_ms(100);		
						RA0=1;RA3=0;
						if(time>9){if(RB3==0)break;}
						if(model==0)break;
						if(select_v==0)return(1);
						radio_key();
						}											
				}	//@2***				
			if(RB3==0){RA3=1;RA0=0;delay_ms(10);}			
			}		//@1***
			
		j=0;
		while(j<30){	 //IF 30 SECOND NO CURRENT WILL GET OUT 
			CLRWDT();
			delay_ms(5);	
			if(RB4==0)time=0;	
			if(time>10){j++;time=0;}		
			if(j>5){RA0=1;GIE=0;
				TMR1IE=0;
				TMR1L=0;
				TMR1H=0;
				time=0;	
				return(2);
				}	
			//if(select_v==0)break;			
			if(model==0)break;		
			radio_key();
			}
		
		//delay_ms(1);	
		//if(RB4==0)time=0;		
		//if(select_v==0)break;
		//if(time>20)break;		
		//if(model==0)
	
		RA0=1;	//RA3=0;RB1=0;
		GIE=0;
		TMR1IE=0;
		TMR1L=0;
		TMR1H=0;
		time=0;	
		return(1);
		}
	RA0=1;	//RA3=0;RB1=0;
	GIE=0;
	TMR1IE=0;
	TMR1L=0;
	TMR1H=0;
	time=0;		
	 return(1);
	}
*/
	
void radio_key(void){
		if(radio==1)radio_flag=0;	//check radio key free 
		if((radio==0)&&(radio_flag==0)){
			radio_flag=1;
			if(radio_temp==0){radio_temp=1;RB2=1;} //to radio on or off
				else {radio_temp=0;RB2=0;}				
			}
	}
	

⌨️ 快捷键说明

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