华南农业大学独立按键检测实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业班次组别
题目实验三独立按键检测姓名(学号)日期 19.4.13
一、实验目的
1.学会使用独立按键
二、实验内容
1.通过按键选择LED灯左右移动
三、实验相关原理图
四、实验程序
#include
#include
sbit K1 = P1^0; //对应K1按钮为P1^0
sbit K2 = P1^1; //对应K2按钮为P1^1
#define GPIO_LED P0 //定义led由P0口输出信号
void Delay10ms(unsigned int c); //延时函数声明,延时时间为为10ms
unsigned char Key_Scan(); //键盘扫描函数声明
void main(void) //主函数
{
unsigned char ledValue, keyNum; //定义两个无符号字符型变量ledValue与 keyNum ledValue = 0x01; //将0000 0001赋给 ledValue
while (1) //一直进行这个while循环
专业班次组别
题目实验三独立按键检测姓名(学号)日期 19.4.13 {
keyNum = Key_Scan(); //扫描键盘
if (keyNum == 1) //如果键值返回1
{
ledValue = _crol_(ledValue, 1); //左循环
}
else if (keyNum == 2) // 如果键值返回2
{
ledValue = _cror_(ledValue, 1);//右循环
}
GPIO_LED = ledValue;//点亮LED灯
}
}
unsigned char Key_Scan() //键盘扫描函数
{
unsigned char keyValue = 0 , i; //定义变量用于保存键值
if (K1==0) //检测按键K1是否按下
{
Delay10ms(1); //消抖
if (K1==0) //再次检测按键是否按下
{
keyValue = 1; //使得键值为1
i = 0; //令i=0
while ((i<50) && (K1==0)) //检测按键是否松开,当i小于50并且K1按下的
{ //时候,进入循环,单片机程序再此将循环500ms
Delay10ms(1);
i++;
}
}
}
if (K2==0) //检测按键K2是否按下
{
Delay10ms(1); //消除抖动
if (K2==0) //再次检测按键是否按下
{
keyValue = 2; //使得键值为2
i = 0; //令i=0
专业班次组别
题目实验三独立按键检测姓名(学号)日期 19.4.13 while ((i<50) && (K2==0)) //检测按键是否松开,当i小于50并且K2按
{ //下的时候,进入循环,单片机程序再此将
Delay10ms(1); //循环500ms
i++;
}
}
}
return keyValue; //将读取到键值的值返回
}
void Delay10ms(unsigned int c) //10ms的延时函数
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
五、思考问题
1.为什么需要按键防抖?如何实现软件去抖?
答、由于按钮按下时,开关的触点并没有紧密贴合,而是可能存在不停地快速的通断通断,这种现象
称为按键抖动,所以需要按键防抖
方法:判断按键是否被按下之后,做短暂延时,待延时过后再检测一遍按键是否被按下,如果两者结
果相同,则认为该按键被按下。