实验套件介绍
如图所示是我们的CC2530实验套件,从图上可以看出,板子中间有四个LED,分别是:LED3,LED4,LED1,LED2
板子上有两个按键SW1和SW2分别对应引脚 P1.2和P0.1
课堂任务
①通过按键SW1控制LED3灯的亮与灭
②通过按键SW1控制LED灯向下移动
③通过按键SW2控制LED灯向上移动
④SW1和SW2同时控制LED灯上下移动
预备知识
按键工作原理
当按键未被按下时,Key的电压为3.3V,当按键被按下时,Key的电压是0V。
按键按下与抬起改变的是Key的电压。
上拉与下拉
上拉是指单片机的引脚通过一个电阻连接到电源(高电平),当外界没有信号输入到引脚时,引脚被上拉电阻固定在高电平(逻辑值1)。
下拉是指单片机的引脚通过一个电阻连接到地(低电平),当外界没有信号输入到引脚时,引脚被下拉电阻固定在低电平(逻辑值0)。
思考:
上一页PPT的按键是上拉还是下拉?
请同学们画出一个下拉的按键原理图?
按键抖动
通常按键所用的都是机械弹性开关,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下就断开,而是在闭合或断开的瞬间均伴随一连串的抖动。
抖动时间的长短由按键的机械特性决定,一般为5~10 ms,一个按键的时间一般为几百毫秒至数秒。由于单片机的运行速度快,按键的抖动会导致在一次按下过程中,单片机识别出多次按下和抬起。为了避免这种情况,需要想办法消除抖动带来的影响。
按键消抖的方法有两种:
硬件消抖和软件消抖硬件消抖是通过威廉希尔官方网站
硬件设计的方法来过滤按键输出信号,将抖动信号过滤成理想信号后再输出给单片机。软件消抖是通过程序过滤的方法,在程序中检测到按键动作后,延时一会儿后再次检测按键状态,如果延时前后按键的状态一致,则说明按键是正常执行动作,否则认为是按键抖动。
实验套件上按键的原理图
通过SW1控制LED3的亮灭
任务描述:
①上电后LED3点亮,其他LED灯熄灭
②按下SW1后LED3熄灭,再次按下LED3点亮
初始化设置:
①P1_2设置输入,P1的其他引脚设为输出设置为输出
P1DIR =0xFB; //(0xFB = 1111 1011)
②点亮LED3,熄灭其他LED
LED3 = 1;
LED1 = 0;
LED2 = 0;
LED4 = 0;
读取按键的值
unsigned char KeyScan(void)
{
if(SW1 == 0) //按键被按下
{
Delay_mS(50); //消除抖动
if(SW1 == 0) //再次确认按键被按下
{
while(!SW1); //直到松开按键
return(1);
}
}
return(0);
}
主循环
while(1)
{
Keyvalue = KeyScan(); //读取按键值
if(Keyvalue》0)
{
LED3 = !LED3;
Keyvalue = 0;
};
}
通过SW1 控制LED灯向下流动
任务描述:
上电后LED3点亮,其他熄灭;
按下SW1后LED4点亮,其他熄灭;
再次按下SW1,LED1点亮,其他熄灭;
再次按下SW1,LED2点亮,其他熄灭:
实现代码
while(1){ Keyvalue = KeyScan(); //读取按键值 if(Keyvalue》0) { if(LED3 == 1) //如果当前LED3亮 { LED3 = 0; LED4 = 1; } else if(LED4 == 1) { LED4 = 0; LED1 = 1; } else if(LED1 == 1) { LED1 = 0; LED2 = 1; } else if(LED2 == 1) { LED2 = 0; LED3 = 1; } Keyvalue = 0; }; } ** LED灯向上移动**
同学们自己修改代码实现LED灯向上移动的效果!
按键SW2的使用
①初始化SW2,将SW2对应的引脚P01设为输入模式
P0DIR = 0; //P0所有引脚都设为输入模式 ②按键扫描函数添加如下代码
if(SW2 == 0) //低电平有效 { Delay(100); //检测到按键 if(SW2 == 0) { while(!SW2); //直到松开按键 return(2); } }
SW1和SW2同时控制LED灯上下移动
任务要求:
上电后LED3点亮,其他熄灭;
按下SW1按键后,点亮的那颗灯向下移动;
按下SW2按键后,点亮的那颗灯向上移动;
完整的源代码
while(1)
{
Keyvalue = KeyScan(); //读取按键值
if(Keyvalue》0)
{
if(LED3 == 1) //如果当前LED3亮
{
LED3 = 0;
LED4 = 1;
}
else if(LED4 == 1)
{
LED4 = 0;
LED1 = 1;
}
else if(LED1 == 1)
{
LED1 = 0;
LED2 = 1;
}
else if(LED2 == 1)
{
LED2 = 0;
LED3 = 1;
}
Keyvalue = 0;
};
}
实验套件介绍
如图所示是我们的CC2530实验套件,从图上可以看出,板子中间有四个LED,分别是:LED3,LED4,LED1,LED2
板子上有两个按键SW1和SW2分别对应引脚 P1.2和P0.1
课堂任务
①通过按键SW1控制LED3灯的亮与灭
②通过按键SW1控制LED灯向下移动
③通过按键SW2控制LED灯向上移动
④SW1和SW2同时控制LED灯上下移动
预备知识
按键工作原理
当按键未被按下时,Key的电压为3.3V,当按键被按下时,Key的电压是0V。
按键按下与抬起改变的是Key的电压。
上拉与下拉
上拉是指单片机的引脚通过一个电阻连接到电源(高电平),当外界没有信号输入到引脚时,引脚被上拉电阻固定在高电平(逻辑值1)。
下拉是指单片机的引脚通过一个电阻连接到地(低电平),当外界没有信号输入到引脚时,引脚被下拉电阻固定在低电平(逻辑值0)。
思考:
上一页PPT的按键是上拉还是下拉?
请同学们画出一个下拉的按键原理图?
按键抖动
通常按键所用的都是机械弹性开关,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下就断开,而是在闭合或断开的瞬间均伴随一连串的抖动。
抖动时间的长短由按键的机械特性决定,一般为5~10 ms,一个按键的时间一般为几百毫秒至数秒。由于单片机的运行速度快,按键的抖动会导致在一次按下过程中,单片机识别出多次按下和抬起。为了避免这种情况,需要想办法消除抖动带来的影响。
按键消抖的方法有两种:
硬件消抖和软件消抖硬件消抖是通过威廉希尔官方网站
硬件设计的方法来过滤按键输出信号,将抖动信号过滤成理想信号后再输出给单片机。软件消抖是通过程序过滤的方法,在程序中检测到按键动作后,延时一会儿后再次检测按键状态,如果延时前后按键的状态一致,则说明按键是正常执行动作,否则认为是按键抖动。
实验套件上按键的原理图
通过SW1控制LED3的亮灭
任务描述:
①上电后LED3点亮,其他LED灯熄灭
②按下SW1后LED3熄灭,再次按下LED3点亮
初始化设置:
①P1_2设置输入,P1的其他引脚设为输出设置为输出
P1DIR =0xFB; //(0xFB = 1111 1011)
②点亮LED3,熄灭其他LED
LED3 = 1;
LED1 = 0;
LED2 = 0;
LED4 = 0;
读取按键的值
unsigned char KeyScan(void)
{
if(SW1 == 0) //按键被按下
{
Delay_mS(50); //消除抖动
if(SW1 == 0) //再次确认按键被按下
{
while(!SW1); //直到松开按键
return(1);
}
}
return(0);
}
主循环
while(1)
{
Keyvalue = KeyScan(); //读取按键值
if(Keyvalue》0)
{
LED3 = !LED3;
Keyvalue = 0;
};
}
通过SW1 控制LED灯向下流动
任务描述:
上电后LED3点亮,其他熄灭;
按下SW1后LED4点亮,其他熄灭;
再次按下SW1,LED1点亮,其他熄灭;
再次按下SW1,LED2点亮,其他熄灭:
实现代码
while(1){ Keyvalue = KeyScan(); //读取按键值 if(Keyvalue》0) { if(LED3 == 1) //如果当前LED3亮 { LED3 = 0; LED4 = 1; } else if(LED4 == 1) { LED4 = 0; LED1 = 1; } else if(LED1 == 1) { LED1 = 0; LED2 = 1; } else if(LED2 == 1) { LED2 = 0; LED3 = 1; } Keyvalue = 0; }; } ** LED灯向上移动**
同学们自己修改代码实现LED灯向上移动的效果!
按键SW2的使用
①初始化SW2,将SW2对应的引脚P01设为输入模式
P0DIR = 0; //P0所有引脚都设为输入模式 ②按键扫描函数添加如下代码
if(SW2 == 0) //低电平有效 { Delay(100); //检测到按键 if(SW2 == 0) { while(!SW2); //直到松开按键 return(2); } }
SW1和SW2同时控制LED灯上下移动
任务要求:
上电后LED3点亮,其他熄灭;
按下SW1按键后,点亮的那颗灯向下移动;
按下SW2按键后,点亮的那颗灯向上移动;
完整的源代码
while(1)
{
Keyvalue = KeyScan(); //读取按键值
if(Keyvalue》0)
{
if(LED3 == 1) //如果当前LED3亮
{
LED3 = 0;
LED4 = 1;
}
else if(LED4 == 1)
{
LED4 = 0;
LED1 = 1;
}
else if(LED1 == 1)
{
LED1 = 0;
LED2 = 1;
}
else if(LED2 == 1)
{
LED2 = 0;
LED3 = 1;
}
Keyvalue = 0;
};
}
举报