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芯片的使用,挪车电话提示牌的设计的更多相关文章

  1. 在web浏览器上显示室内温度(nodeJs+arduino+socket.io)

    上次的nodejs操作arduino入门篇中实现了如何连接arduino.这次我们来实现通过arduino测量室内温度并在浏览器上显示出来. [所需材料] 硬件:LM35温度传感器,arduino u ...

  2. IM2603资料 Type-C 扩展坞电源管理芯片

    用于带有集成降压转换器的 Type-C 外围应用的电源管理 IC IM2603 是一款主要用于 Type-C 外围应用的电源管理 IC. 它集成了一个带有内置高侧 MOSFET 的同步降压转换器和一个 ...

  3. Typec转HDMI+VGA+PD3.0+USB3.0扩展坞四合一芯片方案|CS5268替代AG9321

    CS5268是一种高度集成的单芯片,适用于多个细分市场和显示应用,如拓展坞.扩展底座等. 2.CS5268参数说明 总则 USB Type-C规范1.2 HDMI规范v2.0b兼容发射机,数据速率高达 ...

  4. CS5268 Typec转HDMI+VGA+PD3.0四合一扩展坞转换器方案芯片

    Capstone CS5268AN是一款高性能Type-C/DP1.4至HDMI2.0b和VGA转换器,设计用于将USB Type-C源或DP1.4源连接至HDMI2.0b接收器.CS5268AN集成 ...

  5. Arduino 各种模块篇 GPRS module 手机模块 短信 电话 上网 for texting, calling, internet

    ---恢复内容开始--- The GPRS shield which I tested is one which looks like this: ---恢复内容结束--- Need to be re ...

  6. 【STM32H7教程】第48章 STM32H7的FMC总线应用之是32路高速IO扩展

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第48章       STM32H7的FMC总线应用之是32路 ...

  7. Arduino小车学习与研究

    信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(20135225) ---------- 索引 ...

  8. Arduino智能小车实践学习报告

    Arduino智能小车实践学习报告 参与人员: 20135316 王剑桥 20135312 吴汉彦 20135319 朱锂 一. 背景了解: 单片机:将中央处理单元CPU(进行运算.控制).随机存储器 ...

  9. Arduino小车学习与研究博客

    Arduino小车学习与研究博客 信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(201352 ...

随机推荐

  1. rabbitmq:centos7安装与python调用

    1.centos安装rabbitmq 官网下载或者yum list |grep rabbitmq搜索安装,官网是最新的版本 wget http://www.rabbitmq.com/releases/ ...

  2. <The Art of Readable Code> 笔记二 (下)

    第1章  封装信息到名字 (Packing information into names) 4  附加额外信息 1)  encode value type 对于某些变量,附加额外的信息可以让人更好的理 ...

  3. Java点滴之类与对象

    类的概述 Java是一门纯粹的面向对象(OOP)语言,面向对象程序是由多个对象所组成的,而对象的创建又必须依赖于类,那么什么又是类呢?在现实世界中,我们常常将多个具有相同或相似特征的对象分为一类,并冠 ...

  4. 记录CentOS环境下将Solr部署到Tomcat

    首先切换到usr/local目录 cd /usr/local/ 下载tomcat到local目录 wget http://archive.apache.org/dist/tomcat/tomcat-7 ...

  5. nodejs 做后台的一个完整业务整理

    大家知道js现在不仅仅可以写前端界面而且可以写后端的业务了,这样js就可以写一个全栈的项目.这里介绍一个nodejs + express + mongodb + bootstap 的全栈项目. 1.安 ...

  6. CAD 二次开发 -- 自动加载开发的DLL

    CAD二次开发可以采用写扩展DLL的方式实现.该DLL的函数可以被CAD调用. 但是调用前,必须用命令netload 将该dll加载到CAD. 其实可以修改注册表,当CAD软件启动后,自动加载扩展DL ...

  7. AbstractQueuedSynchronizer的简单分析

    说明:本作者是文章的原创作者,转载请注明出处:本文地址:http://www.cnblogs.com/qm-article/p/7955781.html 一.AbstractQueuedSynchro ...

  8. 算法实现之python篇

    Python source code: gradient_boosting_regression.py from sklearn import ensemblefrom sklearn.metrics ...

  9. [搬运] C# 这些年来受欢迎的特性

    原文地址:http://www.dotnetcurry.com/csharp/1411/csharp-favorite-features 在写这篇文章的时候,C# 已经有了 17 年的历史了,可以肯定 ...

  10. 【JavaScript流程控制语句的用法及练习】

    1.做判断(if语句) if语句是基于条件成立才执行相应代码时使用的语句. 语法:  if(条件){  条件成立时执行代码   } 例子:1.假设你应聘web前端技术开发岗位,如果你会HTML技术,你 ...