微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 智能收费系统软件源代码

智能收费系统软件源代码

时间:10-27 来源:互联网 点击:

采用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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top