华南农业大学独立按键检测实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

专业班次组别

题目实验三独立按键检测姓名(学号)日期 19.4.13

一、实验目的

1.学会使用独立按键

二、实验内容

1.通过按键选择LED灯左右移动

三、实验相关原理图

四、实验程序

#include //51单片机头文件

#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.为什么需要按键防抖?如何实现软件去抖?

答、由于按钮按下时,开关的触点并没有紧密贴合,而是可能存在不停地快速的通断通断,这种现象

称为按键抖动,所以需要按键防抖

方法:判断按键是否被按下之后,做短暂延时,待延时过后再检测一遍按键是否被按下,如果两者结

果相同,则认为该按键被按下。

相关文档
最新文档