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 ...
随机推荐
- Linux(Cent OS7.2)下启动停止memcached方法及ps命令使用讲解
Linux下,以Cent OS7.2为例,安装memcached后的启动方法很简单,这里我们使用yum源安装. 首先查找yum源版本库的memchaced安装包, yum list | grep me ...
- 【练习】jQuery
作业要求: 参考下图,点击展示不同内容. 例: <!DOCTYPE html> <html lang="en"> <head> <meta ...
- 基于 socket.io 的 AI 服务 杂谈
为什么会想到来聊下这个话题. 前几天在公司的项目中,开发一个基于 socket.io 的直播 IM 功能. 直播分为两部分,一部分是比较昂贵的 视频推流, 另外一部分是 IM 即时聊天服务. 从这里开 ...
- Mysql 启动遇到 The server quit without updating PID file (/[FAILED]l/mysql/data/021rjsh216086s.pid)和Attempted to open a previously opened tablespace
今天在测试服务器做调试的时候,遇到Mysql的启动问题,好像是PID文件找不到了. 不科学啊,前几天还好好的呀,我也没怎么乱搞啊,然后一通百度,找到了几个解决办法. 1.有可能是已经存在mysql进程 ...
- powershell V6.0登基之:《瘸腿脚本大帝进攻linux!》
------[前言]------ 每个ps大版本发布,我都会写个消息. 这次的,主标题就叫:powershell v6.0登基副标题就叫:<瘸腿脚本大帝进攻linux!> ------[p ...
- JDK源码 - ArrayList
/** * ArrayList源码分析 * @author liyong * */ public class Util { @SuppressWarnings("unchecked" ...
- 【转载】从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...
- Vijos P1497 立体图【模拟】
立体图 描述 小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容.最近,他准备给小朋友讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子, ...
- 换行符 '\n' 和 回车符 '\r' 的区别?
顾名思义: 换行符就是另起一新行,光标在新行的开头: 回车符就是光标回到一旧行的开头:(即光标目前所在的行为旧行) ------------------------------------------ ...
- 网络爬虫技术Jsoup——爬到一切你想要的(转)
转自:http://blog.csdn.net/ccg_201216323/article/details/53576654 本文由我的微信公众号(bruce常)原创首发, 并同步发表到csdn博客, ...