刚开始的时候把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上显示数码管的一个成功的例子:
#includesbit 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个点。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』