Proteus8.9 仿真STM32407ZGT6系列003_Keys的u8 ReadKey(u16 IoBit)按键要有防抖延时。
#define Oppsit(A) (A!=0)?0:1
u8 i, k=1, t=0;
u8 str[8][17]={ "红灯亮!!!...\r\n",
"红亮灭!!!...\r\n",
"黄灯亮!!!...\r\n",
"黄亮灭!!!...\r\n",
"绿灯亮!!!...\r\n",
"绿亮灭!!!...\r\n",
"灯闪亮!!!...\r\n",
"灯闪灭!!!...\r\n",
};
u8 ReadKey(u16 IoBit){
if(0==GPIO_ReadInputDataBit(GPIOC,IoBit)){
return 0;
}
else{
delay_us(10);
if(1==GPIO_ReadInputDataBit(GPIOC,IoBit)) {
return1;
}
else{
return0;
}
}
}
int main (void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(9600); //串口初始化
LED_Init(); //初始化LED端口
KEY_Init(); //按键初始化
while(1)
{
if(1==ReadKey(0x0020))k=0;
if(1==k){
for(t=0;t<16;t++){
USART_SendData(USART1,(u16) str[6][t]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
for(i=0; i<6; i++){
PCout((i/2+1))=Oppsit((i%2));
for(t=0;t<16;t++){
USART_SendData(USART1,(u16) str[ i][t]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
delay_ms(500);
}
}
else{
for(t=0;t<16;t++){
USART_SendData(USART1,(u16) str[7][t]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
while(1!=ReadKey(0x0010));
k=1;
delay_ms(50);
}
}
} |