|
本帖最后由 951319804 于 2023-3-22 07:33 编辑
目的:当用软件(变量)方式实现上升沿,类似引脚的外部中断信号,上升沿触发。
有比下面更好的处理方法没有?
//定时器3中断服务程序
u8 X0_Up;
u8 X1_Up;
u8 X2_Up;
u8 X3_Up;
u8 X4_Up;
u8 X5_Up;
u8 X6_Up;
u8 X0_Down;
u8 X1_Down;
u8 X2_Down;
u8 X3_Down;
u8 X4_Down;
u8 X5_Down;
u8 X6_Down;
u8 X0;
u8 X1;
u8 X2;
u8 X3;
u8 X4;
u8 X5;
u8 X6;
u8 Y0;
u8 Y1;
u8 Y2;
u8 Y3;
u8 Y4;
int main (void){//主程序
while(1){
Scan();
Loop();
X_Up_Down_Clear();
}
}
void Scan()
{
X0=!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);
X1=!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3);
X2=!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4);
X3=!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);
X4=!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6);
X5=!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);
X6=!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8);
Y0=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12);
Y1=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
Y2=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14);
Y3=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15);
Y4=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8);
}
void Loop()
{
if(X0_Up==1)
{
Set_Y0();
}
else{
Reset_Y0();
}
if(X0_Down==1)
{
Set_Y0();
}
else{
Reset_Y0();
}
}
void X_Up_Down_Clear()
{
X0_Up=0;
X1_Up=0;
X2_Up=0;
X3_Up=0;
X4_Up=0;
X5_Up=0;
X6_Up=0;
X0_Down=0;
X1_Down=0;
X2_Down=0;
X3_Down=0;
X4_Down=0;
X5_Down=0;
X6_Down=0;
}
void TIM3_IRQHandler(void) //TIM3中断 10ms触发
{
if(X0!=X0_Last)
{
if(X0_Last==0)
{
X0_Up=1;
}else
{
X0_Down=1;
}
}
if(X1!=X1_Last)
{
if(X1_Last==0)
{
X1_Up=1;
}else
{
X1_Down=1;
}
}
if(X2!=X2_Last)
{
if(X2_Last==0)
{
X2_Up=1;
}else
{
X2_Down=1;
}
}
if(X3!=X3_Last)
{
if(X3_Last==0)
{
X3_Up=1;
}else
{
X3_Down=1;
}
}
if(X4!=X4_Last)
{
if(X4_Last==0)
{
X4_Up=1;
}else
{
X4_Down=1;
}
}
if(X5!=X5_Last)
{
if(X5_Last==0)
{
X5_Up=1;
}else
{
X5_Down=1;
}
}
if(X6!=X6_Last)
{
if(X6_Last==0)
{
X6_Up=1;
}else
{
X6_Down=1;
}
}
X0_Last=X0;
X1_Last=X1;
X2_Last=X2;
X3_Last=X3;
X4_Last=X4;
X5_Last=X5;
X6_Last=X6;
}
|
|