刚开始写单片机接口的系列文章,可能会有些错误,恳请更正,一起进步!
转载请注明出处!
74HC595为现行流行的串并转换芯片,它是一个移位寄存器锁存器,既有移位功能又有锁存总能,相较74LS164来说更有实用价值。164也是应用很广泛的接口芯片,一般的书上都死以164为例来讲解的,它内部没有锁存器,只有个移位寄存器。在显示时会有闪烁!因此,595淘汰了164!
而且595的驱动电流达35毫安,足以驱动一般的TTL及CMOS芯片!放心使用!
595的优点是,当锁存器时钟来上升沿时才会有输出,否则保持上一次数据,这样就很好的适用于低速显示的场所!
我用了一天的时间来研究这两个芯片,觉得还是用595比较好,因为这个芯片控制起来比较安全,164会出现乱码现象!下面是我的硬件电路图:
用三个IO口轻松的控制18个七段数码管,而且速度是大约每秒执行200次左右,应该没多大问题,这样就可以很轻松的实现静态显示。
下面是我的计数程序,很简单的!
#include<reg51.h>
#define uchar unsignedchar
unsigned char data LED[]={0X3F, 0X06, 0X5B,0X4F, 0X66, 0X6D,0X7D, 0X07, 0X7F,0X6F};
sbit sh_cp=P2^0; //移位时钟
sbitds=P2^1;//串行输入数据
sbit st_cp=P2^2; //锁存器时钟
int qq;
//write(int abc)函数是数据写入函数
//display()是显示函数
void write(int abc)
{ uchar i;
for(i=0;i<8;i++)
{
sh_cp=0;
if(abc&0x80)
ds=1;
else
ds=0;
sh_cp=1;
abc<<=1;
}
}
void display(int dx)
{
uchar n;
int d[9];
d[0]=LED[dx%10];
d[1]=LED[dx%100/10];
d[2]=LED[dx%1000/100];
d[3]=LED[dx%10000/1000];
d[4]=LED[dx%100000/10000];
d[5]=LED[dx%1000000/100000];
d[6]=LED[dx%10000000/1000000];
d[7]=LED[dx%100000000/10000000];
d[8]=LED[0];
st_cp=0;
for(n=0;n<9;n++)
write(d[n]);
st_cp=1;
}
void delay(uchar t)
{
uchar a,b;
for(a=t;a>0;a--)
for(b=110;b>0;b--);
}
int count()
{
return ++qq;
//delay(10);
}
void main()
{
qq=120;
while(1)
{
display(count());
// show(1859);
}
}
我写这篇文章的目的在于使大家了解常用的接口芯片及其特性74HC595可以完全兼容TTL芯片,不用接上拉电阻,使用方便,操作简单,是串转并,总线驱动的良好芯片!
也可以考虑一下164,毕竟人家曾经呼风唤雨过,现在的课本上讲的也都还是164进行IO口扩展,其程序差不多就是没有锁存器时钟信号,读者可以自己做一下!
我把164的也发上来:
电路图:
这里注意,接的数码管不要太多,否则会闪的很厉害,这里接了四个,差不多效果还可以!
程序:
#include<reg51.h>
unsignedchardataLED[]={0xc0,0xF9,0xA4,0xB0,0x99,//0-4
0x92,0x82,0xF8,0x80,0x90,//5-9
0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E
0x8E,0x8C,0x89};//F,G,H,.,-}
sbit CLK=P2^0;
sbit DIN=P2^1;
void delay(int z)
{
int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void write(char x)
{
int i;
for(i=0;i<8;i++)
{
CLK=0;
DIN= x&0x80;
CLK=1;
x<<=1;
}
}
void display(int z)
{
inti,d[4];
d[0]=z%10;
d[1]=z%100/10;
d[2]=z%1000/100 ;
d[3]=z%10000/1000;
for(i=0;i<4;i++)
{
write(LED[d[i]]) ;
}
}
voidmain()
{
int qq=0;
while(1)
{
qq++;
display(qq);
delay(1000);
}
}