您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>數(shù)碼管>

74hc164驅(qū)動控制8個數(shù)碼管程序

2018年01月30日 08:56 網(wǎng)絡(luò)整理 作者:佚名 用戶評論(0

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) 輸入端上的一個低電平將使其它所有輸入端都無效,同時非同步地清除寄存器,強制所有的輸出為低電平。

74hc164驅(qū)動控制8個數(shù)碼管程序

數(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ù)碼管程序

74hc164驅(qū)動控制8個數(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

非常好我支持^.^

(9) 75%

不好我反對

(3) 25%

( 發(fā)表人:李倩 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?