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

📄 ftc1.c

📁 一款实用的汽车水箱控制器产品程序,使用的是PIC18F24J10芯片,可检测汽车水箱,油箱温度,汽车电源电压,并能实现控制
💻 C
📖 第 1 页 / 共 2 页
字号:
	#include <p18f24j10.h>
	#include <stdio.h>
	#include <delays.h>
	//#include <float.h>
	//#include <p18f24j10.h>
	/*__CONFIG(_OSC_HS & _WDT_OFF & _LVP_OFF);*/
	//__CONFIG (0XF0FFC4F0A0);
	#define TABLE_SIZE 151
	
	#define ACC		PORTAbits.RA3
	#define FAN		PORTAbits.RA5
	#define SET		PORTBbits.RB6
	#define MODE	PORTBbits.RB7

	#pragma romdata LED_TABLE = 0X3EA0
	const rom unsigned int leds [15] =
	{0B01101111, 0B01100000, 0B11001011, 0B11101010, 0B11100100,
	 0B10101110, 0B10101111, 0B01101000, 0B11101111, 0B11101100,
	 0B11100101, 0B00000111, 0B10000000, 0B10100011, 0B10001101};
	#pragma romdata ROOT_TABLE = 0X3EC0
	const rom unsigned int roots[TABLE_SIZE] =
	//	0  1  2  3  4  5  6  7  8  9  	//
   {0, 1, 1, 2, 1, 2, 1, 2, 1, 2, 		// 0
	2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 		// 1
	2, 2, 3, 2, 3, 3, 2, 3, 3, 3, 		// 2
	3, 3, 3, 3, 4, 3, 4, 3, 4, 4, 		// 3
	4, 3, 4, 5, 4, 4, 4, 5, 4, 5, 		// 4
	4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 		// 5
	5, 6, 5, 6, 5, 6, 6, 6, 6, 6, 		// 6
	6, 6, 6, 6, 7, 6, 6, 7, 6, 7, 		// 7
	6, 7, 6, 7, 6, 7, 7, 6, 7, 7, 		// 8
	6, 7, 7, 6, 7, 7, 7, 6, 7, 7, 		// 9
	6, 7, 6, 7, 7, 6, 7, 6, 7, 6, 		//10
	6, 7, 6, 6, 6, 7, 6, 6, 6, 10,		//11
	2, 6, 5, 5, 7, 6, 5, 6, 5, 6, 		//12
	5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 		//13
	5, 5, 4, 5, 4, 5, 4, 5, 4, 4, 		//14
	4			      			  		//15
	};//	(14 + 1) * 10 + 1 = 151
	#pragma romdata
	
	#pragma udata access MY_ACS_DATA
	struct bs
		{
			unsigned wat:1;
			unsigned oil:1;
			unsigned vol:1;
			unsigned 	:1;
			unsigned setn:1;
			unsigned sets:1;
			unsigned modn:1;
			unsigned mods:1;
			}cobit;
			//State BITS === 0==Water; 1==Oil; 2==Voltage;
	near unsigned int	WTSV, OTSV, VSV, CWOV, K[4];
			//Water Temperature set value, Oil Temperature set value, Voltage set value
	near unsigned int 	ADH, ADL, ADC0;
			//A/D conversion high/low bits Hex Value		//ADD,
	near unsigned int	TX, T100, T10, T1;
			//A/D conversion bit number, hundred bit, decade bit, entries bit ||Value 
	near unsigned int	LEDVH, LEDVD, LEDVE, LEDVS;	
			//LED hundred bit, decade bit, entries bit, state bit;
	near unsigned int	val, counter;
			//Array pointer 
	near unsigned int	ADCV, DV;
			//A/D conversion-Voltage, Voltage Algorism Value	
	near unsigned int   ADCT, DWO;
			//A/D conversion-Temperature, Temperature Algorism Value
	near float 			VOL, DWOF;
			//Voltage conversion Register===( float )
	near int 			TEM;
			//Temperature conversion Register===( signed ) 
	#pragma udata
//********************************		Check Table		***************************	
	unsigned int get_root (int val)
	{
		return roots[val];
		  }
	unsigned int get_led (int val)
	{
		return leds[val];
		}
//****************************	initialization process	***********************	
	void initial (void)
	{
		INTCON = 0X00;
		INTCON2 = 0X00;
		INTCON3 = 0X00;
		
		PIR1 = 0X00;
		PIR2 = 0X00;
		PIR3 = 0X00;
		
		PIE1 = 0X00;
		PIE2 = 0X00;
		PIE3 = 0X00;
		
		IPR1 = 0X00;
		IPR2 = 0X00;
		IPR3 = 0X00;
		
		
		CMCON = 0X07;
		CVRCON = 0X00;
		}
