“第二十一课--Microduino 四位位数码管静态显示/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
Pkj讨论 | 贡献
程序
第52行: 第52行:
  
 
==程序==
 
==程序==
<source lang="cpp">
+
https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino_Advanced/MicroduinoFourDigitalStaticDisplay
 
 
/* 四位数码管的可控显示
 
** 注意,使用的5461AS是共阴极的,如果您是共阳极的需要注意某些部分的HIGH与LOW的替换
 
*/
 
 
 
//设置阳极接口
 
//D1口用来做串口数据传输(TX)
 
int a = 2;//D0,D1口在本程序中用来数据传出传入,不能当作数字针脚使用。
 
int b = 3;
 
int c = 4;
 
int d = 5;
 
int e = 6;
 
int f = 7;
 
int g = 8;
 
int p = 9;//小数点
 
//设置阴极接口(控制1、2、3、4数码管的亮与灭)
 
int d1 = 13;//千位
 
int d2 = 12;//百位
 
int d3 = 11;//十位
 
int d4 = 10;//个位
 
//设置变量
 
int del = 5000;  //此数值可用于对时钟进行微调
 
//int changepin = A0;//从A0口输入电位计数据
 
//int val=0;//接收从A0口获得的电位计数值
 
 
 
int val=777;
 
 
 
int val4=0;  //千位上的数字,即DIG1上的数字,对应针脚为d1,Microduino上的针脚为13
 
int val3=0;  //百位上的数字,即DIG2上的数字,对应针脚为d2,Microduino上的针脚为12
 
int val2=0;  //十位上的数字,即DIG3上的数字,对应针脚为d3,Microduino上的针脚为11
 
int val1=0;  //个位上的数字,即DIG4上的数字,对应针脚为d4,Microduino上的针脚为10
 
 
 
void setup()
 
{
 
  Serial.begin(9600);//设置串口通信速率为9600
 
 
  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);
 
 
 
  pinMode(p, OUTPUT);
 
 
 
 
 
 
 
}
 
 
 
void loop()
 
{
 
  //val=analogRead(changepin);//读取电位计数值并赋给val
 
  //Serial.println(val);//从串口中输出val的值
 
  for(int i=0;i<25;i++)//为了让数字不要那么灵敏的变来变去,给他循环25次恰好满足我的需求
 
  {
 
    //条件判断,根据val的位数分别显示
 
    if(val>=1000)//四位数
 
    {
 
      //注意,这里用使用了两种取某一位上的数字的算法,我只是想试试两种算法是否都好用
 
      val4=(val/1000)%10;                        /*比如1023除以1000等于1.023,
 
      取整数得到1,此即为千位上的数字,此为第一种算法,简单.*/
 
      val3=( val-((val/1000)%10*1000) )/100%10;  /*比如523减去523除以100等于5.23,取整后乘以100得到500,
 
      用523减去500得到23,再除以10得到2.3,取整后得到2,
 
      此为百位上的数字,此为第二章算法,稍显复杂,不过用起来也可以*/
 
      val2=(val-val/100%10*100)/10%10;
 
      val1= val-val/10%10*10-val/1000%10*1000;
 
 
 
      clearLEDs();
 
      pickDigit(1);
 
      pickNumber(val1);
 
      delayMicroseconds(del);
 
 
 
      clearLEDs();
 
      pickDigit(2);
 
      pickNumber(val2);
 
      delayMicroseconds(del);
 
 
 
      clearLEDs();
 
      pickDigit(3);
 
      pickNumber(val3);
 
      delayMicroseconds(del);
 
 
 
      clearLEDs();
 
      pickDigit(4);
 
      pickNumber(val4);
 
      delayMicroseconds(del);
 
    }
 
    else if(val>=100 && val<1000)//三位数
 
    {
 
      val3=(val/100)%10;
 
      val2=((val-(((val/100)%10)*100))/10)%10;
 
      val1=val-((val/100)%10)*100-((((val-((val/100)%10)*100)/10)%10)*10);
 
 
 
      clearLEDs();
 
      pickDigit(1);
 
      pickNumber(val1);
 
      delayMicroseconds(2*del);
 
 
 
      clearLEDs();
 
      pickDigit(2);
 
      pickNumber(val2);
 
      delayMicroseconds(del);
 
 
 
      clearLEDs();
 
      pickDigit(3);
 
      pickNumber(val3);
 
      delayMicroseconds(del); 
 
    }
 
    else if(val>=10 && val<100)//两位数
 
    {
 
      val2=(val/10)%10;
 
      val1=val-(((val/10)%10)*10);
 
 
 
      clearLEDs();
 
      pickDigit(1);
 
      pickNumber(val1);
 
      delayMicroseconds(del);
 
 
 
      clearLEDs();
 
      pickDigit(2);
 
      pickNumber(val2);
 
      delayMicroseconds(del);
 
    }
 
    else if(val>=0 && val<10)//一位数
 
    {
 
      val1=val;
 
      clearLEDs();
 
      pickDigit(1);
 
      pickNumber(val1);
 
      delayMicroseconds(del);
 
    }
 
  }
 
}
 
 
 
void pickDigit(int x)  //定义pickDigit(x),其作用是开启dx端口
 
{
 
  digitalWrite(d1, HIGH);
 
  digitalWrite(d2, HIGH);
 
  digitalWrite(d3, HIGH);
 
  digitalWrite(d4, HIGH);
 
 
 
  if(x==1)
 
  {
 
    digitalWrite(d4, LOW);
 
  }
 
  else if(x==2)
 
  {
 
    digitalWrite(d3, LOW);
 
  }
 
  else if(x==3)
 
  {
 
    digitalWrite(d2, LOW);
 
  }
 
  else if(x==4)
 
  {
 
    digitalWrite(d1, LOW);
 
  }
 
}
 
 
 
void pickNumber(int x)  //定义pickNumber(x),其作用是显示数字x
 
{
 
  switch(x)
 
  {
 
  default:
 
    zero();
 
    break;
 
  case 1:
 
    one();
 
    break;
 
  case 2:
 
    two();
 
    break;
 
  case 3:
 
    three();
 
    break;
 
  case 4:
 
    four();
 
    break;
 
  case 5:
 
    five();
 
    break;
 
  case 6:
 
    six();
 
    break;
 
  case 7:
 
    seven();
 
    break;
 
  case 8:
 
    eight();
 
    break;
 
  case 9:
 
    nine();
 
    break;
 
  }
 
}
 
 
 
void clearLEDs()  //清屏
 
{
 
  digitalWrite(a, LOW);
 
  digitalWrite(b, LOW);
 
  digitalWrite(c, LOW);
 
  digitalWrite(d, LOW);
 
  digitalWrite(e, LOW);
 
  digitalWrite(f, LOW);
 
  digitalWrite(g, LOW);
 
 
 
  digitalWrite(p, LOW);
 
}
 
 
 
 
 
/*
 
下面实现数字0到9以及小数点dp的显示,你也可以使用二维数组来实现这一部分,
 
详情请看博文:http://tahoroom.sinaapp.com/archives/5790.html
 
*/
 
void zero()  //定义数字0时各阳极针脚的开关
 
{
 
  digitalWrite(a, HIGH);
 
  digitalWrite(b, HIGH);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, HIGH);
 
  digitalWrite(e, HIGH);
 
  digitalWrite(f, HIGH);
 
  digitalWrite(g, LOW);
 
}
 
 
 
void one()  //定义数字1时各阳极针脚的开关
 
{
 
  digitalWrite(a, LOW);
 
  digitalWrite(b, HIGH);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, LOW);
 
  digitalWrite(e, LOW);
 
  digitalWrite(f, LOW);
 
  digitalWrite(g, LOW);
 
}
 
 
 
void two()  //定义数字2时各阳极针脚的开关
 
{
 
  digitalWrite(a, HIGH);
 
  digitalWrite(b, HIGH);
 
  digitalWrite(c, LOW);
 
  digitalWrite(d, HIGH);
 
  digitalWrite(e, HIGH);
 
  digitalWrite(f, LOW);
 
  digitalWrite(g, HIGH);
 
}
 
 
 
void three()  //定义数字3时各阳极针脚的开关
 
{
 
  digitalWrite(a, HIGH);
 
  digitalWrite(b, HIGH);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, HIGH);
 
  digitalWrite(e, LOW);
 
  digitalWrite(f, LOW);
 
  digitalWrite(g, HIGH);
 
}
 
 
 
void four()  //定义数字4时各阳极针脚的开关
 
{
 
  digitalWrite(a, LOW);
 
  digitalWrite(b, HIGH);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, LOW);
 
  digitalWrite(e, LOW);
 
  digitalWrite(f, HIGH);
 
  digitalWrite(g, HIGH);
 
}
 
 
 
void five()  //定义数字5时各阳极针脚的开关
 
{
 
  digitalWrite(a, HIGH);
 
  digitalWrite(b, LOW);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, HIGH);
 
  digitalWrite(e, LOW);
 
  digitalWrite(f, HIGH);
 
  digitalWrite(g, HIGH);
 
}
 
 
 
void six()  //定义数字6时各阳极针脚的开关
 
{
 
  digitalWrite(a, HIGH);
 
  digitalWrite(b, LOW);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, HIGH);
 
  digitalWrite(e, HIGH);
 
  digitalWrite(f, HIGH);
 
  digitalWrite(g, HIGH);
 
}
 
 
 
void seven()  //定义数字7时各阳极针脚的开关
 
{
 
  digitalWrite(a, HIGH);
 
  digitalWrite(b, HIGH);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, LOW);
 
  digitalWrite(e, LOW);
 
  digitalWrite(f, LOW);
 
  digitalWrite(g, LOW);
 
}
 
 
 
void eight()  //定义数字8时各阳极针脚的开关
 
{
 
  digitalWrite(a, HIGH);
 
  digitalWrite(b, HIGH);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, HIGH);
 
  digitalWrite(e, HIGH);
 
  digitalWrite(f, HIGH);
 
  digitalWrite(g, HIGH);
 
}
 
 
 
void nine()  //定义数字9时各阳极针脚的开关
 
{
 
  digitalWrite(a, HIGH);
 
  digitalWrite(b, HIGH);
 
  digitalWrite(c, HIGH);
 
  digitalWrite(d, HIGH);
 
  digitalWrite(e, LOW);
 
  digitalWrite(f, HIGH);
 
  digitalWrite(g, HIGH);
 
}
 
 
 
void dpoint() //点亮小数点
 
{
 
  digitalWrite(p, HIGH);
 
}
 
 
 
</source>
 
  
 
==调试==
 
==调试==

2014年3月26日 (三) 08:50的版本

Language English

目的

本教程将教大家如何使用四位数码管显示一个数字

设备


原理图

第二十一课-Microduino4位数码管静态显示原理图.jpg


引脚表

Microduino引脚 数码管引脚
D2 A(11)
D3 B(7)
D4 C(4)
D5 D(2)
D6 E(1)
D7 F(10)
D8 G(5)
D9 Dp(3)
D13 DIG1(12)
D12 DIG2(9)
D11 DIG3(8)
D10 DIG4(6)

程序

https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino_Advanced/MicroduinoFourDigitalStaticDisplay

调试

步骤一:首先我用的 5461AS 型四位数码管,它是共阴极数码管(对应的5461BS型为共阳极型)

不同款式的数码管阵脚也许不同,因此本文的接线方法不一定适用于任何四位数码管,您在使用之前应该知道所用数码管的针脚分布。

5461AS 型四位数码管的引脚分布图如下:

第二十一课-Microduino4位数码管静态显示引脚分布图1.jpg

从图中可以看到 12、9、8、6 针脚控制着千位、百位、十位、个位(这里分别编号1、2、3、4位,后文要用到)的数码管的亮与灭。剩下的针脚用数字注明了。

虽然从电路图上看针脚排列很 无规律,但是物理元件上的针脚分布却很简单。

见下图。将数码管正面朝向自己,正放(小数点显示在右下方),那么针脚的分布将如下图所示(左下角为1,逆时 针方向旋转一周则转到针脚12。即左下角为1,右下角为6,右上角为7,左上角为12)。如果你不想记住,可以用记号笔在数码管的侧面写上针脚,方便以后 使用。

第二十一课-Microduino4位数码管静态显示引脚分布图2.jpg

步骤二:把代码复制到IDE中,编译

在这里要说说什么是共阴极和共阳极。共阴极是指数码管中所有控制数字显示的针脚分别接到阳极上,输出电平是高(HIGH)时亮,是低(LOW)时灭。共阳极与之相反,输出电平是高(HIGH)时灭,是低(LOW)时却亮。我用的 5461AS 型四位数码管,它是共阴极数码管(对应的5461BS型为共阳极型)。即按照上面的说法,所有控制数字的针脚是高(HIGH) 时就亮。

步骤三:电路连接,电路连接图照片如下:

第二十一课-Microduino4位数码管静态显示连接图1.jpg
第二十一课-Microduino4位数码管静态显示连接图2.jpg

步骤四:运行代码

步骤五:看数码管显示

结果

四位数码管会显示四位数字.

视频