📄 up51s004.asm
字号:
;/*******************************************************************************
;* *
;* File : uP51s004.asm *
;* Date : 2004-9-5 *
;* Version : 1.0 *
;* *
;* Author : kevin kevin@dz51.com *
;* Company : Http://www.dz51.com *
;* *
;********************************************************************************
;* Description: *
;* LED数码管显示演示程序 *
;* 在8个LED数码管上依次显示1,2,3,4 *
;* *
;* *
;* *
;*******************************************************************************/
CODE_SEG SEGMENT CODE
DATA_SEG SEGMENT DATA
RSEG DATA_SEG
dis_digit: DS 1
dis_index: DS 1
dis_buf: DS 4
stack: DS 20
;===========================================================
CSEG AT 00000H ; Reset向量
LJMP MAIN
CSEG AT 0000BH ; 定时器0中断向量
LJMP TIMER0
;===========================================================
RSEG CODE_SEG
MAIN:
MOV SP,#(stack-1) ; 初始化堆栈指针
MOV P0,#0FFH ; 初始化I/O口
MOV P2,#0FFH
MOV TMOD,#01H ; 初始化timer0
MOV TH0,#0FCH
MOV TL0,#017H
MOV IE,#082H
MOV DPTR, #DIS_CODE ; 设定显示初值
MOV A,#2
MOVC A,@A+DPTR
MOV dis_buf,A
MOV A,#3
MOVC A,@A+DPTR
MOV dis_buf+01H,A
MOV A,#4
MOVC A,@A+DPTR
MOV dis_buf+02H,A
MOV A,#1
MOVC A,@A+DPTR
MOV dis_buf+03H,A
MOV A,#10
MOVC A,@A+DPTR
MOV dis_digit,#0FEH ; 初始从第一个数码管开始扫描
MOV dis_index,A
SETB TR0 ; 启动定时器0,开始动态扫描显示
MAIN_LP:
; 主程序循环,增加其它代码
SJMP MAIN_LP
; END OF main
;===========================================================
USING 0
TIMER0:
; 定时器0中断服程序, 用于数码管的动态扫描
; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
; 选通P2.0口数码管
; DIS_BUF --- 显于缓冲区基地址
PUSH ACC
PUSH PSW
PUSH AR0
MOV TH0,#0FCH
MOV TL0,#017H
MOV P2,#0FFH ; 先关闭所有数码管
MOV A,#DIS_BUF ; 获得显示缓冲区基地址
ADD A,DIS_INDEX ; 获得偏移量
MOV R0,A ; R0 = 基地址 + 偏移量
MOV A,@R0 ; 获得显示代码
MOV P0,A ; 显示代码传送到P0口
MOV P2,DIS_DIGIT ;
MOV A,DIS_DIGIT ; 位选通值左移, 下次中断时选通下一位数码管
RL A
MOV DIS_DIGIT,A
INC DIS_INDEX ; DIS_INDEX加1, 下次中断时显示下一位
ANL DIS_INDEX,#0x03 ; 当DIS_INDEX等于8(0000 1000)时, 清0
POP AR0
POP PSW
POP ACC
RETI
; END OF timer0
;===========================================================
RSEG CODE_SEG
DIS_CODE:
DB 0C0H ;1
DB 0F9H ;2
DB 0A4H ;3
DB 0B0H ;4
DB 099H ;4
DB 092H ;5
DB 082H ;6
DB 0F8H ;7
DB 080H ;8
DB 090H ;9
DB 0FFH ;off
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -