📄 b11_v3.3.3(f72).c
字号:
/*****PIC16F72引脚分配************************
PORTA:
0:模拟输入,用于AD,混合风门反馈输入
1:模拟输入,用于AD,蒸发器温度
2: MODE电位器输入(分五档)
3:混合风门电位器输入(分9档)
4:A/C控制端(输出)
5:风量电位器输入(分9档)
PORTB:
0:SPD 车速信号输入(自动)
1:AN10 (空)
2:AN8 内气温度传感器输入 混合风门伺服电机控制1
3:AN9 外气温度传感器输入 混合风门伺服电机控制2
4:按键RDEF
5:按键 AC
6:用于调试
7:用于调试
PORTC:
0:4094_STR(风量控制、模式及继电器控制)
1:4094_CLK(风量控制、模式及继电器控制)
2:4094_D(风量控制、模式及继电器控制)
3:SCL(24C01)
4:SDA(24C01)
5:SDO(空)
6:ahm
7:ahc
***********************************************/
#include <pic.h>
void Key_AC();
void Key_RDEF();
void Delayms(int ms);
void AD_Init();
void Time1_Init();
void Set4094();
signed char Cal_T_in(unsigned int);
//////////////////////////////////////
#define Face 0x01
#define BL 0x02
#define Foot 0x03
#define DF 0x04
#define Def 0x05
#define Rear 0x06
unsigned char F_Mode=BL,Old_Mode;
//以下定义用于风量 Level0最大 ,Level9最小关闭鼓风机
#define Level0 0x09 //Largest
#define Level1 0x08
#define Level2 0x07
#define Level3 0x06
#define Level4 0x05
#define Level5 0x04
#define Level6 0x03
#define Level7 0x02
#define Level8 0x01
#define Level9 0x0 //Off
#define Low 0x01
#define Low1 0x02
#define Mid 0x03
#define HI_M 0x04
#define Hi 0x05
#define OFF 0x0
#define ON 0x01
#define AC_LED_ON U5_595|=0x80
#define AC_LED_OFF U5_595&=~0x80
#define Intake_LED_ON U5_595|=0x40
#define Intake_LED_OFF U5_595&=~0x40
#define REC_Mode U4_595&=0x3f;U4_595|=0x80
#define FRS_Mode U4_595&=0x3f;U4_595|=0x40
unsigned char Fan=OFF,Fan_Old=OFF;
unsigned char Compress_State=OFF,Compress_Old;
unsigned char Intake=0;
unsigned char Rear_State=OFF;
int Rear_Time;
unsigned char T_position=4;
unsigned char mix_pos=103,des_mix_pos=103;
unsigned char Count_am=0;
unsigned char U4_595 ;//q1--q5风量控制 q7:外气模式 q8:内气模式
unsigned char U5_595; //q1--q6模式 q7:a/c LED指示灯 q8:intake LED指示灯
unsigned char U13_595,U12_595,Col=0;
unsigned char U13_C1=0,U13_C2=0,U13_C3=0,U13_C4=0,U13_C5=0;
unsigned char act_blwr; //实际出风量
unsigned char N_Key_U14=0,N_Key_U15=0;
unsigned char NN_Key_U14=0;
unsigned int NN_Key_U15=0;
int Index;
signed char Tin; //内气温度
unsigned int TTin=0; //内气温度计数和
char Tin_N=0; //内气温度计数次数
unsigned char AD_TR;
unsigned char AD_Mode;
unsigned char AD_Fan;
unsigned char AD_Temp;
unsigned char AD_N=0;
unsigned char evap_front_flt=40;
unsigned char Flag_Tr=0;
unsigned char U14,U15;
//////////////////////////////////////
#define bitset(var, bitno) ((var) |= (1 << (bitno)))
#define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))
void Key_AC()
{
if(Compress_State==ON)
{
Compress_State=OFF;
U13_C5|=0x01;
}
else
{
if(Fan>0)
{
Compress_State=ON;
U13_C5&=~0x01;
}
else
{
Fan=Fan_Old;
if(Fan==OFF)
Fan=Low;
Compress_State=ON;
U13_C5&=~0x01;
}
}
}
void Key_OFF()
{
Fan_Old=Fan;
Fan=OFF;
Compress_Old=Compress_State;
Compress_State=OFF;
}
void Key_REAR()
{
if(Rear_State==ON)
{
Rear_State=OFF;
Rear_Time=0;
bitclr(U5_595,5);
bitclr(U13_C5,1);
}
else
{
Rear_State=ON;
Rear_Time=900;
bitset(U5_595,5);
bitset(U13_C5,1);
}
}
void Key_REC() //内气模式
{
if(F_Mode!=Def)
{
Intake=1;
U13_C1|=0x01;
U13_C1&=~0x02;
bitclr(PORTB,0);
bitset(PORTB,1);
}
}
void Key_FRS() //外气模式
{
Intake=0;
U13_C1&=~0x01;
U13_C1|=0x02;
bitclr(PORTB,1);
bitset(PORTB,0);
}
/***************************************
功能:
U4(4094) :输出风量控制值
U5(4094) :输出模式控制和风量继电器等
PORTC.2:HC4094数据口(输出)
PORTC.0:HC4094 STR
PORTC.1:HC4094 SCK(输出)
*/
#define STR_0 bitclr(PORTC,0)
#define STR_1 bitset(PORTC,0)
#define CLK_0 bitclr(PORTC,2)
#define CLK_1 bitset(PORTC,2)
#define Dout_0 bitclr(PORTC,1)
#define Dout_1 bitset(PORTC,1)
void Set4094()
{
unsigned char j;
unsigned char V;
CLK_0;//Clk595_0;
STR_0;//Str595_0;
V=U5_595;
for(j=8;j>0;j--)
{
if(V&0x80)
Dout_1;
else
Dout_0;
V=V<<1;
CLK_1;
NOP();
CLK_0;//Clk595_0;
}
V=U4_595;
for(j=8;j>0;j--)
{
if(V&0x80)
Dout_1;
else
Dout_0;
V=V<<1;
CLK_1;//Clk595_1;
NOP();
CLK_0;//Clk595_0;
}
STR_1;
STR_0;//Str595_0;
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++)
;
}
void AD_Init()
{
ADCON0=0x81; //ADCLK=Fosc/(32*DIV) ADCS2=1 :DIV=2 else DIV=1
//当前通道=AN0
//AD转换有效
ADCON1=0;
//ADCON1=0x45; //数据左对齐高8位在ADRESH,低2位在ADRESL
//ADCS2=1
//AD转换的模拟通道为AN0。。AN9
// ADCON2=0x0;
bitclr(PIR1,6); //clear ADIF bit
bitset(PIE1,6); //set ADIE bit
bitset(INTCON,6); //set PEIE bit
bitset(INTCON,7); //set GIE bit
}
/***********************************************
16位定时器,定时时间为10ms
***********************************************/
void Time1_Init()
{
TMR1H=0xfc; //定时常数=1024,时钟=Fosc/4=4MHz/4=1MHz
TMR1L=0x00; //定时时间=1024/1000000=1/1000=1MS
T1CON=0x00;
bitclr(PIR1,0);
bitset(PIE1,0);
}
void interrupt Pic_ISR(void)
{
unsigned char Index;
if((PIR1&0x40)==0x40)
{
if((ADCON0&0x38)==0) //混合风门
{
if(AD_N>1)
{
mix_pos=(mix_pos+(unsigned int)ADRES)/2;
ADCON0|=0x08;
AD_N=0;
}
else
AD_N++;
}
else if((ADCON0&0x38)==0x08)//蒸发器温度
{
if(AD_N>1)
{
AD_N=0;
AD_TR=ADRES;
ADCON0=0x81;
ADCON0|=0x10;
Flag_Tr=1;
}
else
AD_N++;
}
else if((ADCON0&0x38)==0x10)//
{
if(AD_N>1)
{
AD_N=0;
AD_Temp=ADRES;
ADCON0=0x81;
ADCON0|=0x18;
}
else
AD_N++;
}
else if((ADCON0&0x38)==0x18)//
{
if(AD_N>1)
{
AD_N=0;
AD_Mode=ADRES;
ADCON0=0x81;
ADCON0|=0x20;
}
else
AD_N++;
}
else if((ADCON0&0x38)==0x20)
{
if(AD_N>1)
{
AD_N=0;
AD_Fan=ADRES;
ADCON0=0x81;
}
else
AD_N++;
}
else
ADCON0=0x81;
bitclr(PIR1,6); //clear ADIF bit
}
///////////混合风门控制 start
if(des_mix_pos>mix_pos)
{
if(des_mix_pos-mix_pos>=5)
{
bitclr(PORTC,6);
bitset(PORTC,7);
}
else
{
bitclr(PORTC,6);
bitclr(PORTC,7);
}
}
else if(des_mix_pos<mix_pos)
{
if(mix_pos-des_mix_pos>=5)
{
bitclr(PORTC,7);
bitset(PORTC,6);
}
else
{
bitclr(PORTC,7);
bitclr(PORTC,6);
}
}
if((PORTC&0xc0)==0xc0)
PORTC&=~0xc0;
// Set4094();
///////////混合风门控制 end/////////////////////
bitset(ADCON0,2);
}
#define Din 90
#define Dfe 0
unsigned char Cal_T_evap(unsigned int mad_Fevapo)
{
unsigned char Temp_FEvapo;
if(mad_Fevapo>2700 )
{
Temp_FEvapo=0;
}
else if(mad_Fevapo<1000)
{
Temp_FEvapo=250;
}
else
{
if(mad_Fevapo>2350-Dfe)
Temp_FEvapo=0;
else if(mad_Fevapo<1100)
Temp_FEvapo=250;
else
{
if(mad_Fevapo>2007-Dfe)
Temp_FEvapo=0;
else if(mad_Fevapo>1982-Dfe)
Temp_FEvapo=10;
else if(mad_Fevapo>1976-Dfe)
Temp_FEvapo=15;
else if(mad_Fevapo>1964-Dfe)
Temp_FEvapo=20;
else if(mad_Fevapo>1951-Dfe)
Temp_FEvapo=25;
else if(mad_Fevapo>1939-Dfe)
Temp_FEvapo=30;
else if(mad_Fevapo>1927-Dfe)
Temp_FEvapo=35;
else if(mad_Fevapo>1914-Dfe)
Temp_FEvapo=40;
else if(mad_Fevapo>1902-Dfe)
Temp_FEvapo=45;
else if(mad_Fevapo>1889-Dfe)
Temp_FEvapo=50;
else if(mad_Fevapo>1877-Dfe)
Temp_FEvapo=55;
else if(mad_Fevapo>1864-Dfe)
Temp_FEvapo=60;
else if(mad_Fevapo>1852-Dfe)
Temp_FEvapo=65;
else if(mad_Fevapo>1839-Dfe)
Temp_FEvapo=70;
else if(mad_Fevapo>1827-Dfe)
Temp_FEvapo=75;
else if(mad_Fevapo>1814-Dfe)
Temp_FEvapo=80;
else if(mad_Fevapo>1801-Dfe)
Temp_FEvapo=85;
else if(mad_Fevapo>1789-Dfe)
Temp_FEvapo=90;
else if(mad_Fevapo>1776-Dfe)
Temp_FEvapo=95;
else if(mad_Fevapo>1764-Dfe)
Temp_FEvapo=100;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -