|
發(fā)布時間: 2024-11-22 09:37
正文摘要:要求是:采用匯編語言設(shè)計程序,用定時器中斷方式,循環(huán)顯示0-99。目前寫的,但是只有十位能正確顯示,后面都是亂碼,新手小白求助各位大佬(接線圖在下面) ORG 0000H LJMP MAIN ORG 000B ... |
55236 發(fā)表于 2024-11-24 17:05 感謝感謝 |
55236 發(fā)表于 2024-11-24 17:18 感謝感謝 |
lxm41577 發(fā)表于 2024-11-23 09:59 謝謝謝謝 |
188610329 發(fā)表于 2024-11-22 22:21 感謝感謝,接線是老師規(guī)定好的 |
|
A_Bit EQU 20H B_Bit EQU 21h ;十位數(shù)存放處 TEMP EQU 22h 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 ;將temp中 的數(shù)轉(zhuǎn)換成10進(jìn)制 MOV B,#10; DIV AB; MOV B_Bit,A ;十位在A MOV A_Bit,B;個位在B MOV DPTR,#TAB;指定查表啟始地址 MOV R0,#2;4 DPL1: MOV R1,#100;250 ;顯示1000次 DPLOP: MOV A,A_Bit;取個位數(shù) MOVC A,@A+DPTR;查個位數(shù)的7段代碼 ;CPL A; MOV P1 ,A;送出個位的7段代碼 CLR P2.7; ACALL D1MS;延時顯示1ms SETB P2.7; MOV A,B_Bit ;取十位數(shù) MOVC A, @A+DPTR ;查十位數(shù)的7 段代碼 ;CPL A; MOV P1 ,A;送出十位的7段代碼 CLR P2.6; ACALL D1MS; SETB P2.6; DJNZ R1,DPLOP ;100次沒完循環(huán) DJNZ R0,DPL1 ;2個100次沒完循環(huán)RET ;延時4毫秒即2微秒* R7*R6(按12MHZ算) D1MS: MOV R7 ,#5;10 D1: MOV R6,#50; DJNZ R6,$; DJNZ R7,D1; RET; ;7段數(shù)碼管各劃的數(shù)字排列表,共陽的七段花數(shù) TAB: DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h; END; |
|
A_Bit EQU 20H B_Bit EQU 21h ;十位數(shù)存放處 TEMP EQU 22h 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 ;將temp中 的數(shù)轉(zhuǎn)換成10進(jìn)制 MOV B,#10; DIV AB; MOV B_Bit,A ;十位在A MOV A_Bit,B;個位在B MOV DPTR,#TAB;指定查表啟始地址 MOV R0,#2;4 DPL1: MOV R1,#100;250 ;顯示1000次 DPLOP: MOV A,A_Bit;取個位數(shù) MOVC A,@A+DPTR;查個位數(shù)的7段代碼 ;CPL A; MOV P1 ,A;送出個位的7段代碼 CLR P2.7; ACALL D1MS;延時顯示1ms SETB P2.7; MOV A,B_Bit ;取十位數(shù) MOVC A, @A+DPTR ;查十位數(shù)的7 段代碼 ;CPL A; MOV P1 ,A;送出十位的7段代碼 CLR P2.6; ACALL D1MS; SETB P2.6; DJNZ R1,DPLOP ;100次沒完循環(huán) DJNZ R0,DPL1 ;2個100次沒完循環(huán)RET ;延時4毫秒即2微秒* R7*R6(按12MHZ算) D1MS: MOV R7 ,#5;10 D1: MOV R6,#50; DJNZ R6,$; DJNZ R7,D1; RET; ;7段數(shù)碼管各劃的數(shù)字排列表,共陽的七段花數(shù) TAB: DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h; END;就不知道對不對,我們學(xué)校給的 |
| 5樓的似乎沒問題,你的原本的顯示部分寫的有點臃腫 |
|
顯示部分改了下,看看能不能用 DIS: ;顯示程序 MOV A, R0 ;取計數(shù)器R0的值 MOV B, #10 ;除以10,B寄存器為10 DIV AB ;A/B,商在A,余數(shù)在B MOVC A, @A+DPTR MOV P1, A SETB P0.0 ;十位的位選 CALL DLY CLR P0.0. MOV A, B ;顯示個位 MOVC A, @A+DPTR MOV P1, A SETB P0.1 ;個位的位選 CALL DLY CLR P0.1 RET |
|
MOV A, R2 ;顯示十位 MOVC A, @A+DPTR CLR P1.0 MOV P0, A SETB P0.0 ;十位的位選 CALL DLY MOV A, R3 ;顯示個位 MOVC A, @A+DPTR CLR P0.0 MOV P1, A SETB P1.0 ;個位的位選 CALL DLY RET 你這板子什么情況? 個位,和十位 段選 用的不是 同一個總線? 那你 到了十萬位,百萬位,千萬位, 還要用 P5,P6, P7 ? 你單片機(jī)有那么多口子么? |
| 計數(shù)到100了,清零,返回主程序加LJMAP MAIN |
| 這么復(fù)雜的板子,干嘛用匯編啊 |
Powered by 單片機(jī)教程網(wǎng)