区别与上两个驱动的方法,用bitRead()读取位数,代码简洁一点。
//设置阴极接口
int d1 = 1;
int d2 = 2;
int d3 = 3;
int d4 = 4;
int d5 = 5;
int d6 = 6;
int d7 = 7;
//设置阳极接口
int a = 8;
int b = 9;
int c = 10;
int d = 11;
int e = 12;
int f = 13;
int g = A0;
int h = A1;
const unsigned char Yang[] = { a, b, c, d, e, f, g, h };
const unsigned char YangCode[]={
0x03, // 0 = 缺水
0x0C, // 1 = 低水位
0x70, // 2 = 定时关机
0x3F, // 3 = 0
0x06, // 4 = 1
0x5B, // 5 = 2
0x4F, // 6 = 3
0x66, // 7 = 4
0x6D, // 8 = 5
0x7D, // 9 = 6
0x07, // 10 = 7
0x7F, // 11 = 8
0x6F, // 12 = 9
0x80, // 13 = 摄氏度符号、睡眠符号
};
byte gyin[7] = { d1, d2, d3, d4, d5, d6, d7 };
byte gong_yin[5][7] = {
{ 1,1,1,1,1,1,0 }, // 0 = 缺水、低水位、定时关机
{ 0,1,1,1,1,1,1 }, // 1 = 温度十位、摄氏度符号
{ 1,0,1,1,1,1,1 }, // 2 = 温度个位、睡眠符号
{ 0,0,1,1,1,1,1 }, // 3 = 温度个和十位
{ 1,1,0,0,0,0,1 }, // 4 = 时钟个、十位和两点
};
void setup()
{
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
for(int i=1; i<14;i++)
{
pinMode(i,OUTPUT);
}
}
void loop()
{
GongYin(3);
GongYin(4);
for (int a=3;a<13;a++)
{
digitalWrite(h, HIGH);//显示时钟的冒号
delay(300);
YangShow(a);
delay(300);
}
}
void GongYin(int y)
{
for (int i = 0; i < 7; i++)
{
digitalWrite(gyin[i], gong_yin[y][i]);
}
}
void YangShow(char data)
{
char i;
char j;
char hc;
if(0<=data<14)
{
hc = YangCode[data];
for(i=0;i<8;i++)
{
j = bitRead(hc,i);
digitalWrite(Yang[i], j);
}
}
}