新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2019-8-6
- 在线时间
- 12 小时
|
3金钱
新人一个,最近在做一些小题目,卡在电压测量监控设备的显示部分,要求KEY0按键切换调整界面1的一个字符的显示,KEY1按键切换整个界面,代码先附上,给的是出错的代码,正确的代码只需要将KEY_Scan(0)的值赋给变量KEY_Scan,再进行判断即可,仿真过程中 KEY_Scan()函数出现问题,
现象:哪一个if语句在前就运行哪一个,如果KEY0按键的判断在前就无法对界面进行切换,如果KEY1判断在前就只能进行界面切换,无法设置界面1的参数,但是单个运行都是可以的
修改:每次需对按键判断时,都提前先赋值给变量,然后就可以了
困扰了我一天了,虽然自己尝试解决了,但是不知其所以然,很困扰,希望哪位知道原因的能给解释一下,不胜感激
int main(void)
{
u16 adc_i;
u8 sys_window=1;
// u8 KEY_scan;//定义一个变量来存储KEY_Scan()函数的返回值
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED
LCD_Init(); //初始化LCD FSMC接口
Adc_Init(); //初始化ADC
KEY_Init(); //初始化按键
POINT_COLOR=RED; //画笔颜色:红色
BACK_COLOR = BLUE;
LCD_Clear(WHITE);
while(1)
{
adc_i = Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
LCD_ShowWindow_1(adc_i); //进入程序先显示界面1,
sys_window = 1;
// KEY_scan = KEY_Scan(0); //此处是将扫描的值提前赋给变量,不然会出错
if(((KEY_scan(0))==1)&&(sys_window==1)) //当按键B1按下,应该关闭LED报警功能
{
while(sys_window)
{
LCD_ShowString(339,239,200,24,24,"LED:OFF ");
KEY_scan = KEY_Scan(0);
if(( KEY_Scan(0))==1) //当按键B1再次按下
{
break;
}
if(( KEY_Scan(0))==2)
{
sys_window=0;
break;
}
}
}
else if((( KEY_Scan(0))==2)&&(( KEY_Scan(0))!=1)) //如果按键B2按下
{
LCD_Clear(WHITE);//清屏,方便下一步切换界面,注意:非叠加方式只对选中区域有清屏效果,不能实现对整个区域的清屏
while(1)
{
LCD_ShowWindow_2(00,00,00); //显示界面2,默认定时时间为00-00-00
// KEY_scan = KEY_Scan(0);
if(( KEY_Scan(0))==2) //如果按键B2再一次按下
{
LCD_Clear(WHITE); //清屏,方便下一步切换界面
break; //跳出第二层while循环,进入界面1
}
else if(( KEY_Scan(0))==3) //如果按键B3按下,应该切换到时
{
/*
if(KEY_Scan(0)==3) //如果按键B3再次按下,应该切换到分
{
if(KEY_Scan(0)==3) //如果按键B3再次按下,应该切换到秒
{
}
}
*/
}
}
}
}
}
|
|