/*
* 让四个7段LED显示数字 =》让一个7段LED显示数字(本代码),四个分别显示数字即可
* 一个7段LED显示一个数字,这包含8个二极管的控制,每个二极管状态只需要“两”
*和“不亮”两个状态,是数字信号输入高低电平即可
* 所以逻辑就是如下:
* 一个二极管0/1状态 =》 循环8次,实现八个二极管的0/1状态,即一个数字
* = 》循环4次,实现四个数字(纠正:不需要,可以四个并行,不用循环结构)
*/
void setup()//一个数字的实现
{
pinMode(2, OUTPUT);//设置为输出模式
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
int num1[8] = {0,0,1,1,0,0,0,0};
int num2[8] = {0,1,1,0,1,1,0,1};
int num3[8] = {0,1,1,1,1,0,0,1};
int num4[8] = {0,0,1,1,0,0,1,1};
int num5[8] = {0,1,0,1,1,0,1,1};
int num6[8] = {0,1,0,1,1,1,1,1};
int num7[8] = {0,1,1,1,0,0,0,0};
int num8[8] = {0,1,1,1,1,1,1,1};
int num9[8] = {0,1,1,1,1,0,1,1};
int num0[8] = {0,1,1,1,1,1,1,0};//dp,a,b,c,d,e,f,g
//各个数字的编码
int delayTime = 1000;
void loop()
{
//数字1亮00110000
int length = sizeof(num1)/sizeof(num1[0]);
set1(num1,length,delayTime);
//数字1灭
set0(delayTime);//全归0
//数字2亮01101101
length = sizeof(num2)/sizeof(num2[0]);
set1(num2,length,delayTime);
//数字2灭
set0(delayTime);
//数字3 abcdg亮
length = sizeof(num3)/sizeof(num3[0]);
set1(num3,length,delayTime);
/*digitalWrite(2, LOW);//dp,a接在0引脚,状态是0
digitalWrite(3, HIGH);//a,1 ,1
digitalWrite(4, HIGH);//b,2 , 1
digitalWrite(5, HIGH);//c,3 , 1
digitalWrite(6, HIGH);//d,4 , 1
digitalWrite(7, LOW);//e,5 , 0
digitalWrite(8, LOW);//f,6 , 0
digitalWrite(9, HIGH);//g,7 , 1
delay(delayTime);
//其实这里就可以用011110010这串数组来表示数字“3”
//数字3灭
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(delayTime);
*/
set0(delayTime);
//数字4亮00110011
length = sizeof(num4)/sizeof(num4[0]);
set1(num4,length,delayTime);
//数字4灭
set0(delayTime);
//数字5亮01011011
length = sizeof(num5)/sizeof(num5[0]);
set1(num5,length,delayTime);
//数字5灭
set0(delayTime);
//数字6亮01011111
length = sizeof(num6)/sizeof(num6[0]);
set1(num6,length,delayTime);
//数字6灭
set0(delayTime);
//数字7亮01110000
length = sizeof(num7)/sizeof(num7[0]);
set1(num7,length,delayTime);
//数字7灭
set0(delayTime);
//数字8亮01111111
length = sizeof(num8)/sizeof(num8[0]);
set1(num8,length,delayTime);
//数字8灭
set0(delayTime);
//数字9亮01111011
length = sizeof(num9)/sizeof(num9[0]);
set1(num9,length,delayTime);
//数字9灭
set0(delayTime);
//数字0亮
length = sizeof(num0)/sizeof(num0[0]);
set1(num0,length,delayTime);
//数字0灭
set0(delayTime);
}
void set0(int Time)//全部电平归0
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(Time);
}
void set1(int num[] , int length , int Time)//设置相应的电平以显示数字
{
int i = 0; //i是数组索引
while( i <= 7)//该数组一共包含8个元素
{
int pincode = i + 2 ;//pincode是引脚号,这里索引是0,对应二极管是dp,引脚号是2
int Vcode = num[i]; //获取电平信息Vcode
if( Vcode == 1)//判断电平信息是0还是1
{
digitalWrite(pincode , HIGH);
}
else
{
digitalWrite(pincode , LOW);
}
i++;//进行下一个索引的判定
}
delay(Time);//保持时间
}