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

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>匯編編程>

多位數(shù)碼管計數(shù)器程序?qū)崿F(xiàn)

大?。?/span>0.1 MB 人氣: 2017-09-06 需要積分:0
多位數(shù)碼管計數(shù)器程序?qū)崿F(xiàn)多位數(shù)碼管計數(shù)器程序?qū)崿F(xiàn)

1、2位數(shù)碼管計數(shù)器

A_BIT EQU 20H????????????????? ;個位數(shù)存放處
B_BIT EQU 21H????????????????? ;十位數(shù)存放處
TEMP EQU 22H?????????????????? ;計數(shù)器寄存處
STAR: MOV TEMP,#0????????????? ;初始化計數(shù)器
STLOP: ACALL DISPLAY?????????? ;
?????? INC TEMP
?????? MOV A,TEMP
?????? CJNE A,#100,NEXT??????? ;等于100重來
?????? MOV TEMP,#0
??? NEXT: LJMP STLOP
;顯示子程序
DISPLAY: MOV A,TEMP
???????? MOV B,#10
? DIV AB?
? MOV B_BIT,A
? MOV A_BIT,B
? MOV DPTR,#NUMTAB
? MOV R0,#4
DPL1:?? MOV R1,#5
DPLOP:? MOV A,A_BIT
??????? MOVC A,@A+DPTR
?MOV P0,A
?CLR P2.7
?ACALL D1MS
?SETB P2.7
?MOV A,B_BIT
?MOVC A,@A+DPTR
?MOV P0,A
?CLR P2.6
?ACALL D1MS
?SETB P2.6
?DJNZ R1,DPLOP
?DJNZ R0,DPL1
?RET
D1MS:
?? MOV R7,#50
?? D1: MOV R6,#20
?? D2: DJNZ R6,$
?????? DJNZ R7,D1
?????? RET
NUMTAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H?? ;013456789字形碼

END
?

2、4位數(shù)碼管計數(shù)器經(jīng)典例程

;本程序?qū)崿F(xiàn)七段碼動態(tài)顯示功能
;///////////////////////////////////////////
???org?0000h
???ajmp?main
???org?0030h
main:
???mov dptr,#tab????;將表頭位置送入DPTR????? ?????
???mov 30h,#00h??????????????? ;將30H個位顯示緩沖單元清零??????????
???mov 31h,#00h??????????????? ;將31H十位顯示緩沖單元清零??????????
???mov 32h,#00h??????????????? ;將32H百位顯示緩沖單元清零??????????
???mov 33h,#00h??????????????? ;將33H千位顯示緩沖單元清零??????????
loop:
???mov r4,#5?????;r4作為軟件計數(shù)器
tt1:
???lcall display????;調(diào)用顯示程序?
???djnz?r4,tt1????;r4減一后不為零,返回tt1
???lcall update????;調(diào)用刷新顯示子程序
???ajmp loop?????;跳回loop,繼續(xù)循環(huán)顯示.
display:?mov?p2,#0ffh?????;將P2口置高電平?????????????????????????
???mov r7,#100?????;軟件計數(shù)器賦值???????????????????????? ?
dd1:????????????????????????????????????????????????????????????????????????????
???mov a,30h?????????????????? ;將顯示緩沖區(qū)30H中的值送入ACC???????????
???movc a,@a+dptr????????????? ;查表取要顯示的數(shù)并把查表的結(jié)果送入ACC??
???mov p0,a??????????????????? ;將要顯示的數(shù)送入P0口???????????????????
???clr p2.3??????????????????? ;開個位顯示單元?????????????????????????
???lcall delay100us??????????? ;延時100US??????????????????????????????
???setb p2.3?????????????????? ;關(guān)個位顯示單???????????????????????????
??????????????????????????????????????? ?????????????????????????????????????
???mov a,31h?????????????????? ;將顯示緩沖區(qū)別31H中的值送入A???????????
???movc a,@a+dptr????????????? ;查表取要顯示的數(shù)并把查表的結(jié)果送入ACC??
???mov p0,a??????????????????? ;將要顯示的數(shù)送入P0口???????????????????
???clr p2.2??????????????????? ;開十位顯示單元?????????????????????????
???lcall delay100us??????????? ;延時100US??????????????????????????????
???setb p2.2?????????????????? ;關(guān)十位顯示單元?????????????????????????
??????????????????????????????????????? ?????????????????????????????????????
???mov a,32h?????????????????? ;將顯示緩沖區(qū)32H中的值送入ACC???????????
???movc a,@a+dptr????????????? ;查表取要顯示的數(shù)并把查表的結(jié)果送入ACC??
???mov p0,a??????????????????? ;將要顯示的數(shù)送入P0口???????????????????
???clr p2.1??????????????????? ;開百位顯示單元?????????????????????????
???lcall delay100us??????????? ;延時100US??????????????????????????????
???setb p2.1?????????????????? ;關(guān)百位顯示單元?????????????????????????
??????????????????????????????????????? ?????????????????????????????????????
???mov a,33h?????????????????? ;將顯示緩沖區(qū)33H中的值送入ACC???????????
???movc a,@a+dptr????????????? ;查表取要顯示的數(shù)并把查表的結(jié)果送入ACC??
???mov p0,a??????????????????? ;將要顯示的數(shù)送入P0口???????????????????
???clr p2.0??????????????????? ;開千位顯示單元?????????????????????????
???lcall delay100us??????????? ;延時100US??????????????????????????????
???setb p2.0?????????????????? ;關(guān)千位顯示單元?????????????????????????
???djnz r7,dd1???????????????? ;R7不等于0返回至DD1處???????????????????
???ret???????????????????????? ;R7等于0子程序返回?????????????????????
update:?????????;刷新顯示子程序
???inc 30h??????;個位顯示緩沖單元加一??
???mov a,30h
???cjne a,#10,exit????;還沒加到十,退出
???mov 30h,#00h????;加到十了,個位清零
???inc 31h??????;十位顯示緩沖單元加一??
???mov a,31h???????????????????????????????????????????????
???cjne a,#10,exit???????????? ;還沒加到十,退出????????????
???mov 31h,#00h??????????????? ;加到十了,十位清零??????????
???inc 32h??????;百位顯示緩沖單元加一??
???mov a,32h???????????????????????????????????????????????
???cjne a,#10,exit???????????? ;還沒加到十,退出????????????
???mov 32h,#00h??????????????? ;加到十了,百位清零??????????
???inc 33h??????;千位顯示緩沖單元加一??
???mov a,33h???????????????????????????????????????????????????????????????????????????
???cjne a,#10,exit???????????? ;還沒加到十,退出????????????
???mov 33h,#00h??????????????? ;加到十了,千位清零??????????
exit:
???ret???????;刷新顯示子程序返回
delay100us:
???mov r5,#50
???djnz?r5,$
???ret
delay10ms:
???mov r6,#100
tt2:
???mov r5,#50
???djnz r5,$
???djnz r6,tt2
???ret
???
tab:?db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
end

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

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

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

      ?