74HC164設(shè)備概述
8 位串入、并出移位寄存器
74HC16474HC164、74HCT164 是高速硅門 CMOS 器件,與低功耗肖特基型 TTL (LSTTL) 器件的引腳兼容。74HC164、74HCT164 是 8 位邊沿觸發(fā)式移位寄存器,串行輸入數(shù)據(jù),然后并行輸出。數(shù)據(jù)通過兩個輸入端(DSA 或 DSB)之一串行輸入;任一輸入端可以用作高電平使能端,控制另一輸入端的數(shù)據(jù)輸入。兩個輸入端或者連接在一起,或者把不用的輸入端接高電平,一定不要懸空。
時鐘 (CP) 每次由低變高時,數(shù)據(jù)右移一位,輸入到 Q0, Q0 是兩個數(shù)據(jù)輸入端(DSA 和 DSB)的邏輯與,它將上升時鐘沿之前保持一個建立時間的長度。
主復(fù)位 (MR) 輸入端上的一個低電平將使其它所有輸入端都無效,同時非同步地清除寄存器,強制所有的輸出為低電平。
數(shù)碼管
數(shù)碼管,也稱作輝光管,是一種可以顯示數(shù)字和其他信息的電子設(shè)備。玻璃管中包括一個金屬絲網(wǎng)制成的陽極和多個陰極。大部分數(shù)碼管陰極的形狀為數(shù)字。管中充以低壓氣體,通常大部分為氖加上一些汞和/或氬。給某一個陰極充電,數(shù)碼管就會發(fā)出顏色光,視乎管內(nèi)的氣體而定,一般都是橙色或綠色。
數(shù)碼管也稱LED數(shù)碼管,不同行業(yè)人士對數(shù)碼管的稱呼不一樣,其實都是同樣的產(chǎn)品。
按發(fā)光二極管單元連接方式可分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到+5V,當某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮,當某一字段的陰極為高電平時,相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到地線GND上,當某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點亮,當某一字段的陽極為低電平時,相應(yīng)字段就不亮。
八只74HC164控制八只數(shù)碼管程序
ORG0000H
JMPMAIN
ORG0013H
AJMPBreak_2
MAIN: ;主程序
MOVSP,#60H;設(shè)定堆棧指針
MOVTCON,04H
MOVIE,84H
MOVSCON,#00H;設(shè)定串口為0方式,同步移位寄存器,波特率Fosc/12,0:單機對單機,接收控制禁止
START:;
JNBP3.2,DISPLAY_09
CALLDISPLAY_0;調(diào)用顯示子程序
CALLDELAY;調(diào)用延時子程序
DISPLAY_0:;顯示子程序
MOVR7,#2
MOVR6,#2
MOVR5,#2
L0:
MOVA,#0;先發(fā)送十位數(shù)的LED數(shù)碼管段選碼
MOVDPTR,#TABLE;十位數(shù)的LED數(shù)碼管段選碼表地址送數(shù)據(jù)寄存器指針DPTR
MOVCA,@A+DPTR;選擇十位數(shù)計數(shù)器COUNT2,第二個LED數(shù)碼管段選碼送A
MOVSBUF,A;發(fā)送選擇十位數(shù)計數(shù)器COUNT2,第二個LED數(shù)碼管段選碼
L0_1:
JBCTI,L0_2;發(fā)送控制位TI=1,發(fā)送完畢跳轉(zhuǎn)到DATA1,并將TI清0
JMPL0_1;發(fā)送控制位TI=0,未發(fā)送完畢跳轉(zhuǎn)到LOOPD0,繼續(xù)檢測TI位
L0_2:
DJNZR7,L0
MOVR7,#2
MOVA,#0;先發(fā)送十位數(shù)的LED數(shù)碼管段選碼
MOVDPTR,#TABLE_1;十位數(shù)的LED數(shù)碼管段選碼表地址送數(shù)據(jù)寄存器指針DPTR
MOVCA,@A+DPTR;選擇十位數(shù)計數(shù)器COUNT2,第二個LED數(shù)碼管段選碼送A
MOVSBUF,A;發(fā)送選擇十位數(shù)計數(shù)器COUNT2,第二個LED數(shù)碼管段選碼
L0_3:
JBCTI,L0_4;發(fā)送控制位TI=1,發(fā)送完畢跳轉(zhuǎn)到DATA1,并將TI清0
JMPL0_3;發(fā)送控制位TI=0,未發(fā)送完畢跳轉(zhuǎn)到LOOPD0,繼續(xù)檢測TI位
L0_4:DJNZR6,L0
L0_5:
MOVA,#0;先發(fā)送十位數(shù)的LED數(shù)碼管段選碼
MOVDPTR,#TABLE;十位數(shù)的LED數(shù)碼管段選碼表地址送數(shù)據(jù)寄存器指針DPTR
MOVCA,@A+DPTR;選擇十位數(shù)計數(shù)器COUNT2,第二個LED數(shù)碼管段選碼送A
MOVSBUF,A;發(fā)送選擇十位數(shù)計數(shù)器COUNT2,第二個LED數(shù)碼管段選碼
L0_6:
JBCTI,L0_7;發(fā)送控制位TI=1,發(fā)送完畢跳轉(zhuǎn)到DATA1,并將TI清0
JMPL0_6;發(fā)送控制位TI=0,未發(fā)送完畢跳轉(zhuǎn)到LOOPD0,繼續(xù)檢測TI位
L0_7:
DJNZR5,L0_5
RET
DISPLAY_09:
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVCOUNT2,#0;十位數(shù)計數(shù)器COUNT2置2
MOVCOUNT3,#0;百位數(shù)計數(shù)器COUNT3置8
MOVCOUNT4,#0;百位數(shù)計數(shù)器COUNT3置8
MOVCOUNT5,#0;百位數(shù)計數(shù)器COUNT3置8
MOVCOUNT6,#0;百位數(shù)計數(shù)器COUNT3置8
MOVCOUNT7,#0;百位數(shù)計數(shù)器COUNT3置8
MOVCOUNT8,#0;百位數(shù)計數(shù)器COUNT3置8
START_09:
CALLDISPLAY;調(diào)用顯示子程序
CALLDELAY;調(diào)用延時子程序
W1:
INCCOUNT1;個位數(shù)計數(shù)器COUNT1加1
MOVA,COUNT1
CJNEA,#10,START_09;檢測個位數(shù)是否變化10次,如果不夠10次,跳轉(zhuǎn)到程序開始顯示處START
W10:
INCCOUNT2;十位數(shù)計數(shù)器COUNT2加1
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVA,COUNT2;
CJNEA,#6,START_09;檢測個位數(shù)是否變化10次,如果不夠10次,跳轉(zhuǎn)到程序開始處
W100:
INCCOUNT3;百位數(shù)計數(shù)器COUNT3加1
MOVCOUNT2,#0;十位數(shù)計數(shù)器COUNT2置0
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVA,COUNT3;
CJNEA,#1,START_09;檢測個位數(shù)是否變化10次,如果不夠10次,跳轉(zhuǎn)到程序開始處
W1000:
INCCOUNT4;千位數(shù)計數(shù)器COUNT4加1
MOVCOUNT3,#0;百位數(shù)計數(shù)器COUNT3置0
MOVCOUNT2,#0;十位數(shù)計數(shù)器COUNT2置0
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVA,COUNT4;
CJNEA,#10,START_09;檢測個位數(shù)是否變化10次,如果不夠10次,跳轉(zhuǎn)到程序開始處
W10000:
INCCOUNT5;萬位數(shù)計數(shù)器COUNT5加1
MOVCOUNT4,#0;千位數(shù)計數(shù)器COUNT4置0
MOVCOUNT3,#0;百位數(shù)計數(shù)器COUNT3置0
MOVCOUNT2,#0;十位數(shù)計數(shù)器COUNT2置0
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVA,COUNT5;
CJNEA,#6,START_09;檢測個位數(shù)是否變化10次,如果不夠10次,跳轉(zhuǎn)到程序開始處
W100000:
INCCOUNT6;十萬位數(shù)計數(shù)器COUNT6加1
MOVCOUNT5,#0;千位數(shù)計數(shù)器COUNT5置0
MOVCOUNT4,#0;千位數(shù)計數(shù)器COUNT4置0
MOVCOUNT3,#0;百位數(shù)計數(shù)器COUNT3置0
MOVCOUNT2,#0;十位數(shù)計數(shù)器COUNT2置0
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVA,COUNT6;
CJNEA,#1,START_09;檢測個位數(shù)是否變化10次,如果不夠10次,跳轉(zhuǎn)到程序開始處
W1000000:
INCCOUNT7;百萬位數(shù)計數(shù)器COUNT7加1
MOVCOUNT6,#0;千位數(shù)計數(shù)器COUNT6置0
MOVCOUNT4,#0;千位數(shù)計數(shù)器COUNT4置0
MOVCOUNT3,#0;百位數(shù)計數(shù)器COUNT3置0
MOVCOUNT2,#0;十位數(shù)計數(shù)器COUNT2置0
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVA,COUNT7;
CJNEA,#10,START_09;檢測個位數(shù)是否變化10次,如果不夠10次,跳轉(zhuǎn)到程序開始處
W10000000:
INCCOUNT8;萬萬位數(shù)計數(shù)器COUNT7加1
MOVCOUNT7,#0;萬位數(shù)計數(shù)器COUNT7加1
MOVCOUNT6,#0;千位數(shù)計數(shù)器COUNT6置0
MOVCOUNT4,#0;千位數(shù)計數(shù)器COUNT4置0
MOVCOUNT3,#0;百位數(shù)計數(shù)器COUNT3置0
MOVCOUNT2,#0;十位數(shù)計數(shù)器COUNT2置0
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVA,COUNT8;
CJNEA,#10,L1;檢測個位數(shù)是否變化10次,如果不夠10次,跳轉(zhuǎn)到程序開始處AJMPW0
L1:AJMPSTART
W0:
MOVCOUNT1,#0;個位數(shù)計數(shù)器COUNT1置0
MOVCOUNT2,#0;十位數(shù)計數(shù)器COUNT2置0
MOVCOUNT3,#0;百位數(shù)計數(shù)器COUNT3置0