16:48:24 UTC+0800Mon Jun 9 2008
;===========================================================================
; Calculator Demo of Mcs-51 Program
; Version 1.0, For 89C51
; By:XiaoYong Lin
; June/09/2008..
;================================= Log =====================================
;June/09/2008, Ver 1.0
;================================ Usage ====================================
;================================ Constant =================================
;================================ Hardware =================================
DisMode Equ 0000H ;显示端口
DisCS Equ 2000H ;片选端口
;=============================== Bit Segment ===============================
; Bit 00H ;1:
; Bit 01H ;1:
; Bit 02H ;1:
; Bit 03H ;1:
; Bit 04H ;1:
; Bit 05H ;1:
; Bit 06H ;1:
; Bit 07H ;1:
;=============================== Byte Segment ==============================
;*byte define start*
;00H..07H : Reg Group 0
;08H..1FH : System Stack
;20H..2FH : System Bit Units
;---------------------------------------------------------------------------
;30H..7FH
DisBuf Equ 70h ;..75h ;显示缓冲区
;*byte define end*
;===========================================================================
Org 0000h
AJmp Main
;============================= Subroutines =================================
InitDis: Mov DisBuf+0,#0
Mov DisBuf+1,#1
Mov DisBuf+2,#2
Mov DisBuf+3,#3
Mov DisBuf+4,#4
Mov DisBuf+5,#5
Ret
;--------------------------------------------------------------------------
;显示子程序
Display: Mov R0,#DisBuf ;
Mov R1,#00000001B ;
;将A的数据送到片选端口
DisplayLp: Mov a,R1 ;
Mov dptr,#DisCS ;
Movx @Dptr,a
Rl A ;
Mov R1,A
;先用查表指令把ROM中的数给A将数据送到显示端口DisMode
Mov A,@r0 ;
Inc R0 ;
Mov Dptr,#DisTab ;
Movc A,@A+Dptr
;
Mov Dptr,#DisMode ;
Movx @Dptr,a
ACall Delay
Cjne R0,#DisBuf+6,DisPlayLp
Ret
;---------------------------------------------------------------------------
; Code 00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h
; Char "0", "1", "2", "3", "4", "5", "6", "7"
DisTab: DB 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h
; Code 08h, 09h, 0ah, 0bh, 0ch , 0dh , 0eh, 0fh
; Char "8", "9", "a", "b", "c" , "d" , "e", "f"
DB 80h, 90h, 88h, 83h, 0c6h, 0a1h, 86h, 8eh
; Code 10h 11h
; Char " " "H"
DB 0FFH, 89H
;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
Delay: Mov r6,#4 ;
Delay1: Mov r7,#0
Djnz r7,$ ;
Djnz r6,Delay1
Ret
;================================= Main ====================================
Main: ACall InitDis ;调用显示初始化子程序.
MainLoop: ACall Display ;调用显示
AJmp MainLoop
xucun915_925777961 2008-6-15 15:42
用户412065 2008-6-15 09:56