专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

智能收费系统软件源代码

作者:佚名   来源:本站原创   点击数:  更新时间:2010年05月09日   【字体:

采用mcs-51单片机时钟频率为6MHZ采用T0工作方式2

OUTBIT  EQU 08002h  ; 位控制口

OUTSEG  EQU 08004h  ; 段控制口

IN        EQU 08001h  ; 键盘读入口

LEDBuf  EQU  60h     ;显示缓冲

Hour    EQU  40h     ;存放时信息计数单元

Minute  EQU  41h      ;存放分信息计数单元

Second  EQU  42h     ; 存放秒信息计数单元

C100us  EQU  43h    

Tick    EQU  10000   

T100us  EQU  256-50  

LGMP  StArt           ;跳转到程序入口

org     000Bh

T0Int:

       PUSH    DPL

       PUSH    DPH

       PUSH    ACC    ;保护断点

       ORL P1, #01H

       ANL P1, #0FEH  ;当车进停车场时由系统产生下降沿脉冲触发硬件电路开始计时

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) ;从新设置技术单元C100us的初值

INC     Second            ;秒单元加1

       MOV     A, Second

       CJNE    A, #60, Exit         ;判断秒技术单元是否累加到60

 MOV     Second, #0         ;需要向分计数单元进位秒计数单元先清零

       INC     Minute             ;分计数单元加1

       MOV     A, Minute        

       CJNE    A, #60, Exit          ;判断分计数单元是否加到60

 MOV     Minute, #0         ;需要向时计数单元进位分技术单元先清零

       INC     Hour                ;时计数单元加1

Exit:

       POP     DPL

       POP     DPH

       POP     PSW                  ;恢复断点

       RETI

DelAy:               ; 延时子程序

       MOV   r7, #0

DelAyLoop:

       DJNZ  r7, DelAyLoop

       DJNZ  r6, DelAyLoop   ;实现延时

       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        ; 关所有八段管

MOV   A, @r0

       MOV   DPTR, #OUTSEG

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

       MOV   DPTR, #OUTBIT

       MOV   A, r2

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

 MOV   r6, #1

       CAll  DelAy            ;调用延时程序

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)  ;设定计数初值

       SETB   TR0                ; 启动定时器T0

  

MLoop:

       MOV     A, Hour  

       MOV     B, #10

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

       CAll    ToLED   ;调用查表程序

       MOV     LEDBuf, A;将显示值放到显示缓冲区

       MOV     A, B

       CAll    ToLED

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

       MOV     LEDBuf+1, A;将显示值放到显示缓冲区的下一地址

MOV     A, Minute

       MOV     B, #10

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

       CAll    ToLED      ;调用查表程序

       MOV     LEDBuf+2, A;将显示值放到显示缓冲区下一地址

       MOV     A, B

       CAll    ToLED

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

       MOV     LEDBuf+3, A   ;将显示值放到显示缓冲区的下一地址

MOV     A, Second 

       MOV     B, #10

 DIV     AB   

                                                                                                                


 CAll    ToLED         ;调用查表程序

       MOV     LEDBuf+4, A  ;将显示值放到显示缓冲区的下一地址

       MOV     A, B

       CAll    ToLED         ;调用查表程序

       MOV     LEDBuf+5, A   ;将显示值放到显示缓冲区的下一地址

CAll    DisplAyLED    ;调用显示程序显示所有的结果

       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
完整代码下载: http://www.51hei.com/ziliao/file/tcc1.rar

关闭窗口

相关文章