扩展Arduino-595.doc

上传人:M****1 文档编号:542849967 上传时间:2023-08-05 格式:DOC 页数:9 大小:1,000.01KB
返回 下载 相关 举报
扩展Arduino-595.doc_第1页
第1页 / 共9页
扩展Arduino-595.doc_第2页
第2页 / 共9页
扩展Arduino-595.doc_第3页
第3页 / 共9页
扩展Arduino-595.doc_第4页
第4页 / 共9页
扩展Arduino-595.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《扩展Arduino-595.doc》由会员分享,可在线阅读,更多相关《扩展Arduino-595.doc(9页珍藏版)》请在金锄头文库上搜索。

1、扩展Arduino:数字输出端口3 Comments Posted by flamingoeda in Arduino随着你对Arduino的深入理解和应用,相信很快就会遇到Arduino端口不够用的情况了。比如你可能需要在你的项目里控制更多的LED或者继 电器,但却发现12似乎是一个很难超越的数字;或者你的声音项目里需要更多的电位器,但是Arduino板上6个模拟输入接口的限制却让你捉襟见肘。如果此时Arduino的处理能力还尚能满足你的要求,只是接口数目不够,能够采用的一种办法就是对Arduino的数字端口和模拟端口进行扩展。 下图就是一个Arduino数字输出端口扩展板,利用它原理上你可

2、以将Arduino上的3个数字输出端口扩展成8个数字输出端口,通俗说来就是3个换8 个;-)实验这块板最简单的办法是用三根数字连接线,分别将该扩展板上的SCK,RCK和SER引脚与传感器扩展板上的数字I/O的8、9和10号引脚相连接:相应的测试代码如下所示:int dataPin = 8; / SERint latchPin = 9; / RCKint clockPin = 10; / SCKvoid setup() pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);void loop(

3、) for (int j = 0; j 255; j+) / start transmit data digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, j); / end transmit data digitalWrite(latchPin, HIGH); delay(500); 上述代码中最核心的是对函数shiftOut()的调用,它的作用往扩展板上的8个数字引脚上写一个字节,该字节的每一位分别对应扩展板上8个数字输出I/O引脚中的一个。除此之外,shiftOut()函数在调用之前需要调用digitalWr

4、ite()将RCK置低,调用完成之后再置高,这是由芯片的控制时序决定的:-) 程序运行时的效果相当于一个递增的计数器,在扩展板的8个输出端口上分别接8个LED灯,可以看到相应的累加效果:今天调试88双色LED显示屏,用三个74HC595级联,一点心得: 1、连接方式:三个595的11、12脚相连,第一级的14脚接MCU的串行数据输出,第一级的9(QH)接第二级的14脚,第二级的9(QH)接第三级的14脚,如有更多级可以一直串下去。 2、数据输出:先将第三级(最后一级)的数据输出(只需发出移位脉冲,不要发锁存脉冲),然后是上一级,直到所有级的数据全部发完(数据现在是一一对应),这时MCU发出锁存

5、脉冲,这样数据即可对号入座了。 以上信息希望对刚开始用595的朋友有用,由于水平有限,不足或错误之处请各位多多指教。如果读到这你以为一切就结束了的话,那可就大错特错了;-)除了单个使用之外,这一扩展板其实是可以通过相应的连接线实现级连的。也就是说,如果两块相连的话,你就可以用Arduino上的三个数字I/O端口扩展出16个数字输出端口,如果三块相连的话,你就可以用Arduino上的三个数字I/O端口扩展出24个数字输出端口来。理认上讲这样的扩展是可以一直做下去的,但受限于处理器的处理能力和电源大小、外部干扰等的影响,这样的扩展在实际应用中当然是有一定限制的,至于是多少嘛 ,那就得由实际的应用场

6、景来决定了。下面来看两块数字输出扩展板如果级联使用。在上述接好的电路的基础上,我们只需要再用一根数字输出扩展板连接线,将第一块数字输出扩展板上的输出端口(OUTPUT),与第二块数字输出扩展板上的输入端口(INPUT)连接起来,电路部分就算完成了:程序部分我们对上面的程序做一点点小的修改,由于是两块数字输出扩展板,因此我们需要分别调用两次shiftOut()函数,来为两块数字输出扩展板分别设置不同的值:int dataPin = 8; / SERint latchPin = 9; / RCKint clockPin = 10; / SCKvoid setup() pinMode(latchPi

7、n, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);void loop() for (int j = 0; j QB-QC-.-QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。/G(13脚): 高电平时禁止输出(高阻态)。如果的引脚不紧张,用一个引脚控制它,可以方

8、便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。注:1)74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。2)74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。3)595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,在正常使用时SCLR为高电平, G为低电平。从SER每输入一位数据,串行输595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,如下面的真值表,在正常使用时SCLR为高电

9、平, G为低电平。从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。 其实,看了这么多595的资料,觉得没什么难的,关键是看懂其时序图,说到底,就是下面三步(引用): 第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。 方法:送位数据到 P1.0。 第二步:目的:将位数据逐位移入74HC595,即数据串入 方法:P1.2产生一上升沿,将P1.0上的数据移入74HC595中.从低到高。 第三步:目的:并行输出数据。即数据并出 方法:P1.1产生一上升沿,将由P1.0上已移入数据寄存器中的数据 送入到输出锁存器。 说明: 从上可分析:从P1.2产生一上升沿(移入数据)和P1.1产生一上升沿 (输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。 而具体编程方法为 如:R0中存放3FH,LED数码管显示“0” ;*接口定义: DS_595 EQU P1.0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号