网站大量收购独家精品文档,联系QQ:2885784924

Arduino學习笔记A1-使用4017数字集成块扩展Arduino开关输入端.doc

Arduino學习笔记A1-使用4017数字集成块扩展Arduino开关输入端.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Arduino學习笔记A1-使用4017数字集成块扩展Arduino开关输入端

Arduino学习笔记A1 - 使用4017数字集成块扩展Arduino开关输入端 使用4017数字集成块扩展Arduino开关阵列 --用3个单片机引脚读取10个开关状态 使用Arduino做制作,需要有一组开关控制Arduino状态。但是Arduino引脚不多,传统接法开关多了要占用很多引脚。减少引脚的方法有很多,可以选矩阵方式,编码器方式,还有本文要介绍的分时复用开关法等。 特点:十个开关占用三个数据引脚,之后每增加十个开关就增加一个引脚。 4017是一块十进制计数器,每输入一个CLK脉冲,Q0~Q9轮流产生高电平。每时刻有且只有一个引脚高电平。 二极管防止多个开关闭合时,有的输出端输出高电平,有的输出低电平,互相接上的话,会低电平引脚会干扰高电平脚的工作。 开关用10路拨动式小型开关,或者自己选择其他开关形式。 电路工作原理: 先在RST(4017的复位脚MR)发出一个脉冲,使4017复位。 此时有且只有Q0输出高电平(Q0对应开关S1,Q9对应开关S10),读取一次输出信号DATA。如果第一个开关S1闭合了,应该DATA得到高电平;如果S1断开了,就DATA得到低电平。此时记DATA结果对应第一个开关S1的状态。 给CLK输出一个脉冲,让4017移位,有且只有Q1输出高电平(Q0,Q2~Q9均为低电平)。读取DATA。得到S2状态。 不断给CLK脉冲。总共给10次脉冲,让4017由Q0移动到Q9,完成一次开关遍历,每次移动获取一次DATA状态。存为S1~S10状态。 电路原理图如图: 2011-9-6 00:30 上传 下载附件 (7.55 KB) 洞洞板图(由于引脚多,不建议面包板制作。) 2011-9-6 00:30 上传 下载附件 (18.15 KB) 关于在一块Arduino上使用多块模块:每增加一块模块,可以增加十路开关(当然你也可以使用两块4017做成行列矩阵控制100个开关。不过那个就属于另外话题了)。增加的方式是将两块模块的RST,CLK,VCC,GND接在一起,接到单片机的相应引脚,然后两个模块的DATA脚分别接单片机两个IO口。 2011-9-6 00:30 上传 下载附件 (4.53 KB) Arduino程序例子: const int rst = 2; //板子的RST脚接Arduino的D4口(自定义) const int clk = 3; //板子的CLK脚接Arduino的D3口(自定义) const int data1 = 4; //板子的DATA脚接Arduino的D2口(自定义) //const int data2 = 5; //如果有第二块板子的话,两块板子共用RST和CLK引脚。DATA接Arduino的D5口,第三块板子可以类推接D6口(自定义) void setup() { Serial.begin(9600); pinMode(rst, OUTPUT); pinMode(clk, OUTPUT); pinMode(data1, INPUT); //pinMode(data2,INPUT); //如果有第二块板子的话要定义IO } void loop() { int KeyStatus[10] = {0}; //按照总开关数定义。可能要改为20,30等 digitalWrite(rst, HIGH); delayMicroseconds(10); //所有delayMicroseconds(10);均是给4017一个反应时间。 digitalWrite(rst, LOW); delayMicroseconds(10); for(int i = 0; i 10; i++) { KeyStatus\[i\] = digitalRead(data1); //KeyStatus[i+10] = digitalRead(data2); //读取第二个板子的状态,地址放在i+10 digitalWrite(clk, HIGH); delayMicroseconds(10); digitalWrite(clk, LOW); delayMicroseconds(10); } for(int i = 0; i 10; i++) //循环打印KeyStatus数组,i10可能要改为i20,30等 { Serial.print(KeyStatus\[i\]); Serial.print(\t); } Serial.println(); delay(100); } 洞洞板实物图: 2011-9-6 10:24 上传 下载附件 (34.38 KB) 2011-9-6

文档评论(0)

cv7c8hj6b4I + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档