📄 adc.h
字号:
sys_data_type adc_flag;
#define adc_dy_flag adc_flag.Bit.BIT0
#define adc_yg_flag adc_flag.Bit.BIT1
#define adc_dyoryg adc_flag.Bit.BIT2
//AD2电源 AD3雨刮
unsigned int ad_tran_temp;
unsigned int ad_yg_timer;
unsigned char ad_yg_counter;
unsigned int ad_dy_value;
unsigned char ad_dy_counter;
unsigned char ad_dy_arr[4];
unsigned char ad_dy_counter1;
//adc初始化:系统电压和雨刮时间
void init_adc(void){
adc_dy_flag=0;
adc_yg_flag=0;
adc_dyoryg=0; //先电压后雨刮时间
ad_yg_timer=0;
ad_dy_value=0;
ad_yg_counter=0;
ad_dy_counter=0;
ad_dy_counter1=0;
ADSCR=0x1f;
//ADSCR_COCO/转换结束标志位/1=结束/只读
//ADSCR_AIEN=0;//ADC中断使能/禁止中断
//ADSCR_ADCO=0;//连续转换位/单次转换
//ADSCR_ADCH[4..0]/AD转换通道选择/11111=关闭
ADCLK=0x40;
//ADCLK_ADIV[2..0]=0/时钟选择位/分频比÷1
//ADCLK_ADICLK=0;//晶振
//ADCLK_MODE[1..0]=0/8位截止
//R.R
}
//AD转换及读取有效值
void ad_oper(void)
{
if(adc_dyoryg)
{ //电压AD转换
if(adc_dy_flag)
{
if(ADSCR_COCO)
{ //AD完成位
ad_dy_counter++;
ad_tran_temp=ADRL;
//添加AD转换量到电压值的关系式
ad_dy_value+=ad_tran_temp;
if(ad_dy_counter>=8)
{
ad_dy_counter=0;
ad_dy_arr[ad_dy_counter1]=(unsigned char)(ad_dy_value>>3);
ad_dy_counter1++;
if(ad_dy_counter1>=1)
{
ad_dy_counter1=0;
ad_dy_value=ad_dy_arr[0]/*+ad_dy_arr[1]+ad_dy_arr[2]+ad_dy_arr[3]*/;
//ad_dy_value>>=1;
//下面电压关系运算
if(ad_dy_value<=0x72)
{
CAN_YB6.Byte=18;
}
else
{
ad_dy_value=(ad_dy_value+14)/7;
if(ad_dy_value>33) ad_dy_value=33;
CAN_YB6.Byte=(unsigned char)ad_dy_value;
}
/////
}
ad_dy_value=0;
//关系式
adc_dy_flag=0;
adc_dyoryg=0;
ADSCR=0x1f;//ADC power off
}
//加到CAN_YB6
}
else
{
adc_dy_flag=0;
}
}
else
{
ADSCR=0x22; //AD2连续转换
adc_dy_flag=1;
}
}
else
{ //雨刮AD转换
if(adc_yg_flag)
{
if(ADSCR_COCO)
{ //AD完成位
ad_yg_counter++;
ad_tran_temp=ADRL;
//添加AD转换量到雨刮时间的关系式
ad_yg_timer+=ad_tran_temp;
if(ad_yg_counter>=8)
{
ad_yg_counter=0;
ad_yg_timer=ad_yg_timer>>3;
if(ad_yg_timer>=0xe8)
{//0xe8
CAN_YB7.Byte=120;
}
else if(ad_yg_timer>=0xe0)
{
ad_yg_timer-=0xe0;
ad_yg_timer*=4;
CAN_YB7.Byte=(unsigned char)(ad_yg_timer+90);
}
else if(ad_yg_timer>=0xd1)
{
ad_yg_timer-=0xd1;
ad_yg_timer*=2;
CAN_YB7.Byte=(unsigned char)(ad_yg_timer+60);
}
else if(ad_yg_timer>=0xa8)
{
ad_yg_timer-=0xa8;
ad_yg_timer*=3;
ad_yg_timer>>=2;
CAN_YB7.Byte=(unsigned char)(ad_yg_timer+30);
}
else if(ad_yg_timer>=0x12)
{
ad_yg_timer-=0x7;
ad_yg_timer*=3;
ad_yg_timer>>=4;
CAN_YB7.Byte=(unsigned char)ad_yg_timer;
}
else
{
CAN_YB7.Byte=2;
}
//CAN_YB7.Byte=(unsigned char)(ad_yg_timer>>3); //0.5s及*2
ad_yg_timer=0;
//关系式
adc_yg_flag=0;
adc_dyoryg=1;
ADSCR=0x1f;
}
//加到CAN_YB7
}
else
{
adc_yg_flag=0;
}
}
else
{
ADSCR=0x23; //AD3连续转换
adc_yg_flag=1;
}
}
}
///////////////////////////////////////////
///////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -