arduino 四位数码管显示
1、要求:数码管显示1-9999内的质素。
2、材料: arduino开发板 、配套USB数据线 、 面包板、杜邦线
四位共阳极数码管、4个220Ω限流电阻。
3、四位共阳极数码管的引脚图。
其中abcdefgh 为数码管LED针脚,1-4为数码管组
4实物图。
5代码。
#include<Arduino.h>
int A = 2; //数码管a,b,c,d,e,f,g,h对应引脚
int B = 3;
int C = 4;
int D = 5;
int E = 6;
int F = 7;
int G = 8;
int H = 9;
int COM1 = 10; //数码管位选1,2,3,4对应引脚
int COM2 = 11;
int COM3 = 12;
int COM4 = 13;
void setup()
{
pinMode(A, OUTPUT); //设置为输出引脚
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(H, OUTPUT);
pinMode(COM1, OUTPUT);
pinMode(COM2, OUTPUT);
pinMode(COM3, OUTPUT);
pinMode(COM4, OUTPUT);
}
void loop()
{
int x, a; //输出 0到10000以内的质数
for (int l = 0; l < 10; l++ )
{
for (int k = 0; k < 10; k++)
{
for (int j = 0; j < 10; j++)
{
for (int i = 2; i < 10; i++)
{
x = l * 1000 + k * 100 + j * 10 + i;
a = sushu(x);
if (a)
{
Display(5, 1);
}
//1000/8=125
else
{
for (int q = 0; q < 125; q++)
{
Display(1, l);
delay(2);
Display(2, k);
delay(2);
Display(3, j);
delay(2);
Display(4, i);
delay(2);
}
}
}
}
}
}
}
int sushu(int n) //质数判断
{
int a = 0;
for ( int i = 2; i < n; i++)
{
if (n % i == 0) //如果有能整除的数,则n不是素数,循环结束
{
a = 1;
break;
}
}
return a;
}
void Display(int com, int num) //输出
{
digitalWrite(A, LOW); //去除余晖
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(H, LOW);
switch (com) //选通位选
{
case 1:
digitalWrite(COM1, HIGH); //选择位1
digitalWrite(COM2, LOW);
digitalWrite(COM3, LOW);
digitalWrite(COM4, LOW);
Display1(num);
break;
case 2:
digitalWrite(COM1, LOW); //选择位2
digitalWrite(COM2, HIGH);
digitalWrite(COM3, LOW);
digitalWrite(COM4, LOW);
Display1(num);
break;
case 3:
digitalWrite(COM1, LOW); //选择位3
digitalWrite(COM2, LOW);
digitalWrite(COM3, HIGH);
digitalWrite(COM4, LOW);
Display1(num);
break;
case 4:
digitalWrite(COM1, LOW); //选择位4
digitalWrite(COM2, LOW);
digitalWrite(COM3, LOW);
digitalWrite(COM4, HIGH);
Display1(num);
break;
defult:
digitalWrite(COM1, LOW);
digitalWrite(COM2, LOW);
digitalWrite(COM3, LOW);
digitalWrite(COM4, LOW);
break;
}
}
void Display1(int m) //数字0-9选择
{
switch (m)
{
case 0:
pinMode(A, HIGH); //0
pinMode(B, HIGH);
pinMode(C, HIGH);
pinMode(D, HIGH);
pinMode(E, HIGH);
pinMode(F, HIGH);
pinMode(G, LOW);
pinMode(H, LOW);
//delay(5);
break;
case 1:
pinMode(A, LOW) ; //1
pinMode(B, HIGH);
pinMode(C, HIGH);
pinMode(D, LOW);
pinMode(E, LOW);
pinMode(F, LOW);
pinMode(G, LOW);
pinMode(H, LOW);
//delay(5);
break;
case 2:
pinMode(A, HIGH) ; //2
pinMode(B, HIGH);
pinMode(C, LOW);
pinMode(D, HIGH);
pinMode(E, HIGH);
pinMode(F, LOW);
pinMode(G, HIGH);
pinMode(H, LOW);
//delay(5);
break;
case 3:
pinMode(A, HIGH); //3
pinMode(B, HIGH);
pinMode(C, HIGH);
pinMode(D, HIGH);
pinMode(E, LOW);
pinMode(F, LOW);
pinMode(G, HIGH);
pinMode(H, LOW);
delay(5);
break;
case 4:
pinMode(A, LOW); //4
pinMode(B, HIGH);
pinMode(C, HIGH);
pinMode(D, LOW);
pinMode(E, LOW);
pinMode(F, HIGH);
pinMode(G, HIGH);
pinMode(H, LOW);
delay(5);
break;
case 5:
pinMode(A, HIGH); //5
pinMode(B, LOW);
pinMode(C, HIGH);
pinMode(D, HIGH);
pinMode(E, LOW);
pinMode(F, HIGH);
pinMode(G, HIGH);
pinMode(H, LOW);
//delay(5);
break;
case 6:
pinMode(A, HIGH); //6
pinMode(B, LOW);
pinMode(C, HIGH);
pinMode(D, HIGH);
pinMode(E, HIGH);
pinMode(F, HIGH);
pinMode(G, HIGH);
pinMode(H, LOW);
//delay(5);
break;
case 7:
pinMode(A, HIGH); //7
pinMode(B, HIGH);
pinMode(C, HIGH);
pinMode(D, LOW);
pinMode(E, LOW);
pinMode(F, LOW);
pinMode(G, LOW);
pinMode(H, LOW);
//delay(5);
break;
case 8:
pinMode(A, HIGH); //8
pinMode(B, HIGH);
pinMode(C, HIGH);
pinMode(D, HIGH);
pinMode(E, HIGH);
pinMode(F, HIGH);
pinMode(G, HIGH);
pinMode(H, LOW);
//delay(5);
break;
case 9:
pinMode(A, HIGH); //9
pinMode(B, HIGH);
pinMode(C, HIGH);
pinMode(D, HIGH);
pinMode(E, LOW);
pinMode(F, HIGH);
pinMode(G, HIGH);
pinMode(H, LOW);
//delay(5);
break;
}
}