四位数码管SH5461AS的问题,arduino学习实测.

arduino入门教程到第16课遇到些问题.效果一直是混乱的状态.

琢磨了半天发现一些问题,和大家分享下

1)接线图,原图没有问题,只是比较含糊,线比较多不好看. 我用红色数字标示数码管的12个脚,并且用蓝色数字标示出对应arduino的脚

2)程序问题(这个问题比较离谱)

刚开始按照示例怎么都没办法出效果,突发奇想,将所有的高低电平兑换.然后一切都和谐了,后来查了共阴共阳的原理图发现原来的代码可能是共阳的.

下面是我的代码:

int y[8] = {1,2,3,4,5,6,7,8};
int d[4] = {12,11,10,9};
int digital[10][8] = {{6,y[0],y[1],y[2],y[3],y[4],y[5]},{2,y[1],y[2]},{5,y[0],y[1],y[3],y[4],y[6]},{5,y[0],y[1],y[2],y[3],y[6]},{4,y[1],y[2],y[5],y[6]},{5,y[0],y[2],y[3],y[5],y[6]},{6,y[0],y[2],y[3],y[4],y[5],y[6]},{3,y[0],y[1],y[2]},{7,y[0],y[1],y[2],y[3],y[4],y[5],y[6]},{6,y[0],y[1],y[2],y[3],y[5],y[6]}};
long n=0;
int x=100;
int del=55;
void setup(){
  for(int i=0;i<8;i++)
    pinMode(y[i],OUTPUT);
  for(int i=0;i<4;i++)
    pinMode(d[i],OUTPUT);
}
void clearLEDs(){
  for(int i=0;i<8;i++)
    digitalWrite(y[i],LOW);
}
void pickDigit(int x){
  for(int i=0;i<4;i++)
    digitalWrite(d[i],HIGH);
  if(x>4) x=4;
  digitalWrite(d[x-1],LOW);
}
void showDigital(int x){
  for(int i=1;i<=digital[x][0];i++)
     digitalWrite(digital[x][i], HIGH);
}
void disp(int x){
  digitalWrite(y[7],HIGH);
}
void loop(){
  clearLEDs();
  pickDigit(1);
  showDigital((n/x/1000)%10);
  delayMicroseconds(del);

  clearLEDs();
  pickDigit(2);
  showDigital((n/x/100)%10);
  delayMicroseconds(del);

  clearLEDs();
  pickDigit(3);
  disp(3);
  showDigital((n/x/10)%10);
  delayMicroseconds(del);

  clearLEDs();
  pickDigit(4);
  showDigital(n/x%10);
  delayMicroseconds(del);

  n++;

  if(digitalRead(13) == LOW){
   n=0;
  }
}

  

最后是效果图和效果视频

时间: 2024-08-30 00:51:38

四位数码管SH5461AS的问题,arduino学习实测.的相关文章

Kienct与Arduino学习笔记(2) 深度图像和真实世界坐标系中的深度图

转载请注明出处:http://blog.csdn.net/lxk7280 首先,要接触一下KinectOrbit这个摄像机库,这篇文章中有这个库的下载网址和简单的介绍:http://blog.csdn.net/lxk7280/article/details/38184355.将下载得到的文件放到相应的Processing的一个子文件夹后,即可使用.    KinectOrbit库下的鼠标和键盘的操作方法: 1.右键拖拽:摄像机摇拍. 2.左键拖拽:绕对象旋转. 3.滚动:缩放操作. 4.P键保存

ROS与Arduino学习(三)订阅与发布

ROS与Arduino学习(二)订阅与发布 Tutorial Level:HelloWorld Next Tutorial: 本节介绍如何在arduino中发布与订阅消息.他和ROS通过串口进行节点通信. Tips 1 订阅 ros::Subscriber<std_msgs::Empty> sub("WWWW",&hhhhh); 其中WWWW是话题的名称,hhhhh是收到消息后调用的函数函数名称.sub是实例化订阅对象的名字,也可以是别的名字. nh.subscri

