74HC164控制數(shù)碼管顯示
剛開(kāi)始的時(shí)候把74HC164當(dāng)成了74HC573使了,還看了原理圖,半天摸不出個(gè)所以然,然后上網(wǎng)查了資料,才知道原來(lái)74HC164是串入并出的,此時(shí)才知道思考方向出錯(cuò)了。于是再看原理圖再分析示例代碼方有所獲。
原來(lái)164只有一個(gè)輸入端sda(P10),一個(gè)控制位clk(P11),還有四個(gè)位選:dig1~dig4分別與P13~P15相連,我們可以通過(guò)控制dig來(lái)達(dá)到選位的目的,然后再用sda來(lái)向164里傳數(shù)。而164共有8個(gè)輸出端,剛好對(duì)應(yīng)了數(shù)碼管的一個(gè)字節(jié)(a,b,c,d,,e,f,g,dp),從而顯示出不同的數(shù)。
還有我寫(xiě)的一個(gè)例子程序發(fā)現(xiàn)了一個(gè)小問(wèn)題,現(xiàn)在想不通,放到這以后再想:為164送數(shù)的時(shí)候不能用while(1)死循環(huán),因?yàn)檫@樣會(huì)導(dǎo)致傳不進(jìn)數(shù),至于原因,我還不清楚。
以下是我成功在74HC164上顯示數(shù)碼管的一個(gè)成功的例子:
#includesbitsda=P1^0;sbitclk=P1^1;sbitdig1=P1^2;sbitdig2=P1^3;sbitdig3=P1^4;sbitdig4=P1^5;inti;voidmain(){dig1=0;dig2=0;dig3=0;dig4=0;//將4個(gè)數(shù)碼管全部選中for(i=0;i<8;i++){clk=1;sda=1;//將所有段全部賦1,會(huì)使全部段都顯示clk=0;}}
程序運(yùn)行效果:將顯示4個(gè)8和4個(gè)點(diǎn)。