2单片机设计案例.docx
《2单片机设计案例.docx》由会员分享,可在线阅读,更多相关《2单片机设计案例.docx(19页珍藏版)》请在冰豆网上搜索。
![2单片机设计案例.docx](https://file1.bdocx.com/fileroot1/2023-1/3/0334574d-a232-44a4-8153-cc0e987ab925/0334574d-a232-44a4-8153-cc0e987ab9251.gif)
2单片机设计案例
项目二智能收费系统设计
一、设计内容与要求
智能收费系统要求以89S52单片机为最小系统,外围要有蜂鸣器电路、显示电路、按键键盘控制电路、读卡器等硬件电路,以非接触的射频卡为介质实现消费管理,透支报警,也可以发挥增加其它功能,完成智能收费系统的设计。
二、硬件电路框图
1.硬件电路框图图2-1IC卡硬件电路框图
2.I/O口的分配:
P1.0
串联显示CP
P1.1
——
P1.2
音响
P1.3
——
P1.4
串联显示数据
P1.5
键CP
P1.6
键复位
P1.7
键盘状态
P3.0
RXD(读卡器)
三、软件设计
1.流程图:
如下图所示
2.程序的内存地址分配:
40H
显示窗口号
41H
卡号的低8位
42H
卡号的高8位
43H
现卡内余额的低8位
44H
现卡内余额的高8位
45H
显示本次用款的低8位
46H
显示本次用款的高8位
47H
本次结余的低8位
48H
本次结余的高8位
10H-17H
代码
3.部分参考程序
ORG0000H
LJMPMAIN
ORG0023H
LJMPZD
ORG0300H
MAIN:
MOVSP,#60H
ACALLZHISHU;卡原存
M0:
MOVSP,#60H
LCALLSIC;串口中断始化
M1:
MOV0FH,#00H
ACALLLBB;清10-1F
MOVA,#02H;窗口号
MOV40H,A;40H存窗口号
MOV10H,40H;
MOV11H,#00H;窗口号送10H和11H
ACALLLAAA;显示窗口号
L003:
MOVA,0FH;判卡标志
CJNEA,#33H,L003
ACALLDUKA;卡处理
MOVA,41H;取卡低位乘以2
CLRC
RLCA
MOV82H,A;A内容送DPTR
JCB1;C=1转
MOV83H,#0E0H;A内容送DPH
AJMPB2
B1:
MOV83H,#0E1H;
B2:
MOV4AH,82H
MOV4BH,83H
MOV18H,#0AH
MOVXA,@DPTR;送原存即取余款
MOV43H,A;43和44单元放余款
MOV20H,A;20和21单元为显示
INCDPTR;
MOVXA,@DPTR;
MOV44H,A;
MOV21H,A;
ACALLYASO;压缩16进制数变成压缩10进制数
ACALLL11;压缩--非压缩
ACALLLAAA;10H代码变换后送显示
K1:
ACALLJIAN
JNCK1
LDD8:
MOV30H,A
ACALLLBB
MOVA,30H
SJMPLDD9
LDD4:
ACALLJIAN;扫键
JNCLDD4
LDD9:
ACALLJ3;键译
JCLEE4;功能键
ACALLLCA
MOV10H,A
ACALLLAAA
AJMPLDD4
LEE4:
CJNEA,#0EH,LEEE5;E为取消
LJMPM0
LEEE5:
CJNEA,#0FH,LDD4;F为确认减钱
LJMPFF
HUAN:
MOV09H,A;清显示缓冲区子程序
ACALLLBB
MOVA,09H
CLRF0
RET
LCA:
MOV14H,13H
MOV13H,12H
MOV12H,11H
MOV11H,10H
RET
JIAN:
MOV18H,#0BH
SETBP1.6;扫键子程序
ACALLLAAA5
CLRP1.6
ACALLLAAA5
CLRA
J1:
JNBP1.7,J2
INCA
CLRP1.5
ACALLLAAA5
SETBP1.5
ACALLLAAA5
CJNEA,#10H,J1
CLRC
RET
J2:
ACALLLAAA5
JNBP1.7,J4
SJMPJ1
J4:
JNBP1.7,J4
SETBC
RET
J3:
MOVDPTR,#03C3H;键译
MOVCA,@A+DPTR
CJNEA,#09H,J5
CLRC
RET
J5:
JNCJ6
CLRC
RET
J6:
SETBC
RET
DB00H,01H,02H,03H,04H,07H,0BH,0CH
DB0AH,0DH,0EH,05H,06H,08H,09H,0FH
LAAA5:
MOVR0,#20H
J8:
DJNZR0,J8
RET
FF:
MOVA,11H;处理功能键,非压10进制变压送20H
ANLA,#0FH
SWAPA
MOV20H,A
MOVA,10H
ANLA,#0FH
ADDA,20H
MOV20H,A;低2位在20H
MOVA,13H
ANLA,#0FH
SWAPA
MOV21H,A
MOVA,12H
ANLA,#0FH
ADDA,21H
MOV21H,A;高2位在21H
MOVR0,#21H;调BCD码变16进制子程序入口地址;先放高
MOVR1,#45H
MOVR7,#02H
ACALLLD4;调BCD码变16进制子程序
CLRC
MOVA,43H;(43H)-(45H)=(47H)
SUBBA,45H
MOV47H,A
MOVA,44H;(44H)-(46H)=(48H)
SUBBA,46H
MOV48H,A
JCER0;为负转移
MOV82H,4AH;把结果暂存
MOV83H,4BH
MOVA,47H
MOVX@DPTR,A
INCDPTR
MOVA,48H
MOVX@DPTR,A
MOV20H,47H;显余额
MOV21H,48H
ACALLYASO
ACALLL11
MOV18H,#0CH
ACALLLAAA
CLRP1.2;音响
ACALLDEL2
SETBP1.2
ACALLDEL
AJMPM0
ER0:
MOVA,#11H;-的代码
MOV14H,A
MOV13H,A
MOV12H,A
MOV11H,A
MOV10H,A
ACALLLAAA
CLRP1.2;音响
ACALLDEL
SETBP1.2
ACALLDEL
AJMPM0
RET
DUKA:
ACALLLEE;ASC码变16进制数
ACALLLB;非压16进制变压缩16进制数
MOV20H,34H
MOV21H,33H
MOV41H,34H
MOV42H,33H
ACALLYASO;压缩16进制数变成压缩10进制数
ACALLL11;压缩--非压缩
ACALLDAIM;代码--段码
ACALLXIAN;显示
RET
LBB:
MOVA,#10H;清显示
MOVR0,#10H
MOVR2,#09H
LB1:
MOV@R0,A
INCR0
DJNZR2,LB1
RET
XIAOSH:
MOVA,22H;小数点程序
ORLA,#80H
MOV22H,A
MOVA,27H
ORLA,#00H
MOV27H,A
MOVR0,#24H
ACALLLBB5
MOVR0,#28H
ACALLLBB5
RET
LBB5:
MOVR2,#02H
LB5:
MOVA,@R0
CJNEA,#3FH,LB6
CLRA
MOV@R0,A
DECR0
LB6:
DJNZR2,LB5
RET
LAAA:
MOV15H,#10H
ACALLDAIM
ACALLXIAOSH
ACALLXIAN
RET
SIC:
ANLTMOD,#0FH;中断始化
ORLTMOD,#20H
MOVTH1,#0FDH
MOVTL1,#0FDH
SETBTR1
MOVIE,#90H
MOVSCON,#50H
RET
ZD:
PUSHACC;中断程序
PUSH00H
PUSH02H
MOVR0,#30H
MOVR2,#0BH
LL1:
ACALLLL2
JBF0,LL3
NOP
NOP
MOV@R0,A
INCR0
DJNZR2,LL1
POP02H
POP00H
POPACC
NOP
MOV0FH,#33H
RETI
LL2:
MOV04H,#28H
LL4:
JNBRI,LL6
CLRRI
MOVA,SBUF
CLRF0
RET
LL6:
MOV05H,#0AH
LL5:
DJNZR5,LL5
DJNZR4,LL4
SETBF0
RET
LL3:
POP02H
POP00H
POPACC
RETI
LEE:
MOVR0,#30H;ACS码变16进制数
MOVR2,#0AH
LEE5:
MOVA,@R0
ACALLLE7
MOV@R0,A
INCR0
DJNZR2,LEE5
RET
LE7:
CJNEA,#40H,L13
SJMPLEE7
L13:
JCLEE6
ADDA,#09H
LEE6:
ANLA,#0FH
CLRC
RET
LEE7:
SETBC
RET
LB:
MOVA,30H;非压16进制变压缩16进制数
SWAPA
ADDA,31H
MOV30H,A
MOVA,32H
SWAPA
ADDA,33H
MOV31H,A
NOP
NOP
MOVA,34H
SWAPA
ADDA,35H
MOV32H,A
MOVA,36H
SWAPA
ADDA,37H
MOV33H,A
NOP
NOP
MOVA,38H
SWAPA
ADDA,39H
MOV34H,A
RET
YASO:
MOVR0,#20H;压缩16进制数变成压缩10进制数
MOVR7,#02H
MOVR1,#28H
LCALLLY1
RET
LY1:
MOVA,R0
MOVR5,A
MOVA,R1
MOVR6,A
MOVA,R7
INCA
MOVR3,A
CLRA
LY2:
MOV@R1,A
INCR1
DJNZR3,LY2
MOVA,R7
MOVB,#08H
MULAB
MOVR3,A
LY3:
MOVA,R5
MOVR0,A
MOVA,R7
MOVR2,A
CLRC
LY5:
MOVA,@R0
RLCA
MOV@R0,A
INCR0
DJNZR2,LY5
MOVA,R6
MOVR1,A
MOVA,R7
MOVR2,A
INCR2
LY4:
MOVA,@R1
ADDCA,@R1
DAA
MOV@R1,A
INCR1
DJNZR2,LY4
DJNZR3,LY3
RET
L11:
MOVR1,#10H;压缩10进制数变成非压缩十进制数
MOVR2,#03H
MOVR0,#28H
L12:
MOVA,@R0
ANLA,#0FH
MOV@R1,A
INCR1
MOVA,@R0
SWAPA
ANLA,#0FH
MOV@R1,A
INCR0
INCR1
DJNZR2,L12
RET
DAIM:
MOVR2,#09H;代码变短码
MOVR0,#10H
MOVR1,#20H
L12F:
MOVA,@R0
ADDA,#06H
MOVCA,@A+PC
MOV@R1,A
INCR0
INCR1
DJNZR2,L12F
RET
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DB00H,40H,73H,03H,18H,23H,1CH,3DH,76H,0FH,1EH,38H
XIAN:
MOVR0,#20H;显示
MOVR2,#09H
LP1:
MOVR1,#08H
MOVA,@R0
LP2:
RLCA
MOVP1.4,C
CLRP1.0
SETBP1.0
DJNZR1,LP2
INCR0
DJNZR2,LP1
RET
DEL:
MOVR5,#14H
Y3:
MOVR6,#0FFH
Y2:
MOVR7,#0FFH
Y1:
DJNZR7,Y1
DJNZR6,Y2
DJNZR5,Y3
RET
DEL2:
MOVR5,#02H
Y33:
MOVR6,#0FFH
Y22:
MOVR7,#0FFH
Y11:
DJNZR7,Y11
DJNZR6,Y22
DJNZR5,Y33
RET
LD4:
MOVA,R1;压十变压16进制
MOVR6,A
MOVA,R7
MOVR3,A
CLRA
LD9H:
MOV@R1,A
INCR1
DJNZR3,LD9H
MOVA,R7
MOVR3,A
LDFH:
ACALLLD6H
MOVA,@R0
ANLA,#0F0H
SWAPA
ACALLLD7H
ACALLLD6H
MOVA,@R0
ANLA,#0FH
ACALLLD7H
DECR0
DJNZR3,LDFH
RET
LD6H:
MOVA,R7
MOVR4,A
MOVA,R6
MOVR1,A
CLRC
MOVR2,#00H
LDAH:
MOVA,@R1
MOVB,#0AH
PUSHPSW
MULAB
POPPSW
ADDCA,R2
MOV@R1,A
MOVR2,B
INCR1
DJNZR4,LDAH
RET
LD7H:
MOVR5,A
MOVA,R6
MOVR1,A
MOVA,R7
MOVR4,A
MOVA,R5
ADDA,@R1
MOV@R1,A
INCR1
DECR4
MOVA,R4
JNZLDBH
AJMPLDCH
LDBH:
MOVA,@R1
ADDCA,#00H
MOV@R1,A
INCR1
DJNZR4,LDBH
LDCH:
RET
ZHISHU:
MOVDPTR,#0E004H;制卡数卡号6264地址
MOVR2,#0FFH
LOOP:
MOVA,#10H;金额低位
MOVX@DPTR,A
INCDPTR
MOVA,#27H;金额高位
MOVX@DPTR,A
INCDPTR
DJNZR2,LOOP
RET
END