预想是:1.开启后灯亮,oled显示文字。2.按下k1后灯亮 oled显示文字。3.再按下k1后led灯亮 oled显示文字
我想让程序简单停留,而不是我按一下k1,它会无限循环我case1里的程序。可能我说的有点矛盾,详细可以再细说一下,一直改不成预想的成果。
delay_init(168); //初始化延时函数
OLED_Init(); //初始化LED端口
delay_init(84);
GPIO_Num_Init();
Close_Display_Number();
LED_Init(); //初始化LED端口
KEY_Init(); //初始化与按键连接的硬件接口
while(1)
{
if(KEY1==0)
{
delay_ms(20);
if(KEY1==0)
{
k1++;
if(k1==3)
{
k1=0;
}
while(KEY1==0);
}
}
switch(k1)
{
case 0:
LED0 = 0;
OLED_Clear();
OLED_ShowString(18,17,"Ready\r\n",16,1);
OLED_ShowChinese(18,48,55,16,1);//
OLED_ShowChinese(36,48,56,16,1);//
OLED_ShowChinese(54,48,57,16,1);//
OLED_ShowChinese(72,48,58,16,1);//准备就绪
OLED_Refresh();
Dispaly_Number(4,4);
delay_ms(1000);
Dispaly_Number(3,3);
delay_ms(1000);
Dispaly_Number(2,2);
delay_ms(1000);
Dispaly_Number(1,1);
delay_ms(1000);
Close_Display_Number();
break;
case 1:
LED0=!LED0;
OLED_Clear();
OLED_ShowChinese(36,17,45,16,1);
OLED_ShowChinese(54,17,46,16,1);
OLED_ShowChinese(72,17,47,16,1);//姓名
OLED_Refresh();
OLED_ShowChinese(18,48,48,16,1);//电
OLED_ShowChinese(36,48,49,16,1);//气
OLED_ShowChinese(54,48,50,16,1);//自
OLED_ShowChinese(72,48,51,16,1);//动
OLED_ShowChinese(90,48,52,16,1);//化
OLED_Refresh();
Dispaly_Number_4(2, 0, 2, 3, 500);
Close_Display_Number();
break;
case 2:
LED1=!LED1;
OLED_Clear();
OLED_ShowString(18,48,"2023\r\n",16,1);
OLED_ShowChinese(18,17,53,16,1);//
OLED_ShowChinese(36,17,54,16,1);//年
OLED_Refresh();
Dispaly_Number_4(0, 5, 1, 9, 500);
Close_Display_Number();
break;
}
}
}
k1初值多少。
流程也有点问题,即使没有检测到按键,也会执行switch语句进行刷新操作。
那就再case里再加判断呗,允许到你想要的事件后,给它跳出来
已经解决了,把switch case写到if语句里面