📄 main.c
字号:
/***************************************************************************************
**函数名称:void start_Capture(void)
**函数功能:开启捕获,测输入频率
**函数入口:
**输 出:
**备 注:算法:每次启动CCP功能后,自动顺序测量2路的频率信号。在主循环中判断是否有超时
和测量完毕,测量完毕后查表,找出频率实际对应的值。
****************************************************************************************/
void start_Capture(void)
{
TMR1ON = 0;
T1CON=0x00;
TMR1H=0;
TMR1L=0;
TMR1ON = 1;
RHAPort =1;
RHBPort =1;
Capture_Byte.Dely = 0;
CCP1CON = 0x05; //设置CCP1为捕捉工作方式,上升沿触发
CCP1IE=0; //关中断
CCP1IF=0; //
CCP2CON = 0x05;
CCP2IE=0; //关中断
CCP2IF=0;
Capture_Byte.Cap_chNum = 0;
Capture_Byte.Cap_sampleNum = 0;
Capture_Byte.Dely = 1;
CCP1IE = 1; //开ccp的中断
}
/*********************************************************
函数名称:函数功能:
入口参数:
出口参数:
**********************************************************/
void CCP_value(void)
{
unsigned char j,i;
unsigned int k,*p;
//将采样值从小道大排列
if(Capture_Byte.Cap_chNum>=CAP_CH) return;
for(i=0;i<(CAP_NUM-1);i++)
{
if(Capture_Byte.Cycle_Byte[i+1]>=Capture_Byte.Cycle_Byte[i])
Capture_Byte.Cycle_Byte[i] = Capture_Byte.Cycle_Byte[i+1] - Capture_Byte.Cycle_Byte[i];
else Capture_Byte.Cycle_Byte[i] = (65535 - Capture_Byte.Cycle_Byte[i]) + Capture_Byte.Cycle_Byte[i+1]+1;
}
p = Capture_Byte.Cycle_Byte;
for(i = 1;i < (CAP_NUM-1); i++)
{
for(j = 0;j < (CAP_NUM-2);j++)
{
if(p[j]>p[j+1])
{
k = p[j];
p[j] = p[j+1];
p[j+1] = k;
}
}
}
Capture_Byte.Cycle_value[Capture_Byte.Cap_chNum] = Capture_Byte.Cycle_Byte[((CAP_NUM-1)/2)-1];
}
const unsigned int bank1 shidutemp[21]={399,404,408,412,417,421,424,428,432,436, 440,444,448,452,457,462,467,472,478,485,491};
void calcu_sidu(unsigned char ch_Num)
{
char i;
unsigned int k,j;
unsigned int sumvalue;
if(ch_Num>1) return;
//过滤不正常数据////
Capture_Byte.All_Cycle_value[ch_Num] = Capture_Byte.All_Cycle_value[ch_Num]/3;
sumvalue = (unsigned long)Capture_Byte.All_Cycle_value[ch_Num];
if(sumvalue >900) sumvalue = 900;
sumvalue = (sumvalue*100);
sumvalue = sumvalue/100;
if(sumvalue>0xffff) sumvalue = 1000;
// else sum =( unsigned int)(sumvalue);
for(i=0;i<11;i++)
{
if ((sumvalue<=shidutemp[i+1]) && (sumvalue>=shidutemp[i]))
{
k = shidutemp[i+1]-shidutemp[i];
j = (sumvalue-shidutemp[i]);
sumvalue = i*10 + 10*(j/k);
if(sumvalue>=100) sumvalue = 99;
break;
}
}
if(i==11)
{
if(sumvalue<shidutemp[0]) sumvalue = 0;
else sumvalue = 99;
}
HumidityData[ch_Num] = (unsigned char)sumvalue;
Capture_Byte.All_Cycle_value[ch_Num] = 0;
}
/**********************************************/
void ReadKey(void)
{
unsigned char keysigned;
CANCEL_KeyPort =1;
DOWN_KeyPort =1;
UP_KeyPort =1;
ENTER_KeyPort =1;
keysigned = 0;
if(Key_press.Key_value) return;
if(Key_press.Key_state == KEY_DOWN)
{
switch(Key_press.Key_down)
{
case UP_KEY:
if(UP_Key==0)
{
Key_press.dely++;
keysigned++;
}
break;
case DOWN_KEY:
if(DOWN_Key==0)
{
Key_press.dely++;
keysigned++;
}
break;
case ENTER_KEY:
if(ENTER_Key==0)
{
Key_press.dely++;
keysigned++;
}
break;
case CANCEL_KEY:
if(CANCEL_Key==0)
{
Key_press.dely++;
keysigned++;
}
break;
default:
Key_press.Key_state = KEY_UP;
Key_press.Key_value = NO_KEY;
Key_press.dely = 0;
Key_press.Key_down = NO_KEY;
break;
}
if(keysigned==0)
{
Key_press.Key_state = KEY_UP;
Key_press.Key_value = NO_KEY;
Key_press.dely = 0;
Key_press.Key_down = NO_KEY;
}
else if(Key_press.dely>=KEY_DELY)
{
Key_press.Key_value = Key_press.Key_down;
Key_press.Key_down = NO_KEY;
Key_press.Key_state = KEY_UP;
Key_press.dely = 0;
}
}
else
{
Key_press.Key_down = NO_KEY;
Key_press.dely = 0;
if(UP_Key==0)
{
Key_press.Key_state = KEY_DOWN;
Key_press.Key_down = UP_KEY;
}
else if(DOWN_Key==0)
{
Key_press.Key_state = KEY_DOWN;
Key_press.Key_down = DOWN_KEY;
}
else if(ENTER_Key==0)
{
Key_press.Key_state = KEY_DOWN;
Key_press.Key_down = ENTER_KEY;
}
else if(CANCEL_Key==0)
{
Key_press.Key_state = KEY_DOWN;
Key_press.Key_down = CANCEL_KEY;
}
}
}
/*************************************************************/
void Pro_Key(void)
{
if(Key_press.Key_value == NO_KEY)
{
Key_press.No_keydely++;
if(Key_press.No_keydely<DELYTIME)
TO_Setdata(Key_press.set_key,Key_press.set_line);
if(Key_press.No_keydely>=DELYTIME)
{
TO_Displaydata(AD_result[1],10,0);
TO_Displaydata(HumidityData[1],10,1);
Key_press.bits = 0;
Key_press.set_key = 0;
Key_press.No_keydely = DELYTIME;
}
return;
}
else Key_press.No_keydely = 0;
switch(Key_press.Key_value) //处理翻屏
{
case UP_KEY:
if(Key_press.bits != 0)
{
Key_press.dis_buff[Key_press.set_line]++;
if(Key_press.dis_buff[Key_press.set_line]>9)
Key_press.dis_buff[Key_press.set_line] = 0;
}
else
{
Key_press.Key_value = NO_KEY;
Key_press.No_keydely = DELYTIME;
return;
}
break;
case DOWN_KEY:
if(Key_press.bits != 0)
{
if(Key_press.dis_buff[Key_press.set_line]>0) Key_press.dis_buff[Key_press.set_line]--;
else Key_press.dis_buff[Key_press.set_line] = 9;
}
else
{
Key_press.No_keydely = DELYTIME;
Key_press.Key_value = NO_KEY;
return;
}
break;
case ENTER_KEY:
Key_press.bits = 1;
if(Key_press.set_key==0)
{
Key_press.set_line = 0;
Key_press.dis_buff[0] = 0;
Key_press.dis_buff[1] = 0;
Key_press.dis_buff[2] = 0;
Key_press.dis_buff[3] = 0;
}
else
{
Key_press.set_key++;
if( Key_press.set_key>3)
{
Key_press.dis_data = Key_press.dis_buff[0]*1000 + Key_press.dis_buff[1]*100 + Key_press.dis_buff[2]*10 +Key_press.dis_buff[3];
//WriteParameter();
Key_press.set_key = 0;
Key_press.bits = 0;
Key_press.No_keydely = DELYTIME;
Key_press.Key_value = NO_KEY;
return;
}
Key_press.set_line = 0;
if(Key_press.set_key==1)
{ Key_press.dis_buff[0]=0;
Key_press.dis_buff[1]=0;
Key_press.dis_buff[2]=4;
Key_press.dis_buff[3]=0;
}
else if(Key_press.set_key==2)
{
Key_press.set_line = 0;
Key_press.dis_data = Key_press.dis_buff[0]*1000 + Key_press.dis_buff[1]*100 +
Key_press.dis_buff[2]*10 +Key_press.dis_buff[3];
//Para.CT_Data[0] = Key_press.dis_data/256;
//Para.CT_Data[1] = Key_press.dis_data%256;
// WriteParameter();
Key_press.set_line = 1;
// BINtoBCD(Para.Addr,&Key_press.dis_buff[0]);
Key_press.dis_buff[0]=0;
Key_press.dis_buff[1]=0;
Key_press.dis_buff[2] = 7;
Key_press.dis_buff[3] = 0;
}
else if(Key_press.set_key==3)
{
Key_press.set_line = 0;
// Para.Addr = Key_press.dis_buff[1]*100 + Key_press.dis_buff[2]*10 +Key_press.dis_buff[3];
//WriteParameter();
Key_press.dis_buff[0]=0;
Key_press.dis_buff[1]=0;
Key_press.dis_buff[2]=5;
Key_press.dis_buff[3]=0;
}
}
break;
case CANCEL_KEY:
if(Key_press.bits == 0)
{
Key_press.No_keydely = DELYTIME;
Key_press.Key_value = NO_KEY;
return;
}
Key_press.set_line++;
if(Key_press.set_line>=4)
{
Key_press.set_line = 0;
if(Key_press.set_key == 0)
{
if((Key_press.dis_buff[0]==8)&&(Key_press.dis_buff[1]==8)
&&(Key_press.dis_buff[2]==8)&&(Key_press.dis_buff[3]==8))
{
Key_press.set_key = 1;
Key_press.dis_buff[0]=0;
Key_press.dis_buff[1]=0;
Key_press.dis_buff[2]=4;
Key_press.dis_buff[3]=0;
}
else
{
Key_press.set_line = 0;
Key_press.dis_data = 0;
Key_press.dis_buff[0] = 0;
Key_press.dis_buff[1] = 0;
Key_press.dis_buff[2] = 0;
Key_press.dis_buff[3] = 0;
}
}
else
{
if(Key_press.set_key==2)
{
Key_press.set_line = 1;
//Para.Addr = Key_press.dis_buff[1]*100 + Key_press.dis_buff[2]*10 +Key_press.dis_buff[3];
}
else if(Key_press.set_key==3)
{
// Key_press.dis_data = Key_press.dis_buff[0]*1000 + Key_press.dis_buff[1]*100 + Key_press.dis_buff[2]*10 +Key_press.dis_buff[3];
}
//WriteParameter();
}
}
break;
default:break;
}
TO_Setdata(Key_press.set_key,Key_press.set_line);
Key_press.Key_value = NO_KEY;
}
/***************************************/
void TO_Setdata(unsigned char serial_num,unsigned char set_num)
{
unsigned char i;
DisData.data[0][0] = dispcod[12];
DisData.data[1][0] = dispcod[12];
for(i = 0;i<3;i++) DisData.data[0][i] = dispcod[12];
DisData.data[0][3] = dispcod[serial_num];
for(i = 0;i<4;i++)
DisData.data[1][i] = dispcod[Key_press.dis_buff[i]];
back_Data++;
if((back_Data>1)&&(back_Data<3))
{
DisData.data[1][set_num] =dispcod[12]; //DisData.data[0][1+set_num]&(~back_Data);
back_Data = 0;
}
}
/*****************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -