|
- ;============================================================
- ;程序编写人:兰建
- ;编写地点:51hei培训机构
- ;时间:5月23日下午 星期六
- ;功能:本程序实现P0口的对数码管静态显示0到9;
- ; 分时显示0到5;动态显示0到9,低电平亮
- ; P2口实现对数码管的片选功能
- ;==========================开始初始化============================
- SHUCHU EQU P0 ;定义P0口为输出口
- PIANXUAN EQU P2 ;定义P2口为片选口
- CISHU EQU 10 ;0-9,共10个数字
- CISHU1 EQU 6 ;定义片选个数
- SHUZI EQU 30H ;定义处理数据存放地址
- ORG 00H ;程序开始
- LJMP MAIN ;跳到MAIN
- ORG 30H ;入口地址
- ;=========================主程序================================
- MAIN:CLR A ;数码管显示初始化
- CALL JINGTAI ;静态显示0-9
- CLR A ;数码管显示初始化
- CALL DONGTAI1 ;分时显示123456
- CLR A ;数码管显示初始化
- CALL DONGTAI2 ;动态显示0-9
- CLR A ;数码管显示初始化
- JMP MAIN ;返回MAIN
- ;=====================静态显示0-9子程序==========================
- ;输入:"30H"
- ;输出:"P0"
- ;实现的功能:把A的数输出到P0口显示
- ;================================================================
- JINGTAI:MOV SHUZI,#00 ;输出数据初始化
- MOV PIANXUAN,#00H ;设置片选
- MOV R0,#CISHU ;把查表次数放R0
- MOV DPTR,#TAB ;查表初始化
- L1:CALL CHABIAO ;查表
- CALL DISPLAY ;显示
- MOV R1,#200
- L1_0:CALL DELAY ;延时
- DJNZ R1,L1_0
- CALL CHULI ;处理
- DJNZ R0,L1 ;若R0减一不为0,进行下一个数字显示
- RET
- ;=====================分时显示123456子程序======================
- ;输入:"30H"
- ;输出:"P0"
- ;实现的功能:把A的数输出到P0口显示
- ;===============================================================
- DONGTAI1:MOV SHUZI,#00 ;输出数据初始化
- MOV R1,0 ;设置片选
- MOV PIANXUAN,R1
- MOV R0,#CISHU1 ;把查表次数放R0
- MOV DPTR,#TAB ;查表初始化
- L2:CALL CHABIAO ;查表
- CALL DISPLAY ;显示
- MOV R2,#100
- L2_0:CALL DELAY ;延时
- DJNZ R2,L2_0
- CALL CHULI ;处理
- CALL PIANXUANCHULI ;片选处理
- DJNZ R0,L2 ;若R0减一不为0,进行下一个数字显示
- RET
- ;======================动态显示0-9子程序=========================
- ;输入:"30H"
- ;输出:"P0"
- ;实现的功能:把A的数输出到P0口显示
- ;================================================================
- DONGTAI2:MOV SHUZI,#00 ;输出数据初始化
- MOV DPTR,#TAB ;查表初始化
- MOV R3,#CISHU ;把现实数字的次数放在R3
- L3_1:MOV R1,#00H ;设置片选
- MOV PIANXUAN,R1 ;片选
- CALL CHABIAO ;查表
- MOV R2,#50
- DD:MOV R0,#CISHU1 ;把查表次数放R0
- L3:CALL DISPLAY ;显示
- CALL PIANXUANCHULI ;片选处理
- CALL DELAY ;延时
- DJNZ R0,L3 ;若R0减一不为0,跳转到L1
- DJNZ R2,DD ;各数子之间显示设置一定的时间间隔
- CALL CHULI ;处理
- DJNZ R3,L3_1 ;若R3不为0,显示下一个数字
- RET
- ;========================处理子程序==============================
- ;输入:无
- ;输出:无
- ;实现的功能:把30H地址加1
- ;================================================================
- CHULI:MOV A,SHUZI
- INC A
- MOV SHUZI,A
- RET
- ;=======================查表子程序===============================
- ;输入:"DPTR"
- ;输出:"A"
- ;实现的功能:把A的数输出到P0口显示
- ;================================================================
- CHABIAO:MOVC A,@A+DPTR
- RET
- ;====================片选处理子程序==============================
- ;输入:无
- ;输出:无
- ;实现的功能:把片选数据加1
- ;================================================================
- PIANXUANCHULI:INC R1
- MOV PIANXUAN,R1
- RET
- ;======================显示子程序================================
- ;输入:"A"
- ;输出:"P0口"
- ;实现的功能:把A的数输出到P0口显示
- ;================================================================
- DISPLAY:MOV SHUCHU,A
- RET
- ;======================延时程序==================================
- ;输入;无
- ;输出: 无
- ;实现的功能:延时一段时间
- ;================================================================
- DELAY:MOV R7,#02H
- L6:MOV R6,#002H
- L7:MOV R5,#0F8H
- L8:DJNZ R5,L8
- DJNZ R6,L7
- DJNZ R7,L6
- RET
- ;======================共阳查表数据==============================
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- END
复制代码
|
|