本篇学习74HC595D点亮8位共阴极数码


74HC595D简介
74HC595是一款串行输入,并行输出芯片,一个芯片内含有1个移位寄存器和1个存储寄存器,均为8位寄存器。
Q0 |
Q1 |
Q2 |
Q3 |
Q4 |
Q5 |
Q6 |
Q7 |
第8位数据 |
第7位数据 |
第6位数据 |
第5位数据 |
第4位数据 |
第3位数据 |
第2位数据 |
第1位数据 |
其功能引脚如下:
DS:串行数据输入引脚
SH:移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从DS输入)
ST:存储寄存器时钟输入。上升沿时,数据从移位寄存器转存到存储寄存器
Q7':当移位寄存器中的数据大于8bit时,最开始输入的bit将会从该引脚移出,可以用于595的级联
使用介绍:
当SH检测到上升沿时,会将DS引脚此时的数据保存到移位寄存器中,从Q0开始至Q7共8位数据,
若只使用1级595,此时应当给ST一个上升沿信号,将一字节数据从移位寄存器中保存到存储寄存器中,而Q0至Q7引脚将会输出对应的电平信号
若使用多级595,例如2级,当第9位数据进来时,1级595的首位数据将从 Q7' 引脚挤出,同过将该引脚与2级595的DS引脚相连,实现多级并联。
如何操作595点亮数码管
该设计使用2个595并联控制2个4位共阴极数码管,其中第一个595控制COM口,第二级595控制LED口
16bit数据对应关系如下:
|
Q0 |
Q1 |
Q2 |
Q3 |
Q4 |
Q5 |
Q6 |
Q7 |
高位 |
15 |
14 |
13 |
12 |
11 |
10 |
09 |
08 |
位 |
COM0 |
COM1 |
COM2 |
COM3 |
COM4 |
COM5 |
COM6 |
COM7 |
低位 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
段 |
LEDA |
LEDB |
LEDC |
LEDD |
LEDE |
LEDF |
LEDG |
LEDH |
共阴极数码管,COM口为低电平,LED口为高电平,即可点亮
以点亮第一个数码管(从左往右),显示1为例,即8位码数码管显示 1NNN NNNN(N表示未点亮)
位码:1111 1110 (COM口为低电平)
段码:0000 0110 (LED口为高电平)

位码为0xFE,段码为0x06,以MSB模式发送(即从最高位开始发送),
需要先发送8位段码0x06,此时不锁存,
再发送8位位码0xFE,将段码挤出到二级595中,此时再锁存。
// 对应代码应该是这样的
HC595_ST = 0; // 拉低存储时钟线
dat = 0x06; // 先发段码
for ( i = 0; i < 8; i++)
{
HC595_SH = 0; // 拉低数据时钟线
HC595_DS = dat & 0x80; // MSB 输出数据
dat = _crol_(dat, 1); // MSB 下一位数据
HC595_SH = 1; // 拉高数据时钟线,上升沿移位
}
dat = 0xfe; // 再发位码
for ( i = 0; i < 8; i++)
{
HC595_SH = 0; // 拉低数据时钟线
HC595_DS = dat & 0x80; // MSB 输出数据
dat = _crol_(dat, 1); // MSB 下一位数据
HC595_SH = 1; // 拉高数据时钟线,上升沿移位
}
HC595_ST = 1; // 写完8bit数据,拉高数据时钟线将数据保存到595

封装函数
向移位寄存器发送一字节数据

向N个74HC595D发送数据

对应数码管显示对应数据

一位数码管显示一个字符

显示一串字符,从第1个数码管开始,最多显示前8位

函数调用
// 在主函数中调用显示一串字符的函数
sprintf(buff, "a%.3fb", 123.4561);
SEG_Show_Str(buff);
