// Serial.println("1th");
// byte data1 = B10000100;//Led数码管,Q7~Q0
// byte data2 = B10001111;//双色LED,Q7~Q0
// digitalWrite(loadPin, LOW);
// shiftOut(dataPin, clockPin, MSBFIRST, data2);//双色LED
// shiftOut(dataPin, clockPin, MSBFIRST, data1);//Led数码管
// digitalWrite(loadPin, HIGH);
const int dataPin = 13; //数据
const int loadPin = 14; //锁存
const int clockPin = 0; //时钟
const int enPin = 2;//en@
const int mrPin = 15;//MR@
unsigned char count[] = {0xC0, 0xFC, 0x92, 0x94, 0xAC, 0x85, 0x81, 0xDC, 0x80, 0x84, 0x88, 0xA1, 0xC3, 0xB0, 0x83, 0x8B}; //数码管0~9,A~F真值表
//SMG定义:0=写数码管,1=写LED
void write_data(unsigned int SMG, unsigned char data)
{
switch (SMG) {
case 0: {
if (data < 10)
{
byte data2 = B01111111;//双色LED,Q7~Q0,关闭第二数码管显示
digitalWrite(loadPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data2);//双色LED
shiftOut(dataPin, clockPin, MSBFIRST, count[data]);//Led数码管
digitalWrite(loadPin, HIGH);
}
else
{
byte data2 = B11111111;//双色LED,Q7~Q0 显示十位
digitalWrite(loadPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data2);//双色LED
shiftOut(dataPin, clockPin, MSBFIRST, 0x7f & count[data / 10]);//Led数码管 关闭个位
digitalWrite(loadPin, HIGH);
delay(60);
data2 = B01111111;//双色LED,Q7~Q0,显示个位
digitalWrite(loadPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data2);//双色LED
shiftOut(dataPin, clockPin, MSBFIRST, count[data % 10]);//Led数码管
digitalWrite(loadPin, HIGH);
delay(60);
}
break;
}
case 1: {
byte data2 = B10001111;//双色LED,Q7~Q0
digitalWrite(loadPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data2);//双色LED
shiftOut(dataPin, clockPin, MSBFIRST, count[data]);//Led数码管
digitalWrite(loadPin, HIGH);
break;
}
}
}
void setup()
{
pinMode(dataPin, OUTPUT);
pinMode(loadPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(enPin, OUTPUT);
digitalWrite(enPin, LOW);//启用芯片
pinMode(mrPin, OUTPUT);
digitalWrite(mrPin, LOW);//复位
delay(500);
digitalWrite(mrPin, HIGH);
Serial.begin(115200);
}
void loop()
{
for (unsigned char i = 0; i < 16; i++)
{
write_data(0, i);
delay(200);
}
}