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);
}
}
} |