|
- ;============================================================
- ;程序编写人:兰建
- ;编写地点:51hei培训机构
- ;时间:5月23日下午 星期六
- ;功能:本程序实现P0口的对2个数码管显示0到99,一个按键实现加1,
- ; 到99回到0;一个按键实现减1,减到0回到99,低电平亮
- ;P2口实现对数码管的片选功能
- ;============================================================
- ;//////开始初始化////////////////////////
- SHUCHU EQU P0 ;定义P0口为输出口
- PIANXUAN EQU P2 ;定义P2口为片选口
- SHUZI EQU 30H ;设置处理数据存放地址
- ;========================程序开始===========================
- ORG 00H ;程序开始
- LJMP MAIN ;跳到MAIN
- ORG 0030H ;入口地址
- ;========================主程序=============================
- MAIN:
- MOV SHUZI,#00
- MOV DPTR,#TAB ;查表初始化
- MOV P1,#0F3H ;设置P1.0、P1.1口为输入
- START:CALL JISUAN ;计算处理
- CALL DISPLAY ;查表显示
- L1:JNB P1.0,L2 ;若P1.0=0,则跳到L2
- JNB P1.1,L3 ;若P1.1=0,则跳到L3
- LJMP START ;跳到MAIN
- L2:CALL JIACHULI ;加1处理
- L2_0:MOV R1,#255
-
- L2_2:CALL JISUAN ;计算处理
- CALL DISPLAY ;显示
- CALL DELAY ;延时
-
- DJNZ R1,L2_2
- L2_1:JNB P1.0,L2 ;若P1.1为0,则跳到L2
- JNB P1.1,L3 ;若P1.1为0,则跳到L3
- LJMP START ;循环
- L3:CALL JIANCHULI ;减1处理
- LJMP L2_0 ;返回显示
- ;========================计算子程序=========================
- ;输入:30H
- ;输出:"A和B"
- ;实现的功能:把30H的数据的十位和个位分离出来
- ;============================================================
- JISUAN:MOV A,SHUZI ;数据放在A中
- MOV B,#10 ;除数放在B中
- DIV AB ;商放在A中,余数放在B中
- RET
- ;========================显示子程序==========================
- ;输入:"A"
- ;输出:"P0口"
- ;实现的功能:把A的数输出到P0口显示,十位和个位分开显示
- ;============================================================
- DISPLAY:MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示十位
- MOV PIANXUAN,#00H ;片选
- CALL DELAY
- MOV A,B
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示个位
- MOV PIANXUAN,#01H ;片选
- CALL DELAY ;延时
- RET
- ;========================处理子程序=========================
- ;输入:无
- ;输出:无
- ;实现的功能:把30H地址加1
- ;============================================================
- JIACHULI:MOV A,SHUZI
- CJNE A,#99,LL ;若A不等于9,则跳到LL
- MOV A,#00
- JMP L4
- LL:INC A ;自加一
- L4:MOV SHUZI,A
- RET
- ;========================处理子程序==========================
- ;输入:无
- ;输出:无
- ;实现的功能:把30H地址减1
- ;============================================================
- JIANCHULI:MOV A,SHUZI
- CJNE A,#00,LLL ;若A不等于0,则跳到LLL
- MOV A,#99
- JMP L5
- LLL:DEC A ;自减一
- L5:MOV SHUZI,A
- RET
- ;========================延时程序============================
- ;输入;无
- ;输出: 无
- ;实现的功能:延时一段时间
- ;============================================================
- DELAY:
- MOV R6,#09
- L7:MOV R5,#25
- L8:DJNZ R5,L8
- DJNZ R6,L7
- RET
- ;=====================共阳查表数据============================
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- ;=======================程序结束==============================
- END
复制代码
|
|