專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實(shí)例 >> 瀏覽文章

智能收費(fèi)系統(tǒng)軟件源代碼

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2010年05月09日   【字體:

采用mcs-51單片機(jī)時鐘頻率為6MHZ采用T0工作方式2

OUTBIT  EQU 08002h  ; 位控制口

OUTSEG  EQU 08004h  ; 段控制口

IN        EQU 08001h  ; 鍵盤讀入口

LEDBuf  EQU  60h     ;顯示緩沖

Hour    EQU  40h     ;存放時信息計數(shù)單元

Minute  EQU  41h      ;存放分信息計數(shù)單元

Second  EQU  42h     ; 存放秒信息計數(shù)單元

C100us  EQU  43h    

Tick    EQU  10000   

T100us  EQU  256-50  

LGMP  StArt           ;跳轉(zhuǎn)到程序入口

org     000Bh

T0Int:

       PUSH    DPL

       PUSH    DPH

       PUSH    ACC    ;保護(hù)斷點(diǎn)

       ORL P1, #01H

       ANL P1, #0FEH  ;當(dāng)車進(jìn)停車場時由系統(tǒng)產(chǎn)生下降沿脈沖觸發(fā)硬件電路開始計時

MOV     A, C100us+1

       JNZ     Goon   

       DEC     C100us

Goon:

        DEC     C100us+1

MOV     A, C100us

       ORL     A, C100us+1

       JNZ     Exit         ;判斷是否溢出10000次

 MOV     C100us, #high(Tick)

       MOV     C100us+1, #low(Tick) ;從新設(shè)置技術(shù)單元C100us的初值

INC     Second            ;秒單元加1

       MOV     A, Second

       CJNE    A, #60, Exit         ;判斷秒技術(shù)單元是否累加到60

 MOV     Second, #0         ;需要向分計數(shù)單元進(jìn)位秒計數(shù)單元先清零

       INC     Minute             ;分計數(shù)單元加1

       MOV     A, Minute        

       CJNE    A, #60, Exit          ;判斷分計數(shù)單元是否加到60

 MOV     Minute, #0         ;需要向時計數(shù)單元進(jìn)位分技術(shù)單元先清零

       INC     Hour                ;時計數(shù)單元加1

Exit:

       POP     DPL

       POP     DPH

       POP     PSW                  ;恢復(fù)斷點(diǎn)

       RETI

DelAy:               ; 延時子程序

       MOV   r7, #0

DelAyLoop:

       DJNZ  r7, DelAyLoop

       DJNZ  r6, DelAyLoop   ;實(shí)現(xiàn)延時

       RET

LEDMAP:              ; 八段管顯示碼

       dB    3fh, 06h, 5Bh, 4fh, 66h, 6dh, 7dh, 07h

       dB    7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h

DisplAyLED:

       MOV   r0, #LEDBuf

       MOV   r1, #6         ; 共6個八段管

       MOV   r2, #00100000B ; 從左邊開始顯示

Loop:

       MOV   DPTR, #OUTBIT

       MOV   A, #0

       MOVX @DPTR, A        ; 關(guān)所有八段管

MOV   A, @r0

       MOV   DPTR, #OUTSEG

       MOVX @DPTR,A         ;將要顯示的值放到段控制口

       MOV   DPTR, #OUTBIT

       MOV   A, r2

       MOVX  @DPTR, A        ; 顯示一位八段管

 MOV   r6, #1

       CAll  DelAy            ;調(diào)用延時程序

MOV   A, r2           ; 顯示下一位

       RR    A

       MOV   r2, A

INC   r0               ;找到要顯示下一位地址

DJNZ  r1, Loop          ;判斷是否全部顯示

 RET 

ToLED:

       MOV     DPTR, #LEDMAp

       MOVC    A, @A+DPTR      ;查表顯示

       RET                   

StArt:

       MOV     TMOD, #02h         ; 模式2, 定時器

       MOV     TH0, #T100us

       MOV     TL0, #T100us          ;給T0賦初值

MOV     IE, #10000010B     ; EA=1, IT0 = 1

MOV     Hour, #0

       MOV     Minute, #0

       MOV     Second, #0          ;將時分秒單元分別清零

       MOV     C100us, #high(Tick)

       MOV     C100us+1, #low(Tick)  ;設(shè)定計數(shù)初值

       SETB   TR0                ; 啟動定時器T0

  

MLoop:

       MOV     A, Hour  

       MOV     B, #10

       DIV     AB       ;求的時的高位放到A

       CAll    ToLED   ;調(diào)用查表程序

       MOV     LEDBuf, A;將顯示值放到顯示緩沖區(qū)

       MOV     A, B

       CAll    ToLED

       ORL     A, #80h    ;得到時的低位值:

       MOV     LEDBuf+1, A;將顯示值放到顯示緩沖區(qū)的下一地址

MOV     A, Minute

       MOV     B, #10

       DIV     AB         ;求的分的高位放到A

       CAll    ToLED      ;調(diào)用查表程序

       MOV     LEDBuf+2, A;將顯示值放到顯示緩沖區(qū)下一地址

       MOV     A, B

       CAll    ToLED

       ORL     A, #80h     ;得到時的低位值:

       MOV     LEDBuf+3, A   ;將顯示值放到顯示緩沖區(qū)的下一地址

MOV     A, Second 

       MOV     B, #10

 DIV     AB   

                                                                                                                


 CAll    ToLED         ;調(diào)用查表程序

       MOV     LEDBuf+4, A  ;將顯示值放到顯示緩沖區(qū)的下一地址

       MOV     A, B

       CAll    ToLED         ;調(diào)用查表程序

       MOV     LEDBuf+5, A   ;將顯示值放到顯示緩沖區(qū)的下一地址

CAll    DisplAyLED    ;調(diào)用顯示程序顯示所有的結(jié)果

       MOV A, Hour

       MOV B, #8

MUL AB     

MOV R3,B         ;計算整小時費(fèi)用

       MOV A, Minute   

       MOV B, #60

DIV AB

MOV B, #8

MUL AB

MOV A, B      ;計算分費(fèi)用

ADD A, R3    ;總費(fèi)用

Ljmp    Mloop

 End
完整代碼下載: http://www.torrancerestoration.com/ziliao/file/tcc1.rar

關(guān)閉窗口

相關(guān)文章