//****************************	initialization I/O process	***********************		
	void initialIO (void)
	{		
		PORTA = 0X00;
		LATA = 0X00;
		TRISA = 0B11001111;
		
		PORTB = 0X00;
		LATB = 0X00;
		TRISB = 0XC0;
		
		PORTC = 0X00;
		LATB = 0X00;
		TRISC = 0X00;
		
		WTSV = 60;			//70;
		OTSV = 80;
		VSV = 80;
		}
//**************************	A/D initialization process	******************
	void initialAD (void)
	{
		ADCON2 = 0B10110001;
		ADCON1 = 0B00001100;
		ADCON0 = 0;
		}	
		
	void AD_PRE (int adcc0)
	{
		int j;
		//ADRESH = 0;
		//ADRESL = 0;
		initialAD ( );
		ADCON0 = adcc0;
		//for (j=20; j > 0; --j);
		ADCON0bits.GO = 1;
		while (1)
		{
			if ( ADCON0bits.GO == 0)
				break;
		}
	}	
//****************************	compare input process	***********************
	void COM (void)
	{	
		if ( cobit.modn == 0)
		{	if (MODE == 0)
			{	Delay100TCYx(50);
				if (MODE == 0)
					cobit.modn = 1;
			}
		}
		if ( cobit.modn == 1)
		{	if (MODE == 1)
			{	Delay100TCYx(50);
				if (MODE == 1)
				{	cobit.modn = 0;
					cobit.mods = 1;
					//FAN = 0;
				}
			}
		}
		if ( cobit.setn == 0)
		{	if (SET == 0)
			{	Delay100TCYx(50);
				if (SET == 0)
					cobit.setn = 1;
			}
		}
		if ( cobit.setn == 1)
		{	if (SET == 1)
			{	Delay100TCYx(50);
				if (SET == 1)
				{	cobit.setn = 0;
					cobit.sets = 1;
					//FAN = 0;
				}
			}
		}
	}
//********************	Temperature Value Conversion process	**************
	unsigned int TVAL_PRE(int val)
	{
	    T100 = T10 = T1 = 0;
	    TX = 3;
	    
	    if (val == 152)
	    {	T100 = T10 = T1 = 12;
			return T100, T10, T1, TX;
			}
			
		if (val == 151)
		{	T100 = T10 = T1 = 10;
			return T100, T10, T1, TX;
			}
			
		if (val == 0)
		{	T100 = T10 = T1 = 11;
			return T100, T10, T1, TX;
			}
			
	    TX = 0;
	    if ( val >= 100)
	    {	
			T100 = val/100;
			if( T100 > 10)
		    	T100 = T100 % 10;
				TX++; 
	    }
	    
	    if ( val >= 10)
	    {	
			T10 = val/10;
			if ( T10 >= 10)
		    	T10 = T10 % 10; 
			TX++; 
	    }
	    T1 = val % 10;
	    TX++;
		return T100, T10, T1, TX;
	}
//**********************	Voltage Value Conversion process	**************	  
	unsigned int VVAL_PRE(int val)
	{
	    T100 = T10 = T1 = 0;
	    TX = 0; 
	    if ( val >= 100)
	    {	
			T100 = val/100;
			if( T100 > 10)
		    	T100 = T100 % 10;
				TX++; 
	    }
	    
	    if ( val >= 10)
	    {	
			T10 = val/10;
			if ( T10 >= 10)
		    	T10 = T10 % 10; 
			TX++; 
	    }
	    T1 = val % 10;
	    TX++;
		return T100, T10, T1, TX;
	}
