标题:
单片机数码管静态显示0到9汇编程序
[打印本页]
作者:
daniu
时间:
2014-12-27 18:29
标题:
单片机数码管静态显示0到9汇编程序
;============================================================
;程序编写人:兰建
;编写地点: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
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1