|
l 多個(gè)數(shù)碼管—數(shù)字變換—輪流顯示—軟件控制—掃描子程序—位指令控制
//多數(shù)碼管輪換顯示、定位顯示—左移或右移—可以引出進(jìn)位顯示
ORG 0000H
MAIN:
MOV A,#00H MOV P2,A CPL A MOV P3,A
MOV P2,#0C0H MOV P3,#01H
ACALL YANSHI
MOV P2,#0F9H MOV P3,#02H
ACALL YANSHI
MOV P2,#0A4H MOV P3,#04H
ACALL YANSHI
MOV P2,#0B0H MOV P3,#08H
ACALL YANSHI
MOV P2,#99H MOV P3,#01H
ACALL YANSHI
MOV P2,#92H MOV P3,#02H ACALL YANSHI
MOV P2,#082H MOV P3,#04H ACALL YANSHI MOV P2,#0f8H MOV P3,#08H ACALL YANSHI
MOV P2,#80H MOV P3,#01H ACALL YANSHI MOV P2,#90H MOV P3,#01H ACALL YANSHI
MOV P2,#088H MOV P3,#01H ACALL YANSHI MOV P2,#83H MOV P3,#01H ACALL YANSHI
LCALL MAIN
YANSHI: MOV R5,#04H F2: MOV R7,#0FFH F1: DJNZ R7, F1 DJNZ R6, F2
RET
END
程序說(shuō)明:
關(guān)于數(shù)碼管問(wèn)題,需要指出,單管顯示、多口多管顯示(一口一管、雙口多管)、靜態(tài)顯示、計(jì)數(shù)顯示、多口多管進(jìn)位(一口一管、雙口多管)、多口控制與掃描
a) 多個(gè)按鍵與多個(gè)數(shù)碼管(位輸入與字節(jié)輸出)—?jiǎng)討B(tài)—數(shù)組—掃描子程序
//多數(shù)碼管輪換顯示—可以引出進(jìn)位顯示—數(shù)表的應(yīng)用
ORG 0000H
START:
MAIN:
MOV R0,#00H ;寄存器中放數(shù)值0
MOV DPTR,#TABLE ;指針指向數(shù)表
DISP: ;段標(biāo)記
MOV A,R0 ;將寄存器中的數(shù)值轉(zhuǎn)移到累加器中
MOVC A,@A+DPTR ;以DPTR作為基礎(chǔ),與累加器相加得到新地址給累加器
MOV P2,A ;將累加器的地址給P2口
MOV P3,#08H ;個(gè)位數(shù)顯示位控制
ACALL DELAY ;調(diào)延時(shí)子程序
INC R0 ;寄存器R0加1
CJNE R0,#33H,DISP ;寄存器與立即數(shù)33比較,不相等則轉(zhuǎn)移到DISP循環(huán)。相等則順序執(zhí)行
MOV R1,#00H ;寄存器中放數(shù)值0
MOV DPTR,#TABLE1 ;指針指向數(shù)表
DISP1: ;段標(biāo)記
MOV A,R1 ;將寄存器中的數(shù)值轉(zhuǎn)移到累加器中
MOVC A,@A+DPTR ;以DPTR作為基礎(chǔ),與累加器相加得到新地址給累加器
MOV P2,A ;將累加器的地址給P2口
MOV P3,#04H ;十位數(shù)顯示位控制
ACALL DELAY ;調(diào)延時(shí)子程序
INC R1 ;寄存器R0加1
CJNE R1,#33H,DISP1 ;寄存器與立即數(shù)33比較,不相等則轉(zhuǎn)移到DISP循環(huán)。相等則順序執(zhí)行
LJMP MAIN
DELAY: ;延時(shí)子程序---RET為止
MOV R7,#0FFH ;給寄存器植入某個(gè)數(shù)值
LOOP0:
MOV R6,#0FFH ;給寄存器植入某個(gè)數(shù)值
LOOP1:
DJNZ R6,LOOP1 ;減1比較,直至寄存器中的數(shù)值為零跳轉(zhuǎn)
DJNZ R7,LOOP0 ;減1比較,直至寄存器中的數(shù)值為零跳轉(zhuǎn)
RET ;返回子程序DELAY
TABLE:
DB 0C0H,0FFH,0C0H,0FFH ;間隔交替用于體現(xiàn)閃爍,去除則為連續(xù)遞進(jìn)。
DB 0C0H,0FFH,0F9H,0FFH,0A4H,0FFH,0B0H,0FFH,99H,0FFH,92H,0FFH,82H,0FFH,0F8H,
DB 80H,0FFH,90H,0FFH,88H,0FFH,83H,0FFH,0C6H,0FFH,0A1H,0FFH,86H,0FFH,8EH, 00H
TABLE1:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0c6H,0A1H,86H,8EH
END
//4個(gè)一組的數(shù)碼管同步顯示—數(shù)表
ORG 0000H
START:
MAIN:
MOV R0,#00H ;寄存器中放數(shù)值0
MOV DPTR,#TABLE ;指針指向數(shù)表
DISP: ;段標(biāo)記
MOV A,R0 ;將寄存器中的數(shù)值轉(zhuǎn)移到累加器中
MOVC A,@A+DPTR ;以DPTR作為基礎(chǔ),與累加器相加得到新地址給累加器
MOV P2,A ;將累加器的地址給P2口
MOV P3,#0FH ;四位數(shù)顯示位控制
ACALL DELAY ;調(diào)延時(shí)子程序
INC R0 ;寄存器R0加1
CJNE R0,#33H,DISP ;寄存器與立即數(shù)33比較,不相等則轉(zhuǎn)移到DISP循環(huán)。相等則順序執(zhí)行
LJMP MAIN
DELAY: ;延時(shí)子程序—RET為止
MOV R7,#0FFH ;給寄存器植入某個(gè)數(shù)值
LOOP0:
MOV R6,#0FFH ;給寄存器植入某個(gè)數(shù)值
LOOP1:
DJNZ R6,LOOP1 ;減1比較,直至寄存器中的數(shù)值為零跳轉(zhuǎn)
DJNZ R7,LOOP0 ;減1比較,直至寄存器中的數(shù)值為零跳轉(zhuǎn)
RET ;返回子程序DELAY
TABLE:
DB 0C0H,0FFH,0C0H,0FFH ;間隔交替用于體現(xiàn)閃爍,去除則為連續(xù)遞進(jìn)。
DB 0C0H,0FFH,0F9H,0FFH,0A4H,0FFH,0B0H,0FFH,99H,0FFH,92H,0FFH,82H,0FFH,0F8H,
DB 80H,0FFH,90H,0FFH,88H,0FFH,83H,0FFH,0C6H,0FFH,0A1H,0FFH,86H,0FFH,8EH,
//4個(gè)一組的數(shù)碼管異步顯示(流水、輪流、循環(huán))—數(shù)表
ORG 0000H
START:
MAIN:
MOV R0,#00H ;寄存器中放數(shù)值0
MOV DPTR,#TABLE ;指針指向數(shù)表
DISP: ;段標(biāo)記
MOV A,R0 ;將寄存器中的數(shù)值轉(zhuǎn)移到累加器中
MOVC A,@A+DPTR ;以DPTR作為基礎(chǔ),與累加器相加得到新地址給累加器
MOV P3,A ;將累加器的地址給P3口
MOV P2,#08H ;一位數(shù)顯示位控制;個(gè)位
ACALL DELAY ;調(diào)延時(shí)子程序
ACALL DELAY
ACALL DELAY ;調(diào)延時(shí)子程序
MOV P2,#04H ;一位數(shù)顯示位控制;十位
ACALL DELAY ;調(diào)延時(shí)子程序
ACALL DELAY
ACALL DELAY ;調(diào)延時(shí)子程序
MOV P2,#02H ;一位數(shù)顯示位控制;十位
ACALL DELAY ;調(diào)延時(shí)子程序
ACALL DELAY
ACALL DELAY ;調(diào)延時(shí)子程序
MOV P2,#01H ;一位數(shù)顯示位控制;十位
ACALL DELAY ;調(diào)延時(shí)子程序
ACALL DELAY
ACALL DELAY ;調(diào)延時(shí)子程序
INC R0 ;寄存器R0加1
CJNE R0,#16H,DISP ;寄存器與立即數(shù)16比較,不相等則轉(zhuǎn)移到DISP循環(huán)。相等則順序執(zhí)行
MOV P3,#0FFH
LJMP MAIN
DELAY: ;延時(shí)子程序---RET為止
MOV R7,#0FFH ;給寄存器植入某個(gè)數(shù)值
LOOP0:
MOV R6,#0FFH ;給寄存器植入某個(gè)數(shù)值
LOOP1:
DJNZ R6,LOOP1 ;減1比較,直至寄存器中的數(shù)值為零跳轉(zhuǎn)
DJNZ R7,LOOP0 ;減1比較,直至寄存器中的數(shù)值為零跳轉(zhuǎn)
RET ;返回子程序DELAY
TABLE: ;間隔交替用于體現(xiàn)閃爍,去除則為連續(xù)遞進(jìn)。
DB 0FFH,0FFH,0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0FFH
END
關(guān)于進(jìn)位顯示問(wèn)題
b) 單個(gè)按鍵與多個(gè)數(shù)碼管—點(diǎn)陣(位操作—輸入與字節(jié)操作—輸出)—靜態(tài)
>數(shù)碼管--點(diǎn)陣單輸出點(diǎn)陣顯示
點(diǎn)陣被廣泛用于各種文字與圖形的顯示場(chǎng)合。其靈活性和多樣性是其普及的主要原因。點(diǎn)陣在本質(zhì)上仍然是LED顯示技術(shù),也就是發(fā)光二極管顯示問(wèn)題。用發(fā)光二極管組成一個(gè)矩形陣列,這可以用發(fā)光點(diǎn)來(lái)組成各種形式的文字與圖形。由于是矩形震裂,這需要通過(guò)兩個(gè)P口來(lái)進(jìn)行控制和組合。一個(gè)P口顯示文字與圖形,一個(gè)P口用來(lái)掃描產(chǎn)生運(yùn)動(dòng)
|
|