ROS与Arduino学习(七)小案例节点通信

ROS与Arduino学习(七)小案例节点通信 Tutorial Level:Logging日志 Next Tutorial: 原文地址:https://www.cnblogs.com/flyingjun/p/8952857.html

在树莓派Zero上使用C#+Mono驱动TM1637四位数码管

最近闲着无聊,买了个树莓派Zero,准备在上面跑.Net Core,来驱动各种传感器 就是上面这货.之前手上已经有一个树莓派3B+,但是介于3B+已经被我挂在路由器旁边当做服务器用,不是很方便拿来研究接口,于是就挑了一个便宜的Zero玩玩,事实证明,我想太天真了,我以为只要是Linux系统,就能安装.net Core,实际上呢,我整了一个晚上才不得不认识到一个事实:即便是.net Core也是认CPU架构的,Pi Zero用的ARMv6就是不支持,哎早知道在买之前多做做功课了,买一个树莓派4也是

基于Proteus仿真的Arduino学习(2)——LED点阵探究A(LED点阵基础)

一.前言: 随着LED的普及,以LED点阵为基础的显示设置层出不穷.例如,公交车的线路提示牌.高速公路的信息提示牌,安装在大楼上的广告屏幕等.下面,我们将由简单到复杂地探索各种LED点阵的使用方法,同样是基于Proteus的arduino仿真,以arduino uno R3为例,包含以下三个实验:LED点阵显示表情.LED点阵跑马灯.回纹灯.具体介绍如下: 二.仿真电路设计: 本次的三个实验用到的电路连接都是相同的,构建一个电路仿真图即可,仿真图如下: 电路图比较简单,只需将arduino最小系

Arduino学习笔记A6(补充) - 在串口读取多个字符串,并且转换为数字数组

功能如题目. 在串口收到逗号分割的6串数字比如 100,200,45,4,87,99 然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值 代码注释很详细了,就不再说明了. ARDUINO 代码复制打印 //定义一个comdata字符串变量,赋初值为空值 String comdata = ""; //numdata是分拆之后的数字数组 int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0;

基于Proteus仿真的Arduino学习(1)——Arduino Uno最小系统及LED的简单使用

一.前言:  A.Arduino简介 Arduino是由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Banzi.David Cuartielles.Tom Igoe.Gianluca Martino.David Mellis和Nicholas Zambetti.据说Auduino开发团队的领袖Massimo Banzi 之前是意大利Ivrea 一家高科技设计学校的老师.他的学生们经常抱怨找不到便宜好用的微控制器.2005年冬天,Massimo Banzi 跟David Cua

Kienct与Arduino学习笔记(1) 基础知识之Arduino’Kinect‘Processing

转载请注明出处:http://blog.csdn.net/lxk7280         首先,对即将要用到的主要东西进行初步的理解. 分为两大类,硬件和软件.硬件,即Kinect.软件,即Arduino和Processing.Arduibo相信很多人都用过,机器人.四轴飞行器等电子产品不少与Arduino这个浪漫的编译器有联系,为什么说浪漫呢,这不得不从它的开发者说起,Arduino的开发者可以说是艺术家出身,所以Arduino总给人一种浪漫高贵的感觉,不得不吐槽一下Keil,界面确实不怎么好

Arduino学习(一)

Arduino IDE自然是从官网下载的.pinMode(pin, mode):设置引脚.第一个参数表示设置的引脚,第二个参数表示将要把引脚设置成的模式.digitalWrite(pin, value):输出信号.第一个参数为引脚,第二个参数为输出模式.HIGH即为高电平,LOW即为低电平. setup():该函数中的代码只会运行一次.loop():该函数中的代码会不断重复运行. 数字I/O的使用:1.数字信号:数字信号是以0.1表示的不连续信号.高电平为数字信号1,低电平为数字信号0.Ardu