当前位置: 首页 > news >正文

淘宝网站建设方案新闻投稿平台

淘宝网站建设方案,新闻投稿平台,东莞房价会涨吗,甘肃省水利厅引洮工程建设管理局网站按键消抖按键计数 前言一、按键消抖二、按键计数1、示例代码2、按键计数实验 参考资料 前言 本文主要介绍两种按键控制LED实验#xff1a;第一种是采用软件消抖的方法检测按键按下的效果#xff1b;第二种是根据按键按下次数#xff0c;四个LED灯呈现不同的流水灯效果。 一… 按键消抖按键计数 前言一、按键消抖二、按键计数1、示例代码2、按键计数实验 参考资料 前言 本文主要介绍两种按键控制LED实验第一种是采用软件消抖的方法检测按键按下的效果第二种是根据按键按下次数四个LED灯呈现不同的流水灯效果。 一、按键消抖 按键在按下时由于机械和物理特定的原因经常会产生一些开关变换而这些变换会让程序误认为是短时间内进行了多次按键。如何对输入信号进行消抖也就是在一段短时间内进行两次检查来确保按键确实被按下。如果没有消抖的话按下一次按键会产生很多不可预知的结果。所以Arduino按键消抖是为了解决按键在物理接触瞬间可能产生多次触发的现象。下面介绍两种常见的按键消抖方法① 使用外部电容硬件消抖通过在按键引脚和地之间并联一个适当大小的电容例如MCU复位电路采用0.1uF陶瓷电容减少了按键连接和断开时产生的电压突变同时也可以减少按键在短时间内多次触发的可能性。MCU复位电路如下图所示 ② 软件消抖利用Arduino的延时函数或计时器来检测按键状态的变化只有在按键状态保持一段时间后才认为按键有效。例如当检测到按键按下时可以设定一个延时时间在延时时间内如果检测到按键保持按下状态则认为按键有效。 按键消抖实验 1、本实验采用Arduino UNO R3开发板及自主搭建电路的方式实现预设功能。 2、按键消抖的电路图如下图所示 3、功能实现按下一个按键控制LED灯亮50ms然后熄灭。 4、实验要求采用延时消抖方法1编写按键扫描程序方法2计数器消抖方法3三种按键消抖方式实现功能。 代码实现方法1 //延时消抖按键控制LED //按下一个按键控制LED灯亮50ms然后熄灭int buttonPin 7; int ledPin 12;void setup() {pinMode(buttonPin, INPUT_PULLUP);pinMode(ledPin, OUTPUT);} void loop() {if (digitalRead(buttonPin) LOW){delay(10);if (digitalRead(buttonPin) LOW){digitalWrite(ledPin, HIGH);delay(50);digitalWrite(ledPin, LOW);while (digitalRead(buttonPin) LOW);}} }代码实现方法2 //编写按键扫描程序实现按键消抖 //按下一个按键控制LED灯亮50ms然后熄灭#define LED 12 #define KEY 7int KEY_NUM 0; //按键键值存放变量不等于1说明有按键按下void setup() {pinMode(LED, OUTPUT); //定义LED为输出引脚pinMode(KEY, INPUT_PULLUP); //定义KEY为带上拉输入引脚 }void loop() {ScanKey(); //按键扫描程序当按键按下时候该子程序会修改KEY_NUM的值if (KEY_NUM 1) //是否按键按下{digitalWrite(LED, HIGH);delay(50);digitalWrite(LED, LOW);} }void ScanKey() //按键扫描程序 {KEY_NUM 0; //清空变量if (digitalRead(KEY) LOW) //有按键按下{delay(10); //延时去抖动if (digitalRead(KEY) LOW) //有按键按下{KEY_NUM 1; //变量设置为1while (digitalRead(KEY) LOW); //等待按键松手}} }代码实现方法3 //计数器消抖按键控制LED //按下一个按键控制LED灯亮50ms然后熄灭const int buttonPin 7; // 按键引脚 const int ledPin 12; //LED引脚int buttonState HIGH; // 按键状态 int lastButtonState HIGH; // 上一次的按键状态 unsigned long lastDebounceTime 0; // 上一次的触发时间 unsigned long debounceDelay 10; // 消抖延时void setup() {pinMode(buttonPin, INPUT_PULLUP);pinMode(ledPin,OUTPUT); }void loop() {int reading digitalRead(buttonPin); // 读取按键引脚状态// 如果当前状态与上一次状态不同更新上一次状态和触发时间if (reading ! lastButtonState) {lastDebounceTime millis();}// 如果经过了消抖延时且当前状态与按键状态不同更新按键状态if ((millis() - lastDebounceTime) debounceDelay) {if (reading ! buttonState) {buttonState reading;// 按键按下时执行的操作if (buttonState HIGH) {digitalWrite(ledPin, HIGH);delay(50);digitalWrite(ledPin, LOW);}}}lastButtonState reading; } 二、按键计数 1、示例代码 使用Arduino来实现按键计数。简单的示例代码如下 //按键计数示例 const int buttonPin 2; // 按钮连接到数字引脚2 int buttonState 0; // 保存按钮状态 int count 0; // 计数器void setup() {pinMode(buttonPin, INPUT); // 设置按钮引脚为输入模式Serial.begin(9600); // 打开串口通信 }void loop() {buttonState digitalRead(buttonPin); // 读取按钮状态if (buttonState HIGH) { // 如果按钮按下count; // 计数器加1Serial.print(Button pressed. Count: );Serial.println(count);delay(200); // 等待200毫秒避免连续多次计数} }示例中我们将一个按钮连接到Arduino的数字引脚2。循环中我们读取按钮的状态如果按钮被按下高电平计数器就会加1并通过串口打印出计数器的值。为了避免按钮按下时的抖动我们在每次计数后延迟200毫秒。 上传这个代码到Arduino板然后打开串口监视器波特率设置为9600当你按下按钮时你将看到计数器的值递增。 2、按键计数实验 1本实验采用Arduino UNO R3开发板及自主搭建电路的方式实现预设功能。 2按键计数的电路图如下图所示 3实现功能基础 ① 第一次按下按键LED1点亮 ② 第二次按下按键LED1和LED2点亮 ③ 第三次按下按键LED1~LED3点亮 ④ 第四次按下按键LED1~LED4点亮 ⑤ 第五次按下按键LED1~LED4熄灭 ⑥ 第六次按下按键重复①现象 ⑦ 第七次按下按键重复②现象……以此类推。 代码实现 //编写按键扫描程序实现按键计数 /*实验现象 ① 第一次按下按键LED1点亮 ② 第二次按下按键LED1和LED2点亮 ③ 第三次按下按键LED1~LED3点亮 ④ 第四次按下按键LED1~LED4点亮 ⑤ 第五次按下按键LED1~LED4熄灭 ⑥ 第六次按下按键重复①现象 ⑦ 第七次按下按键重复②现象……以此类推。 */const int KEY 7; //按键引脚 const int LED1 9; //LED1引脚 const int LED2 10; //LED2引脚 const int LED3 11; //LED3引脚 const int LED4 12; //LED4引脚int KEY_count 0; //按键计数void setup() {pinMode(KEY, INPUT_PULLUP); //定义KEY为带上拉输入引脚pinMode(LED1, OUTPUT); //定义LED1为输出引脚pinMode(LED2, OUTPUT); //定义LED2为输出引脚pinMode(LED3, OUTPUT); //定义LED3为输出引脚pinMode(LED4, OUTPUT); //定义LED4为输出引脚 }void loop() {ScanKey(); //按键扫描程序当按键按下时候该子程序会修改KEY_count的值switch (KEY_count) {case 0:{digitalWrite(LED1, LOW);digitalWrite(LED2, LOW);digitalWrite(LED3, LOW);digitalWrite(LED4, LOW);}break;case 1:{digitalWrite(LED1, HIGH);}break;case 2:{digitalWrite(LED1, HIGH);digitalWrite(LED2, HIGH);}break;case 3:{digitalWrite(LED1, HIGH);digitalWrite(LED2, HIGH);digitalWrite(LED3, HIGH);}break;case 4:{digitalWrite(LED1, HIGH);digitalWrite(LED2, HIGH);digitalWrite(LED3, HIGH);digitalWrite(LED4, HIGH);}break;default:{KEY_count 0;}} }void ScanKey() //按键扫描程序 {if (digitalRead(KEY) LOW) //有按键按下{delay(10); //延时去抖动if (digitalRead(KEY) LOW) //有按键按下{KEY_count; //按键计数while (digitalRead(KEY) LOW); //等待按键松手}} }4实现功能进阶① 第一次按下按键LED1和LED3亮500ms后熄灭间隔150ms后LED2和LED4亮150ms后熄灭间隔150ms后LED1和LED3亮150ms后熄灭……重复操作。② 第二次按下按键LED1~LED4从左往右依次点亮等LED4熄灭后再从左往右依次点亮重复操作相邻两个LED灯亮灭的时间间隔为50ms。③ 第三次按下按键LED1~LED4从右往左依次点亮等LED1熄灭后再从右往左依次点亮重复操作相邻两个LED灯亮灭的时间间隔为50ms。④ 第四次按下按键LED1~LED4从左往右依次点亮再从右往左依次点亮重复操作相邻两个LED灯亮灭的时间间隔为50ms。⑤ 第五次按下按键LED1~LED4熄灭。⑥ 第六次按下按键重复①现象⑦ 第七次按下按键重复②现象……以此类推。 代码实现 //编写按键扫描程序实现按键计数 //注意按下按键后即下一次按下按键前时间间隔10s /*实验现象① 第一次按下按键LED1和LED3亮150ms后熄灭间隔150ms后LED2和LED4亮150ms后熄灭间隔150ms后LED1和LED3亮150ms后熄灭……重复操作。② 第二次按下按键LED1~LED4从左往右依次点亮等LED4熄灭后再从左往右依次点亮重复操作相邻两个LED灯亮灭的时间间隔为50ms。③ 第三次按下按键LED1~LED4从右往左依次点亮等LED1熄灭后再从右往左依次点亮重复操作相邻两个LED灯亮灭的时间间隔为50ms。④ 第四次按下按键LED1~LED4从左往右依次点亮再从右往左依次点亮重复操作相邻两个LED灯亮灭的时间间隔为50ms。⑤ 第五次按下按键LED1~LED4熄灭。⑥ 第六次按下按键重复①现象⑦ 第七次按下按键重复②现象……以此类推。 */const int KEY 7; //按键引脚 const int LED1 9; //LED1引脚 const int LED2 10; //LED2引脚 const int LED3 11; //LED3引脚 const int LED4 12; //LED4引脚int KEY_count 0; //按键计数void setup() {pinMode(KEY, INPUT_PULLUP); //定义KEY为带上拉输入引脚pinMode(LED1, OUTPUT); //定义LED1为输出引脚pinMode(LED2, OUTPUT); //定义LED2为输出引脚pinMode(LED3, OUTPUT); //定义LED3为输出引脚pinMode(LED4, OUTPUT); //定义LED4为输出引脚 }void loop() {ScanKey(); //按键扫描程序当按键按下时候该子程序会修改KEY_count的值switch (KEY_count) {case 0:{digitalWrite(LED1, LOW);digitalWrite(LED2, LOW);digitalWrite(LED3, LOW);digitalWrite(LED4, LOW);}break;case 1:{//第一次按下按键digitalWrite(LED1, HIGH);digitalWrite(LED2, LOW);digitalWrite(LED3, HIGH);digitalWrite(LED4, LOW);delay(150);digitalWrite(LED1, !digitalRead(LED1));digitalWrite(LED2, !digitalRead(LED2));digitalWrite(LED3, !digitalRead(LED3));digitalWrite(LED4, !digitalRead(LED4));delay(150);}break;case 2:{//刷新LED1~LED4状态digitalWrite(LED1, LOW);digitalWrite(LED2, LOW);digitalWrite(LED3, LOW);digitalWrite(LED4, LOW);//第二次按下按键digitalWrite(LED1, HIGH);delay(50);digitalWrite(LED1, !digitalRead(LED1));digitalWrite(LED2, HIGH);delay(50);digitalWrite(LED2, !digitalRead(LED2));digitalWrite(LED3, HIGH);delay(50);digitalWrite(LED3, !digitalRead(LED3));digitalWrite(LED4, HIGH);delay(50);digitalWrite(LED4, !digitalRead(LED4));delay(50);}break;case 3:{//刷新LED1~LED4状态digitalWrite(LED1, LOW);digitalWrite(LED2, LOW);digitalWrite(LED3, LOW);digitalWrite(LED4, LOW);//第三次按下按键digitalWrite(LED4, HIGH);delay(50);digitalWrite(LED4, !digitalRead(LED4));digitalWrite(LED3, HIGH);delay(50);digitalWrite(LED3, !digitalRead(LED3));digitalWrite(LED2, HIGH);delay(50);digitalWrite(LED2, !digitalRead(LED2));digitalWrite(LED1, HIGH);delay(50);digitalWrite(LED1, !digitalRead(LED1));delay(50);}break;case 4:{//刷新LED1~LED4状态digitalWrite(LED1, LOW);digitalWrite(LED2, LOW);digitalWrite(LED3, LOW);digitalWrite(LED4, LOW);//第四次按下按键digitalWrite(LED1, HIGH);delay(50);digitalWrite(LED1, !digitalRead(LED1));digitalWrite(LED2, HIGH);delay(50);digitalWrite(LED2, !digitalRead(LED2));digitalWrite(LED3, HIGH);delay(50);digitalWrite(LED3, !digitalRead(LED3));digitalWrite(LED4, HIGH);delay(50);digitalWrite(LED4, !digitalRead(LED4));delay(50);digitalWrite(LED4, HIGH);delay(50);digitalWrite(LED4, !digitalRead(LED4));digitalWrite(LED3, HIGH);delay(50);digitalWrite(LED3, !digitalRead(LED3));digitalWrite(LED2, HIGH);delay(50);digitalWrite(LED2, !digitalRead(LED2));digitalWrite(LED1, HIGH);delay(50);digitalWrite(LED1, !digitalRead(LED1));delay(50);}break;default:{digitalWrite(LED1, LOW);digitalWrite(LED2, LOW);digitalWrite(LED3, LOW);digitalWrite(LED4, LOW);KEY_count 0;}} }void ScanKey() //按键扫描程序 {if (digitalRead(KEY) LOW) //有按键按下{delay(10); //延时去抖动if (digitalRead(KEY) LOW) //有按键按下{KEY_count; //按键计数while (digitalRead(KEY) LOW); //等待按键松手}} }注意按下按键后即下一次按下按键前时间间隔10s。 参考资料 参考资料1: 【Arduino官方教程】数字处理示例三按键防抖 参考资料2: 【Arduino官方教程】数字处理示例五按键状态变化检测
http://www.zqtcl.cn/news/434178/

