智能收费系统软件源代码
采用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
- MCS-51系列单片机结构化程序设计探讨(04-20)
- 基于MCS-51的嵌入式Internet接入技术(09-02)
- MCS-51单片机的定时器/计数器应该掌握的知识(10-19)
- MCS-51系列单片机的结构(12-02)
- MCS-51单片机汇编指令详解(12-01)
- MCS-51单片机的存储器结构---单片机基础(11-29)