原理分析:
a,b,c,d,e,f,g,dp控制8段灯,其他4针脚控制位显示。
但是如何控制不同位同时显示不同数字,比如第一位显示1,第二位显示二,其实实际上是不同时显示,只不过是视觉效果。我们先选择1位置,然后点亮数字1,然后熄灭1位置,打开2位置,点亮2,整个过程十分迅速,所以看起来是显示12.
这里用同时点亮1位置b段和2位置c段做测试
void setup() {
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
}
//使用共阳4位数码管,相应的数字位为高电平则选中,相应的段位低电平在点亮
void loop() {
digitalWrite(9,1); //9号端口高电平
digitalWrite(2,0); //2号端口低电平
digitalWrite(2,1);
digitalWrite(9,0);
digitalWrite(10,1);
digitalWrite(3,0);
digitalWrite(10,0);
digitalWrite(3,1);
}
//显示23.45
int a=2;
#define w1 10
int const num[11][8]={
{0,0,0,0,0,0,1,1}, //0
{1,0,0,1,1,1,1,1}, //1
{0,0,1,0,0,1,0,1}, //2
{0,0,0,0,1,1,0,1}, //3
{1,0,0,1,1,0,0,1}, //4
{0,1,0,0,1,0,0,1}, //5
{0,1,0,0,0,0,0,1}, //6
{0,0,0,1,1,1,1,1}, //7
{0,0,0,0,0,0,0,1}, //8
{0,0,0,0,1,0,0,1}, //9
{1,1,1,1,1,1,1,0}, //10
};
void setup() {
for(int i=a;i<w1+4;i++){
pinMode(i,OUTPUT);
}
Serial.begin(9600);
}
void clc(){ //清屏
for(int i=a;i<a+8;i++){
digitalWrite(i,1); //段高电平熄灭
}
for(int i=w1;i<w1+4;i++){
digitalWrite(i,0); //位低电平熄灭
}
}
void led(int x,int y){
clc();
if(x>4)return;
digitalWrite(w1+x-1,1);
for(int i=0;i<8;i++)
digitalWrite(a+i,num[y][i]);
}
void loop() {
led(1,2);
led(2,3);
led(2,10);
led(3,4);
led(4,5);
}