- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
Scan4Disp.asm
资源名称:shumaguan.rar [点击查看]
上传用户:cnlazy
上传日期:2021-04-25
资源大小:163k
文件大小:2k
源码类别:
单片机开发
开发平台:
DOS
- ;要求将R5中的值显示在二个数码管上
- ;编程思路: 有4个数码管 用30H、31H、32H、33H作显示缓存 30H存个位 31H存十位 32H存百位 33H存千位
- ;但R5中的值最大为255 不会超过百位 所以没有千位上的显示 那么就让千位始终显示0 将R5中的值用三个
- ;BCD码显示在三个数码管上
- ORG 0000H
- AJMP Main
- Main: MOV SP,#60H
- MOV R5,#89H
- LOOP: CLR P1.0
- CALL DispProtec
- CALL Disp
- CALL DELAY
- SETB P1.0
- CALL DELAY
- AJMP LOOP
- DispProtec: MOV A,R5
- MOV B,#100
- DIV AB
- MOV 32H,A ;百位存入32H
- MOV A,B
- MOV B,#10
- DIV AB
- MOV 31H,A ;十位存入31H
- MOV A,B
- MOV 30H,A ;个位存入30H
- MOV 33H,#0 ;33H为千位 没有数据要存入 就让其一直为0
- RET
- DELAY: MOV R7,#0DH
- DE10: MOV R6,#0FFH
- DE01: DJNZ R6,DE01
- DJNZ R7,DE10
- RET
- Disp: MOV DPTR,#TAB1 ;DPTR指向7段数码显示的译码表(亦即段选)
- MOV A,@R0 ;R0为显示缓存单元指针,初始值指向个位的30H,个位显示后 加1指向下一位,当R1超过33H后又回到30H
- MOVC A,@A+DPTR
- MOV P0,#0
- MOV P0,A
- MOV DPTR,#TAB2 ;DPTR指向位选表
- MOV A,R0 ;A中的值为当前要显示的缓存地址,由于缓存地址从30H开始,如果A减去30H,就得到当前正显示的是个、十、百、千中的哪一位
- CLR CY ;因为带借位减 CY清0
- SUBB A,#30H
- MOVC A,@A+DPTR
- MOV P2,A
- INC R0 ;显示下一位
- CJNE R0,#34H,Over
- MOV R0,#30H
- Over: RET
- TAB1: DB 3FH,06H,5BH,4FH,66H ,6DH ,7DH ,07H ,7FH ,6FH ,77H,7CH,39H,5EH,79H,71H
- TAB2: DB 0F7H,0FBH,0FDH,0FEH
- END