PRJ - Led595 2 Counter 2#
2024-05-29
/* HC595 4位共阳级7段数码管
无延时刷新
*/
// int analogPin = A0; // potentiometer wiper (middle terminal) connected to
int latchPin = 7;
int clockPin = 6;
int dataPin = 8;
unsigned long previousMillis = 0;
int interval = 10; // 刷新间隔
int counter = 0;
// 数字的编码, 共阳级码表
unsigned char Dis_table[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90,0x00}; //LED状态显示的变量
// unsigned char Dis_buf[] = {0xF1,0xF2,0xF4,0xF8}; // 这个是多功能版的位选连线
unsigned char Dis_buf[] = {0xF8,0xF4,0xF2,0xF1}; // 与多功能版的位选连线是逆序排列
void setup ()
{
Serial.begin(9600);
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT); //让三个脚都是输出状态
}
void loop()
{
counter++;
// 转换成待显示的4个数字
int temp = counter;
int d[4]={0,0,0,0};
for(int i=0; i<4; i++){
int r = temp % 10;
d[4-i-1] = r;
temp = temp/10;
// Serial.println(r);
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
print4digits(d[0], d[1], d[2], d[3]);
previousMillis = currentMillis;
}
// print4digits(1,2,3,4);
Serial.println(counter);
// delay(200);
}
//打印1个4位数
//打印4个数字
void print4digits(int a, int b, int c, int d)
{
print1digit(0, a);
print1digit(1, b);
print1digit(2, c);
print1digit(3, d);
}
// 在指定位上打字一个数字
void print1digit(int chan, int number)
{
digitalWrite(latchPin,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
shiftOut(dataPin,clockPin,MSBFIRST,Dis_table[number]); //发送显示码 0-3
shiftOut(dataPin,clockPin,MSBFIRST,Dis_buf[chan] ); //发送通值
digitalWrite(latchPin,HIGH); //将ST_CP这个针脚恢复到高电平
// delay(1); //延时5ms
}