翻百宝箱发现两年前买的595并联模块(德飞莱 数码管模块),能够支持8位数码管,接线需要CLK(时钟),SER(数据),ST(锁存)三根线。兴趣来了,就试着调试一下。
下图是接线的原理图。
直接贴代码了,也直接写注释
int LATCH = 2;//锁存端口
int SRCLK = 3;//时钟端口
int SER = 4;//数据端口
unsigned char Num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//这里是显示0-9的数字编码,对应的二进制编码可以看出对应辉管的开闭,这里只是方便使用,可以直接发送编码显示
unsigned char Point[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//这个是显示位置,大家可以转换到二进制看看到底怎么回事
void setup()
{
pinMode(LATCH,OUTPUT);
pinMode(SRCLK,OUTPUT);
pinMode(SER,OUTPUT);//三个语句全部设定Arduino管脚为输出
Serial.begin(115200);//串口通信Init,这里主要为了以后开发,顺手习惯加了,本Demo删掉即可
}
void SendByte(unsigned char dat)//发送Btye,也是写入的核心部分
{
uint8_t i;//定义一个循环变量i
for(i=0;i<8;i++)
{
digitalWrite(SRCLK,LOW);//首先根据手册,将时钟输出Low,然后才可以输入数据信号
if(dat & 0x80)//这里是一个LSB
digitalWrite(SER,HIGH);
else
digitalWrite(SER,LOW);
dat<<=1;
digitalWrite(SRCLK,HIGH);
}
}
void Send2Byte(unsigned char dat1,unsigned char dat2)
{
SendByte(dat1);
SendByte(dat2);
}
void Out595()
{
digitalWrite(LATCH,LOW);
delay(1);
digitalWrite(LATCH,HIGH);
}
void loop()
{
for(int i=0;i<8;i++)
{
Send2Byte(Point[i], Num[i]);
Out595();
delay(500);
}
}