55236 发表于 2024-11-24 17:05 感谢感谢 |
55236 发表于 2024-11-24 17:18 感谢感谢 |
lxm41577 发表于 2024-11-23 09:59 谢谢谢谢 |
188610329 发表于 2024-11-22 22:21 感谢感谢,接线是老师规定好的 |
|
A_Bit EQU 20H B_Bit EQU 21h ;十位数存放处 TEMP EQU 22h STAR: MOV TEMP, #0 ;初始化计数器 STLOP: ACALL DISPLAY INC TEMP MOV A,TEMP CJNE A,#100,NEXT ;=100重来 MOV TEMP,#0 NEXT: LJMP STLOP ;显示子程序 DISPLAY: MOV A, TEMP ;将temp中 的数转换成10进制 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;取个位数 MOVC A,@A+DPTR;查个位数的7段代码 ;CPL A; MOV P1 ,A;送出个位的7段代码 CLR P2.7; ACALL D1MS;延时显示1ms SETB P2.7; MOV A,B_Bit ;取十位数 MOVC A, @A+DPTR ;查十位数的7 段代码 ;CPL A; MOV P1 ,A;送出十位的7段代码 CLR P2.6; ACALL D1MS; SETB P2.6; DJNZ R1,DPLOP ;100次没完循环 DJNZ R0,DPL1 ;2个100次没完循环RET ;延时4毫秒即2微秒* R7*R6(按12MHZ算) D1MS: MOV R7 ,#5;10 D1: MOV R6,#50; DJNZ R6,$; DJNZ R7,D1; RET; ;7段数码管各划的数字排列表,共阳的七段花数 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 ;十位数存放处 TEMP EQU 22h STAR: MOV TEMP, #0 ;初始化计数器 STLOP: ACALL DISPLAY INC TEMP MOV A,TEMP CJNE A,#100,NEXT ;=100重来 MOV TEMP,#0 NEXT: LJMP STLOP ;显示子程序 DISPLAY: MOV A, TEMP ;将temp中 的数转换成10进制 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;取个位数 MOVC A,@A+DPTR;查个位数的7段代码 ;CPL A; MOV P1 ,A;送出个位的7段代码 CLR P2.7; ACALL D1MS;延时显示1ms SETB P2.7; MOV A,B_Bit ;取十位数 MOVC A, @A+DPTR ;查十位数的7 段代码 ;CPL A; MOV P1 ,A;送出十位的7段代码 CLR P2.6; ACALL D1MS; SETB P2.6; DJNZ R1,DPLOP ;100次没完循环 DJNZ R0,DPL1 ;2个100次没完循环RET ;延时4毫秒即2微秒* R7*R6(按12MHZ算) D1MS: MOV R7 ,#5;10 D1: MOV R6,#50; DJNZ R6,$; DJNZ R7,D1; RET; ;7段数码管各划的数字排列表,共阳的七段花数 TAB: DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h; END;就不知道对不对,我们学校给的 |
| 5楼的似乎没问题,你的原本的显示部分写的有点臃肿 |
|
显示部分改了下,看看能不能用 DIS: ;显示程序 MOV A, R0 ;取计数器R0的值 MOV B, #10 ;除以10,B寄存器为10 DIV AB ;A/B,商在A,余数在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 ? 你单片机有那么多口子么? |
| 计数到100了,清零,返回主程序加LJMAP MAIN |
| 这么复杂的板子,干嘛用汇编啊 |