本帖最后由 liupk 于 2018-3-14 15:22 编辑
按键处理函数key_proc();
在中断里面如果
key_flag = 1; //10ms按键扫描标志位置1
标志位置一后就会调用
read_key(void) 读取键值
当读取键值以后
需要对键值进行处理
/*
*********************************************************************************************************
* 函 数 名: key_proc
* 功能说明: 按键处理函数
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void key_proc(void)
{
if(key_flag)
{
key_flag = 0;
key_temp = read_key();
}
//进入按键处理程序部分
switch(key_temp)
{
case 1: //S7控制L5
led5_temp = ~led5_temp;
if(led5_temp)
{
led5 = 1<<4;
}else
{
led5 = 0<<4;
}
XBYTE[0x8000] = led1|led2|led3|led4|led5|led6|led7|led8;
break;
case 2: //S6控制L6
led6_temp = ~led6_temp;
if(led6_temp)
{
led6 = 1<<5;
}else
{
led6 = 0<<5;
}
XBYTE[0x8000] = led1|led2|led3|led4|led5|led6|led7|led8;
break;
case 3: //S5控制L7
led7_temp = ~led7_temp;
if(led7_temp)
{
led7 = 1<<6;
}else
{
led7 = 0<<6;
}
XBYTE[0x8000] = led1|led2|led3|led4|led5|led6|led7|led8;
break;
case 4: //S4控制L8
led8_temp = ~led8_temp;
if(led8_temp)
{
led8 = 1<<7;
}else
{
led8 = 0<<7;
}
XBYTE[0x8000] = led1|led2|led3|led4|led5|led6|led7|led8;
break;
}
key_temp = 0; //完成按键处理程序后,清除键值
}
8个LED指示灯分为2组:L1~L4为远程控制组,
本地控制组的指示灯由独立按键控制开关。
S5控制L7,S4控制L8
这个是题目的要求
以下面的一个例子说明
case 1: //S7控制L5
led5_temp = ~led5_temp;
if(led5_temp)
{
led5 = 1<<4;
}else
{
led5 = 0<<4;
}
XBYTE[0x8000] = led1|led2|led3|led4|led5|led6|led7|led8;
break;
当按键为S7按下时候,先将 led5_temp = ~led5_temp; 取反一次(保证每次按下时,执行的动作也就是亮灭与上次的相反)
分别视情况执行
led5 = 1<<4;
或者
led5 = 0<<4;
XBYTE[0x8000] = led1|led2|led3|led4|led5|led6|led7|led8;
这样写的好处是为了,每个灯的亮灭不会影响别的灯,不会干扰 |