新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 智能收費系統(tǒng)軟件源代碼

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

作者: 時間:2012-10-27 來源:網(wǎng)絡(luò) 收藏

采用為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 ;保護斷點

ORL P1, #01H

ANL P1, #0FEH ;當車進停車場時由系統(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ù)單元進位秒計數(shù)單元先清零

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

MOV A, Minute

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

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

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

Exit:

POP DPL

POP DPH

POP PSW ;恢復斷點

RETI

DelAy: ; 延時子程序

MOV r7, #0

DelAyLoop:

DJNZ r7, DelAyLoop

DJNZ r6, DelAyLoop ;實現(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 ;計算整小時費用

MOV A, Minute

MOV B, #60

DIV AB

MOV B, #8

MUL AB

MOV A, B ;計算分費用

ADD A, R3 ;總費用

Ljmp Mloop

End



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