arduino扩展IO与M74HC595B芯片的使用,挪车电话提示牌的设计
2018-01-0915:39:24
首先arduino中shiftOUT()函数的定义与说明!
shiftOut()
描述
将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
注意:如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。
注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。
语法
shiftOut(dataPin, clockPin, bitOrder, value)
参数
dataPin:输出每一位数据的引脚(int)
clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)
bitOrder:输出位的顺序,最高位优先或最低位优先
value: 要移位输出的数据(byte)
调用的方法为
digitalWrite(latchPin,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
shiftOut(dataPin,clockPin,MSBFIRST,a);
/*这个就是用MSBFIRST参数让0-7个针脚以高电平输出(LSBFIRST 低电平)是dataPin的参数,
clockPin的参数是变量a,前面我们说了这个变量会一次从1+1+到256,是个十进制数,
输入到芯片后会产生8个二进制数,达到开关的作用*/
digitalWrite(latchPin,HIGH); //将ST_CP这个针脚恢复到高电平
delay(); //暂停500ms让你看到效果
先将latchpin拉低做准备,写入数据之后,拉高,即可。
整体代码如下
//VCC -- 5V
//GND -- GND
//DS -- A0
//ST_CP -- A1
//SH_CP -- A2
int latchPin = A1;//ST_CP
int clockPin = A2;//SH_CP
int dataPin = A0; //DS
//这里定义了74HC595的那三个脚
//设置阴极接口
int a = ;
int b = ;
int c = ;
int d = ;
int e = ;
int f = ;
int g = ;
//设置阳极接口
int d4 = ;
int d3 = ;
int d2 = ;
int d1 = ;
//设置变量
long n = ;
int x = ;
int del = ; //此处数值对时钟进行微调 byte segs[] = { a, b, c, d, e, f, g }; byte seven_seg_digits[][] = { { ,,,,,, }, // = 0
{ ,,,,,, }, // = 1
{ ,,,,,, }, // = 2
{ ,,,,,, }, // = 3
{ ,,,,,, }, // = 4
{ ,,,,,, }, // = 5
{ ,,,,,, }, // = 6
{ ,,,,,, }, // = 7
{ ,,,,,, }, // = 8
{ ,,,,,, } // = 9
}; void setup ()
{
pinMode(,INPUT);
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
//让74HC595的三个脚都是输出状
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}
//这个函数是显示一个数用的disNum(显示的数,显示的位,是否有小数点(1为有小数点))
void disNum(int Num_Qua, int Num_Pos)
{
int Num_Qua_B = ;
int Num_Pos_B = ;
switch (Num_Qua)
{
case :Num_Qua_B = ;break;
case :Num_Qua_B = ;break;
case : Num_Qua_B = ;break;
case :Num_Qua_B = ;break;
case :Num_Qua_B = ;break;
case :Num_Qua_B = ;break;
case :Num_Qua_B = ;break;
case :Num_Qua_B = ;break;
case :Num_Qua_B = ;break;
case :Num_Qua_B = ;break;
default: Num_Qua_B = ;break;
};
//这个值转换为2进制 为一个数abcdefg的需要亮的针脚。
switch (Num_Pos)
{
case :Num_Pos_B = 0xffe;break;
case :Num_Pos_B = ;break;
case :Num_Pos_B = ;break;
case :Num_Pos_B = ;break;
case :Num_Pos_B = ;break;
case :Num_Pos_B = ;break;
case :Num_Pos_B = ;break;
case :Num_Pos_B = ;break;
};
//这个值转换为2进制 为当前点亮的位数。
digitalWrite(latchPin,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
int L = Num_Qua_B; int R = Num_Pos_B;
shiftOut(dataPin,clockPin,MSBFIRST,R);
shiftOut(dataPin,clockPin,MSBFIRST,L);
digitalWrite(latchPin,HIGH); //将ST_CP这个针脚恢复到高电平
//上面是74HC595的输出方式 每个74HC595能接受一个8位的2进制数值来电灯 第一个74HC595再次输入一个8位的数值他会把他现在的数值传给第二个串联的74HC595。
delayMicroseconds();
}
//这个是显示数用的函数
void showNum(double number)//注意用double,int不够长了。
{
long num = number;
int ShowNumber [];
ShowNumber[] = (num/)%;
ShowNumber[]= (num/)%;
ShowNumber[] = (num/)%;
ShowNumber[] = (num/)%;
ShowNumber[] = (num/)%;
ShowNumber[] = (num/)%;
ShowNumber[] = (num/)%;
ShowNumber[]= (num/)%;
//取得每一位的数。然后存在一个数组里。
disNum(ShowNumber[],);
disNum(ShowNumber[],);
disNum(ShowNumber[],);
disNum(ShowNumber[],);
disNum(ShowNumber[],);
disNum(ShowNumber[],);
disNum(ShowNumber[],);
disNum(ShowNumber[],);
//依次显示数字,因为LED的闪烁很快,所以人眼无法识别闪烁。
}
void loop()
{
if (digitalRead()==LOW ) liang();
else cong();
}
void cong()
{
showNum();//相对简单的函数调用
clearLEDs();
pickDigit();
lightSegments();
delayMicroseconds(del);
clearLEDs();
pickDigit();
lightSegments();
delayMicroseconds(del);
clearLEDs();
pickDigit();
lightSegments();
delayMicroseconds(del);
clearLEDs();
pickDigit();
lightSegments();
delayMicroseconds(del);
}
void liang()
{
showNum();//相对简单的函数调用
clearLEDs();
pickDigit();
lightSegments();
delayMicroseconds(del);
clearLEDs();
pickDigit();
lightSegments();
delayMicroseconds(del);
clearLEDs();
pickDigit();
lightSegments();
delayMicroseconds(del);
clearLEDs();
pickDigit();
lightSegments();
delayMicroseconds(del);
}
void pickDigit(int x) //定义pickDigit(x),其作用是开启dx端口
{
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
switch(x)
{
case :
digitalWrite(d1, HIGH);
break;
case :
digitalWrite(d2, HIGH);
break;
case :
digitalWrite(d3, HIGH);
break;
default:
digitalWrite(d4, HIGH);
break;
}
}
void clearLEDs() //清屏
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
// 点亮对应数字的数码管
void lightSegments(int x) {
for (int i = ; i < ; i++) {
digitalWrite(segs[i], seven_seg_digits[x][i]);
}
}
功能与效果的实现
arduino扩展IO与M74HC595B芯片的使用,挪车电话提示牌的设计的更多相关文章
- 在web浏览器上显示室内温度(nodeJs+arduino+socket.io)
上次的nodejs操作arduino入门篇中实现了如何连接arduino.这次我们来实现通过arduino测量室内温度并在浏览器上显示出来. [所需材料] 硬件:LM35温度传感器,arduino u ...
- IM2603资料 Type-C 扩展坞电源管理芯片
用于带有集成降压转换器的 Type-C 外围应用的电源管理 IC IM2603 是一款主要用于 Type-C 外围应用的电源管理 IC. 它集成了一个带有内置高侧 MOSFET 的同步降压转换器和一个 ...
- Typec转HDMI+VGA+PD3.0+USB3.0扩展坞四合一芯片方案|CS5268替代AG9321
CS5268是一种高度集成的单芯片,适用于多个细分市场和显示应用,如拓展坞.扩展底座等. 2.CS5268参数说明 总则 USB Type-C规范1.2 HDMI规范v2.0b兼容发射机,数据速率高达 ...
- CS5268 Typec转HDMI+VGA+PD3.0四合一扩展坞转换器方案芯片
Capstone CS5268AN是一款高性能Type-C/DP1.4至HDMI2.0b和VGA转换器,设计用于将USB Type-C源或DP1.4源连接至HDMI2.0b接收器.CS5268AN集成 ...
- Arduino 各种模块篇 GPRS module 手机模块 短信 电话 上网 for texting, calling, internet
---恢复内容开始--- The GPRS shield which I tested is one which looks like this: ---恢复内容结束--- Need to be re ...
- 【STM32H7教程】第48章 STM32H7的FMC总线应用之是32路高速IO扩展
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第48章 STM32H7的FMC总线应用之是32路 ...
- Arduino小车学习与研究
信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(20135225) ---------- 索引 ...
- Arduino智能小车实践学习报告
Arduino智能小车实践学习报告 参与人员: 20135316 王剑桥 20135312 吴汉彦 20135319 朱锂 一. 背景了解: 单片机:将中央处理单元CPU(进行运算.控制).随机存储器 ...
- Arduino小车学习与研究博客
Arduino小车学习与研究博客 信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(201352 ...
随机推荐
- JS 对象API之获取原型对象
1.从 构造函数 获得 原型对象: 构造函数.prototype 2.从 对象实例 获得 父级原型对象: 方法一: 对象实例.__proto__ [ 有兼容性问题,不建议使用] 方法二: ...
- TS Eslint规则说明
,//禁止使用alert confirm prompt ,//禁止使用数组构造器 ,//禁止使用按位运算符 ,//禁止使用arguments.caller或arguments.callee ,//禁止 ...
- 移动端页面 css reset
这个是通用的 css reset.这个版本适用于 移动端页面 如果需要在 PC端使用,可以 修改 html{font-size: 10px;}为html{font-size: 12px;} 其他地方 ...
- 未知宽高图片水平垂直居中在div
<BODY> <div class="box"> <span class="car"></span> <i ...
- [Spark内核] 第40课:CacheManager彻底解密:CacheManager运行原理流程图和源码详解
本课主题 CacheManager 运行原理图 CacheManager 源码解析 CacheManager 运行原理图 [下图是CacheManager的运行原理图] 首先 RDD 是通过 iter ...
- Java 非线程安全的HashMap如何在多线程中使用
Java 非线程安全的HashMap如何在多线程中使用 HashMap 是非线程安全的.在多线程条件下,容易导致死循环,具体表现为CPU使用率100%.因此多线程环境下保证 HashMap 的线程安全 ...
- chrome调试工具高级不完整使用指南(实战一)
三.chrome调试工具实战 3.1 获取界面对应的HTML和修改样式 我们以博客园为例子来分析. 通过上面的操作就可以定位到对应的HTML代码 左侧菜单显示的就是当前指定元素层叠样式的一个情况 上面 ...
- 警惕phpstudy等开发神器使用默认配置可能带来的危险
0x00 前言 其实这个点早在之前,我就已经想到了,当时也觉得没啥就记在了我的印象笔记里. 而今天重新把这个点拿出来讲,主要是因为今天早上在温习nmap的时候,一不小心利用这个点,拿下了一位同事的电脑 ...
- C++\virtual 虚函数、纯虚函数
前提摘要: 虚函数联系到多态,多态联系到继承.所以本文中都是在继承层次上做文章.没了继承,什么都没得谈. 虚函数定义: 指向基类的指针或引用在操作它的多态类(子类/派生类)对象时,会根据不同的类对象, ...
- htm的常见布局
布局是CSS中一个重要部分,本文总结了CSS布局中的常用技巧,包括常用的水平居中.垂直居中方法,以及单列布局.多列布局的多种实现方式(包括传统的盒模型布局和比较新的flex布局实现),希望能给需要的小 ...