课程设计报告
基于C51单片机控制的电梯自动控制系统
专业班级: _____计算机xx_____
姓 名: ___xxx__
时 间: ______2012年6月 __ 指导教师: ______xxx _____
一、设计要求
1.基本功能:
(1)显示:本设计要求实现5层控制,实时显示电梯所在楼层位置。 (2)升降控制:采用一台步进电机的正反转来实现电梯的升降。 (3)具备不可逆响应的功能:
电梯上升途中只响应上升呼叫,下降途中只响应下降呼叫,任何反方向呼叫均无效。
2.设计内容:
(1)基于功能进行初步设计; (2)编写代码,实现功能; (3)完成课程设计报告。
二、电梯控制系统原理
1.系统总体实现原理: 本电梯模拟系统是基于C51单片机、4*4矩阵式键盘、步进电机和LED数码管来实现的。通过4*4矩阵式键盘输入控制信息,C51单片机程序处理后来直接控制步进电机转动、LED数码管显示。
电梯运行基本过程是:电梯默认初始停在一楼,LED数码管显示1,当按键按下1~5中的数时,通过程序进行判断是否升降(即步进电机正转反转)、升降几层(转几圈)。与此同时,LED数码管显示当前所在楼层(1~5)。电梯在升降过程中,按其他键无效,即只有在电梯停下后,才可以进行下一轮的升降。另外,站在电梯外边的人可以通过按上下键(一层只有上键,五层只有下键)来控制电梯到人所在楼层,例如,你站在3层,你按了上键,电梯不论在1~5层的哪一层都会先升降到3层,然后你进电梯,向前面所说的进行控制电梯升降。
图1 设计电路总框图
U11234567813121514L31C230p1918RR200Ω91716P10P11P12P13P14P15P16P17INT1INT0T1T0EA/VPX1X2RESETRDWR8051RXDTXDALE/PPSEN10113029P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2739383736353433322122232425262728C130p1kRC322μfS111ANVCC
图2 单片机最小系统电路
2.各组成部分原理: (1)信号输入电路
现以呼叫信号的输入为例,来说明信号输入及单片机识别原理。如图3所示,采用P0口外接上拉电阻的并行输入形式,来输入外呼叫信号,本电路采用4×4矩阵键盘,列扫描法识别键值的原理,具体原理如下:
a) 判断键盘中有无键按下:将全部行线P0.0-P0.3置低电平,列线P0.4-P0.7置高电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。
b) 判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将列线置0,此时再将行线依次置1,看行线是否被拉为低电平。若该行被拉为低电平,则该列线与置为高电平的行线交叉处的按键就是闭合的按键。
SOO-S05为一到六楼的电梯内部呼叫请求按键,S08-S15为电梯外部请求按键。
VCCR13R14R15R16S00U1123456781312151431191891716P10P11P12P13P14P15P16P17INT1INT0T1T0EA/VPX1X2RESETRDWR8051RXDTXDALE/PPSEN10113029P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2739383736353433322122232425262728P00ANS04ANS08ANS12ANP04S01ANS05ANS09ANS13ANP05S02ANS06ANS10ANS14ANP06S03ANS07ANS11ANS15ANP07P01P02P03 图3 内外请求呼叫电路
(2)信号模拟输出电路
在实际中,厢外五个显示和厢内一个共六个数码管显示厢体位置楼层数,由于显示的数据是一致的,所以本设计中只用一个LED数码管显示代替。由于C51的串行口RXD和TXD为一个全双工串行通信口,工作在方式0下可作同步移位寄存器,其数据由RXD(P3.0)串行输出或输入,而同步移位时钟由TXD(P3.1)端串行输出。具体电路如下图5所示:
U1123456781312151431191891716P10P11P12P13P14P15P16P17INT1INT0T1T0EA/VPX1X2RESETRDWR8051RXDTXDALE/PPSEN10113029P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2739383736353433322122232425262728U16412ABQ0Q1Q2Q3Q4Q5Q6Q7374651621041191210135DS1DPYaabcfbgdeecdfdpgdpDPY_7-SEG_DP89MR74ALS164GNDCLKVCC8
图4 数码显示楼层电路
三、系统软件设计
图5 软件流程图
全部代码: org 0000h ajmp main0
org 0030h
;初始化电梯为第一层,r3记录当前所在楼层 main0:mov r3,#01h acall judge main:
mov p1,#11110000B;矩阵键盘所有列置1 comp:;实时查询按键 mov r1,p1
CJNE r1,#0f0h,tab1 ajmp comp tab1:第一列
cjne r1,#0e0h,tab2
c11:;s00键
mov p1,#11100001b;第一行置1
mov r2,p1;若第一行仍为0,则按键为第一行第一列即s00键
cjne r2,#11100000b,c12 acall l11 ajmp main
cjne r1,#0d0h,tab3
c21:;s01键
mov p1,#11010001b mov r2,p1
cjne r2,#11010000b,c22 acall l21 ajmp main c22: ;s05键
mov p1,#11010010b mov r2,p1
cjne r2,#11010000b,c23 acall l22 ajmp main c23: ;s09键
mov p1,#11010100b mov r2,p1
cjne r2,#11010000b,c24 acall l23 ajmp main
c12:;s04键
mov p1,#11100010b;第二行置1 mov r2,p1
cjne r2,#11100000b,c13;若第二行仍为0,则按键为第二行第一列即s04键 acall l12 ajmp main c13:;s08键
mov p1,#11100100b;第三行置1 mov r2,p1
cjne r2,#11100000b,c14;若第三行仍为0,则按键为第三行第一列即s08键 acall l13 ajmp main c14:;s12键
mov p1,#11101000b;第四行置1 mov r2,p1
cjne r2,#11100000b,main;若第四行仍为0,则按键为第四行第一列即s12键 acall l14 ajmp main
tab2:;第二列
c24: ;s13键
mov p1,#11011000b mov r2,p1
cjne r2,#11010000b,main acall l24 ajmp main
tab3:;第三列
cjne r1,#0b0h,tab4
c31: ;s02键
mov p1,#10110001b mov r2,p1
cjne r2,#10110000b,c32 acall l31 ajmp main c32: ;s06键
mov p1,#10110010b mov r2,p1
cjne r2,#10110000b,c33
acall l32 ajmp main c33: ;s10键
mov p1,#10110100b mov r2,p1
cjne r2,#10110000b,c34 acall l33 ajmp main c34: ;s14键
mov p1,#10111000b mov r2,p1
cjne r2,#10110000b,retc34 acall l34
retc34:ajmp main
tab4:;第四列 c41: ;s03键
mov p1,#01110001b mov r2,p1
cjne r2,#01110000b,c42 acall l41 ajmp main c42: ;s07键
mov p1,#01110010b mov r2,p1
cjne r2,#01110000b,c43 acall l42 ajmp main c43: ;s11键
mov p1,#01110100b mov r2,p1
cjne r2,#01110000b,c44 acall l43 ajmp main c44: ;s15键
mov p1,#01111000b mov r2,p1
cjne r2,#01110000b,retc44 acall l44
retc44:ajmp main
l11: ;按键s00时的处理 clr c;清进位位 mov a,#01h subb a,r3;按键与当前楼层做差 jnc lx1;进位位为0,跳到正转
acall fz;进位位为1,说明有借位,调用反转
ajmp ret1;反转完调用延迟 lx1:acall zz;调用正转 ret1:
acall delay;调用延时 ret;返回
l21: ;按键s01时的处理 clr c
mov a,#02h subb a,r3 jnc lx2 acall fz ajmp ret2 lx2:acall zz ret2:
acall delay ret
l31: ;按键s02时的处理 clr c
mov a,#03h subb a,r3 jnc lx3 acall fz ajmp ret3 lx3:acall zz ret3:
acall delay ret
l41: ;按键s03时的处理 clr c
mov a,#04h subb a,r3 jnc lx4 acall fz ajmp ret4 lx4:acall zz ret4:
acall delay
ret
l12: ;按键s04时的处理 clr c
mov a,#05h subb a,r3 jnc lx5 acall fz ajmp ret5 lx5:acall zz ret5:
acall delay ret
l22: ;按键s05时的处理 acall delay ret
l32: ;按键s06时的处理 acall delay ret
l42: ;按键s07时的处理 acall delay ret
l13: ;按键s08时的处理 clr c
mov a,#02h subb a,r3 jnc lx9 acall fz ajmp ret9 lx9:acall zz ret9:
acall delay ret
l23: ;按键s09时的处理 clr c
mov a,#03h subb a,r3 jnc lx10 acall fz ajmp ret10 lx10:acall zz ret10:
acall delay ret
l33: ;按键s10时的处理 clr c
mov a,#04h subb a,r3 jnc lx11 acall fz ajmp ret11 lx11:acall zz ret11:
acall delay ret
l43: ;按键s11时的处理 clr c
mov a,#01h subb a,r3 jnc lx12 acall fz ajmp ret12 lx12:acall zz ret12:
acall delay ret
l14: ;按键s12时的处理 clr c
mov a,#02h subb a,r3 jnc lx13 acall fz ajmp ret13 lx13:acall zz ret13:
acall delay ret
l24: ;按键s13时的处理 clr c
mov a,#03h subb a,r3
jnc lx14 acall fz ajmp ret14 lx14:acall zz ret14:
acall delay ret
l34: ;按键s14时的处理 clr c
mov a,#04h subb a,r3 jnc lx15 acall fz ajmp ret15 lx15:acall zz ret15:
acall delay ret
l44: ;按键s15时的处理 clr c
mov a,#05h subb a,r3 jnc lx16 acall fz ajmp ret16 lx16:acall zz ret16:
acall delay ret zz:
jz z2;a-r2的差值如果为0则直接返回,不转
z0:mov r0,#0ch;一圈 z1:
clr p3.2 setb p3.3 setb p3.4 setb p3.5 acall delay setb p3.2 clr p3.3 setb p3.4 setb p3.5 acall delay setb p3.2 setb p3.3 clr p3.4 setb p3.5 acall delay setb p3.2 setb p3.3 setb p3.4 clr p3.5 acall delay djnz r0,z1
dec a;每转一圈,a-- inc r3;每转一圈,r3++ acall judge
jnz z0;a不为0,则继续转,否则返回 z2: ret fz:
clr c;清进位位 mov r4,a mov a,#00h
subb a,r4;用0减补码求出正的差值 clr c fz0:
mov r0,#0ch f1:
setb p3.2 setb p3.3 setb p3.4 clr p3.5 acall delay setb p3.2 setb p3.3 clr p3.4 setb p3.5 acall delay setb p3.2 clr p3.3 setb p3.4
setb p3.5 acall delay clr p3.2 setb p3.3 setb p3.4 setb p3.5 acall delay djnz r0,f1 dec a;转数自减 dec r3;楼层自减
acall judge;LED显示当前楼层
jnz fz0;转数没到0继续转,否则返回 ret
judge:;根据当前所在楼层(r3的值),来控制LED显示
cjne r3,#01h,j1 mov scon,#00h; mov b,#09fh mov sbuf,b ajmp return j1:
cjne r3,#02h,j2 mov scon,#00h mov b,#025h mov sbuf,b ajmp return j2:
cjne r3,#03h,j3 mov scon,#00h mov b,#0dh mov sbuf,b ajmp return j3:
cjne r3,#04h,j4 mov scon,#00h mov b,#099h mov sbuf,b ajmp return j4:
cjne r3,#05h,return mov scon,#00h mov b,#049h mov sbuf,b
return:;返回 ret
delay:mov r7,#060h;延时 round1:mov r6,#0ffh round2:djnz r6,round2 djnz r7,round1 ret END
四、结束语
在这次实习中,我们对电路所实现的功能通过查找资料分析,首先根据所实现的功能画出了流程图,然后根据流程图来进行部分小程序及主程序的设计,最后进行拼合,通过设计程序,提高了逻辑的思维能力和动手能力。在调试的过程中,也学到了许多以前在课本上所未曾学到的知识。 参考文献
[1] 谢维成,杨家国.单片机原理与应用及C51程序设计(第2版)[M].北京:清华大学出版社,2009.
因篇幅问题不能全部显示,请点此查看更多更全内容