//******************************	Temperature Conversion	***********************
	unsigned int TEM_PRE(int adhs, int adls )
	{	       
`	    ADCT = (adhs<<8) + adls;
	    TX = 3;

	    TEM=ADCT-271;
	    if ( TEM < 0)
	    {
			DWO = 151;
			//T100 = T10 = T1 = 10;
			return DWO;// T100, T10, T1, TX;
	    }
	    
	   	TEM=ADCT-1010;
	    if ( TEM > 0)
	    {	
			DWO = 152;
			//T100 = T10 = T1 = 12;
			return DWO;// T100, T10, T1, TX;
	    }
	    
	    TEM=ADCT-993;
	    if ( TEM > 0)
	    {	
			DWO = 0;
			//T100 = T10 = T1 = 11;
			return DWO;// T100, T10, T1, TX;
	    }
	    
	    DWO = 0;
	    for (val = 0; val <= 150; val++)
	    {	TEM = TEM + get_root (val);	
			if ( TEM >= 0)
			{	
		    	val = 151;
			}
			DWO++;  
	    }	    
	    DWO--;
		//VAL_PRE(DWO);
		return DWO;// T100, T10, T1, TX;
	}
//******************************	Voltage Conversion	***********************
	unsigned int V_PRE(int adhs, int adls )
	{
		ADCV = (adhs<<8) + adls;
	    TX = 3;
	    
		VOL = (float)ADCV * 28 / 1023 + 0.05;
	    if ( VOL > 27.05 )
	    {
			DV = 271;
			T100 = T10 = T1 = 10;
			return DV, T100, T10, T1, TX;
	    }
	    
	    else if ( VOL < 7.0 )
	    {	
			DV = 69;
			T100 = T10 = T1 = 11;
			return DV, T100, T10, T1, TX;
	    }
	    
	    DV =(int)(10 * VOL);
		VVAL_PRE (DV);
		return DV, T100, T10, T1, TX;
	}
//********************************	LED Conversion	*************************		
	unsigned int LED_PRE(int t100, int t10, int t1 )
	{
		LEDVH = get_led (t100);
		LEDVD = get_led (t10);
		LEDVE = get_led (t1); 
	}

//********************************	 LED Display 	*************************
	unsigned int LED_DIS(int ledvm, int tx, int ledvh, int ledvb, int ledvl)
	{
			if (tx >= 3)
			{
				PORTC = ledvh;
				PORTB = ledvm;			//mode led display
				PORTBbits.RB2 = 1;
				Delay100TCYx(50);
				}
			if (tx >= 2)
			{
				PORTC = ledvb;
				PORTB = ledvm;			//mode led display
				PORTBbits.RB1 = 1;
				Delay100TCYx(50);
				}
			PORTC = ledvl;
			PORTB = ledvm;				//mode led display
			PORTBbits.RB0 = 1;
			Delay100TCYx(50);		
	}
//******************	ACC on LED initialization Display	******************
	unsigned int LED_IN_DIS (int ledvm)
	{
		int counter1;
		
		for (counter1 = 1; counter1 <= 6; counter1++)
		{
			PORTB = ledvm;			//mode led display
			PORTC = 0B00000111;		//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
			PORTBbits.RB2 = 1;
			Delay100TCYx(20);
		
		PORTB = ledvm;	
		PORTC = 0B00001010;
		PORTBbits.RB1 = 1;
			Delay100TCYx(20);
		
		PORTB = ledvm;
		PORTC = 0B01101010;
		PORTBbits.RB0 = 1;
			Delay100TCYx(20);
			}
			
		for (counter1 = 1; counter1 <= 6; counter1++)
		{
		PORTB = ledvm;			//mode led display	
		PORTC = 0B00001111;
		PORTBbits.RB2 = 1;
			Delay100TCYx(20);
			
			PORTB = ledvm;		
			PORTC = 0B00000010;		//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
			PORTBbits.RB1 = 1;
			Delay100TCYx(20);
			
		PORTB = ledvm;
		PORTC = 0B01101010;
		PORTBbits.RB0 = 1;
			Delay100TCYx(20);
			}
				
		for (counter1 = 1; counter1 <= 6; counter1++)
		{
		PORTB = ledvm;			//mode led display	
		PORTC = 0B00001111;
		PORTBbits.RB2 = 1;
			Delay100TCYx(20);
			
		PORTB = ledvm;	
		PORTC = 0B00001010;
		PORTBbits.RB1 = 1;
			Delay100TCYx(20);
				
			PORTB = ledvm;	
			PORTC = 0B01100010;		//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
			PORTBbits.RB0 = 1;
			Delay100TCYx(20);
			}
			
		for (counter1 = 1; counter1 <= 6; counter1++)
		{
		PORTB = ledvm;			//mode led display	
		PORTC = 0B00001111;
		PORTBbits.RB2 = 1;
			Delay100TCYx(20);
			
		PORTB = ledvm;	
		PORTC = 0B00001010;
		PORTBbits.RB1 = 1;
			Delay100TCYx(20);
			
			PORTB = ledvm;			
			//PORTCbits.RC6 = 1;
			PORTC = 0B00101010;		//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
			PORTBbits.RB0 = 1;
			Delay100TCYx(20);
			}
		
		for (counter1 = 1; counter1 <= 6; counter1++)
		{
		PORTB = ledvm;			//mode led display	
		PORTC = 0B00001111;
		PORTBbits.RB2 = 1;
			Delay100TCYx(20);
			
		PORTB = ledvm;	
		PORTC = 0B00001010;
		PORTBbits.RB1 = 1;
			Delay100TCYx(20);

⌨️ 快捷键说明

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