相关文章:

  • 亿星网站建设创业网站怎么做
  • 绿韵建设有限公司网站重庆景点分布图
  • 咨询类网站模板wordpress怎样切换语言
  • 大连网站建设与维护题库网站建设目标是
  • 威海网站开发询广西南宁网站运营
  • 网站的素材做logo长沙专业的网站建设企业
  • 网站显示速度的代码是什么情况专门做中式服装平台的网站
  • 驻马店做网站的公司大连网站模板建站
  • aso如何优化网站优化分析软件
  • IT周末做网站违反制度么wordpress 图床 插件
  • 成都网站建设scjsc888因网站建设关闭的公告
  • 唐山公司建设网站十大牌子网
  • 网站开发的选题依据电子商务网站建设内容
  • 中企动力做的网站被百度屏蔽推销网站话术
  • 四川网站制作广告设计自学网教程
  • 做个简单的企业小网站单纯做网站的公司
  • 河北省建设厅官方网站哈尔滨建设工程招聘信息网站
  • 茂名网站制作网页个人博客登录首页
  • 类似qq空间的网站wordpress 简历主题
  • 专业网站运营制作怎么写代码做网站
  • 安徽免费网站制作西安做行业平台网站的公司
  • 我想做服装网站怎么做网页设计优秀案例分析
  • 网站建设技术教程视频wordpress中文模版
  • 高端企业网站 程序纸牌网站建设
  • html制作网站推广最有效的办法
  • 做网站推广的工作内容凡客诚品创始人
  • 网站开发pc端和手机端外贸建设网站公司
  • 长沙哪家网站设计好上海成品网站
  • wordpress商城插件收费哪里可以做网站优化
  • 中国建设银行u盾下载假网站吗wordpress有没有付费