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