74HC164控制数码管显示

刚开始的时候把74HC164当成了74HC573使了,还看了原理图,半天摸不出个所以然,然后上网查了资料,才知道原来74HC164是串入并出的,此时才知道思考方向出错了。于是再看原理图再分析示例代码方有所获。

原来164只有一个输入端sda(P10),一个控制位clk(P11),还有四个位选:dig1~dig4分别与P13~P15相连,我们可以通过控制dig来达到选位的目的,然后再用sda来向164里传数。而164共有8个输出端,刚好对应了数码管的一个字节(a,b,c,d,,e,f,g,dp),从而显示出不同的数。
还有我写的一个例子程序发现了一个小问题,现在想不通,放到这以后再想:为164送数的时候不能用while(1)死循环,因为这样会导致传不进数,至于原因,我还不清楚。

以下是我成功在74HC164上显示数码管的一个成功的例子:


#include

sbit sda=P1^0;
sbit clk=P1^1;
sbit dig1=P1^2;
sbit dig2=P1^3;
sbit dig3=P1^4;
sbit dig4=P1^5;
int i;
void main()
{
dig1=0;
dig2=0;
dig3=0;
dig4=0;//将4个数码管全部选中

for(i=0;i<8;i++)
{
clk=1;
sda=1; //将所有段全部赋1,会使全部段都显示
clk=0;
}

}


程序运行效果:将显示4个8和4个点。

你可能感兴趣的:(STC89C52单片机)