?? wl004.asm
字號:
;********************************************************************************
;* 標題: ME300系列開發系統演示程序 - LED數碼管顯示1-8 *
;* 硬件: ME300A,ME300A+,ME300B *
;* 文件: wl004.asm *
;* 日期: 2004-1-5 *
;* 版本: 1.0 *
;* 作者: 偉納電子 - Freeman *
;* 郵箱: freeman@willar.com *
;* 網站: http://www.willar.com *
;********************************************************************************
;* 描述: *
;* LED數碼管顯示演示程序 *
;* 在8個LED數碼管上依次顯示1,2,3,4,5,6,7,8 *
;* *
;********************************************************************************
;* 跳線設置: *
;* ME300A+ JP1 全部短接,JP2短接2-3端 *
;* ME300B JP1 短接, JP2短接2-3端 *
;* *
;********************************************************************************
;* 【版權】 Copyright(C)偉納電子 www.willar.com All Rights Reserved *
;* 【聲明】 此程序僅用于學習與參考,引用請注明版權和作者信息! *
;********************************************************************************
CODE_SEG SEGMENT CODE
DATA_SEG SEGMENT DATA
RSEG DATA_SEG
dis_digit: DS 1
dis_index: DS 1
dis_buf: DS 8
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,#1
MOVC A,@A+DPTR
MOV dis_buf,A
MOV A,#2
MOVC A,@A+DPTR
MOV dis_buf+01H,A
MOV A,#3
MOVC A,@A+DPTR
MOV dis_buf+02H,A
MOV A,#4
MOVC A,@A+DPTR
MOV dis_buf+03H,A
MOV A,#5
MOVC A,@A+DPTR
MOV dis_buf+04H,A
MOV A,#6
MOVC A,@A+DPTR
MOV dis_buf+05H,A
MOV A,#7
MOVC A,@A+DPTR
MOV dis_buf+06H,A
MOV A,#8
MOVC A,@A+DPTR
MOV dis_buf+07H,A
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,#0x07 ; 當DIS_INDEX等于8(0000 1000)時, 清0
POP AR0
POP PSW
POP ACC
RETI
; END OF timer0
;===========================================================
RSEG CODE_SEG
DIS_CODE:
DB 0C0H
DB 0F9H
DB 0A4H
DB 0B0H
DB 099H
DB 092H
DB 082H
DB 0F8H
DB 080H
DB 090H
DB 0FFH
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -