《基于单片机的电梯仿真程序课程设计1.doc》由会员分享,可在线阅读,更多相关《基于单片机的电梯仿真程序课程设计1.doc(57页珍藏版)》请在三一办公上搜索。
1、二一四二一五学年 第一学期信息科学与工程学院自动化系课程设计报告书姓 名: 余义 学 号: 201204134019 班 级: 自动化1201班 课程名称: 微机原理与应用课程设计 指导教师: 程磊 目录(一) 前言.1(二) 现代电梯概述.3(三) 硬件部分设计.6(四) 软件部分设计.12(五) 电梯运行界面.52(六) 设计总结与感悟.56(七) 参考文献.57电梯仿真程序一、前言: 本电梯仿真程序采用的是一个基于单片机及其相关外设,编程语言采用汇编与C语言结合的方式,通过矩阵键盘线反选法输入楼层,上、下行等控制信号,经IO口读入,进行相关实时控制,软硬件结合的仿真系统,输出设备包括由C
2、D4511驱动显示楼层的7段数码管,显示实时信息的显示屏LCD12864,由PWM控制显示电梯门开关的舵机,以及由IO口间接控制的驱动电机正反转双桥驱动电路等几个部分组成。可以实现真实电梯中,任意层呼叫,目的层到达按要求顺序到达,开关门,无输入自动回1层等一系列功能,并实时显示当前电梯运行状态,关于真实电梯门控光幕装置,电机自动抱闸平层等部分,由于知识不足,没有足一实现,但会在接下来的专业知识学习过程中不断完善,同时也希望得到程老师的指导。二、现代电梯概述:电梯是一种以电动机为动力的垂直升降机,装有箱状吊舱,用于多层建筑乘人或载运货物。也有台阶式,踏步板装在履带上连续运行,俗称自动电梯。 服务
3、于规定楼层的固定式升降设备。它具有一个轿厢,运行在至少两列垂直的或倾斜角小于15的刚性导轨之间。轿厢尺寸与结构形式便于乘客出入或装卸货物,本次微机课程设计电梯仿真选用的是垂直升降梯。2.1、电梯功能现代电梯主要由曳引机(绞车)、导轨、对重装置、安全装置(如限速器、安全钳和缓冲器等)、信号操纵系统、轿厢与厅门等组成。这些部分分别安装在建筑物的井道和机房中。通常采用钢丝绳摩擦传动,钢丝绳绕过曳引轮,两端分别连接轿厢和平衡重,电动机驱动曳引轮使轿厢升降。电梯要求安全可靠、输送效率高、平层准确和乘坐舒适等。电梯的基本参数主要有额定载重量、可乘人数、额定速度、轿厢外廓尺寸和井道型式等。简单使用方法(紧急
4、情况下面有解决方法)载人电梯都是微机控制的智能化、自动化设备,不需要专门的人员来操作 电梯电梯结构图 电梯内部结构图驾驶,普通乘客只要按下列程序乘坐和操作电梯即可。2.2、运行过程:1、在乘梯楼层电梯入口处,根据自己上行或下行的需要,按上方向或下方向箭头按钮,只要按钮上的灯亮,就说明你的呼叫已被记录,只要等待电梯到来即可。2、电梯到达开门后,先让轿厢内人员走出电梯,然后呼梯者再进入电梯轿厢。进入轿厢后,根据你需要到达的楼层,按下轿厢内操纵盘上相应的数字按钮。同样,只要该按钮灯亮,则说明你的选层已被记录;此时不用进行其他任何操作,只要等电梯到达你的目的层停靠即可。3、电梯行驶到你的目的层后会自动
5、开门,此时按顺序走出电梯即结束了一个乘梯过程。三、硬件部分设计3.1、总电路图:3.2、单片机最小系统:单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路.下面给出一个51单片机的最小系统电路图.3.3、矩阵键盘:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,1键盘的工作原理: 按键设置在行、列线交点上,行、列线分别连接到按键开关的
6、 两端。行线通过上拉电阻接到+5V 电源上。无按键按下时,行线处 于高电平的状态, 而当有按键按下时, 行线电平与此行线相连的列 线电平决定。2行列扫描法原理:第一步, 使行线为编程的输入线,列线是输出线,拉低所有的列线, 判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则 所有的行线都为高电平。第二步, 在第一步判断有键按下后, 延时 10ms 消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用逐 行扫描,每间隔 1ms 的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读
7、取行值找到按键的位置, 分别把行值和列值储存在寄存器里。3.4、CD4511当前楼层显示CD4511 是一片 CMOS BCD-锁存/7 段译码/驱动器,用于驱动共阴极 LED (数码管)显示器的 BCD 码-七段码译码器。它具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。可直接驱动共阴LED数码管。以下是CD4511数码管驱动原理电路图。是CD4511实现LED与单片机的并行接口方法。3.5、LCD12864不带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体 中文字库的点阵图形液晶显示模块;
8、其显示分辨率为12864, 内置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符 集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84 行1616 点 阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶 显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。3.6、电机双桥驱动系统一、H桥驱动电路 图4.12中所示为一个典型的直流电机控制电路。电路得名于“H桥驱动电路”是因为它的形状酷似字母H。4个三极管组成H的4条垂直腿,而
9、电机就是H中的横杠(注意:图4.12及随后的两个图都只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出来)。如图所示,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。图4.12 H桥驱动电路 要使电机运转,必须使对角线上的一对三极管导通。例如,如图4.13所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动
10、电机按特定方向转动(电机周围的箭头指示为顺时针方向)。图4.13 H桥电路驱动电机顺时针转动图4.14所示为另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向)。图4.14 H桥驱动电机逆时针转动二、使能控制和方向逻辑 驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。基于上述原
11、因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。 图4.155 所示就是基于这种考虑的改进电路,它在基本H桥电路的基础上增加了4个与门和2个非门。4个与门同一个“使能”导通信号相接,这样,用这一个信号就能控制整个电路的开关。而2个非门通过提供一种方向输人,可以保证任何时候在H桥的同侧腿上都只有一个三极管能导通。(与本节前面的示意图一样,图4.15所示也不是一个完整的电路图,特别是图中与门和三极管直接连接是不能正常工作的。)图4.15 具有使能控制和方向逻辑的H桥电路 采用以上方法,电机的运转就只需要用三个信号控制:两个方向信号和一个使能信号。如果DIRL信号为0,DIRR信号为1,
12、并且使能信号是1,那么三极管Q1和Q4导通,电流从左至右流经电机(如图4.16所示);如果DIRL信号变为1,而DIRR信号变为0,那么Q2和Q3将导通,电流则反向流过电机。四、软件部分设计:4.1、程序框图显示提示,开发者、版本信息硬件上电待命键盘输入目的楼层记录并该楼层标志位否结束键是否按下 是程序开始运行While(1). 运行至最后目 的楼层继续否键盘扫描电梯门,电机运行,延时lcd显示,7段数码管显示 若相等电机停转,电梯门开,延时lcd显示,7段数码管显示当前楼层标志位加一并与存储楼层对比电机运行,到达下一层 否否是是结束待命4.2、C51单片机汇编、C语言混编程序:; 电梯。SR
13、C generated from: 电梯.c; COMPILER INVOKED BY:; C:KeilC51BINC51.EXE 电梯.c BROWSE DEBUG OBJECTEXTEND$NOMOD51NAME电梯P0DATA080HP1DATA090HP2DATA0A0HP3DATA0B0HT0BIT0B0H.4ACBIT0D0H.6T1BIT0B0H.5T2BIT090H.0EABIT0A8H.7IEDATA0A8HclockBIT0B0H.0EXF2BIT0C8H.6RDBIT0B0H.7ESBIT0A8H.4IPDATA0B8HRIBIT098H.0INT0BIT0B0H.2CY
14、BIT0D0H.7TIBIT098H.1INT1BIT0B0H.3RCAP2HDATA0CBHPSBIT0B8H.4SPDATA081HT2EXBIT090H.1OVBIT0D0H.2RCAP2LDATA0CAHC_T2BIT0C8H.1WRBIT0B0H.6RCLKBIT0C8H.5TCLKBIT0C8H.4SBUFDATA099HPCONDATA087HSCONDATA098HTMODDATA089HTCONDATA088HIE0BIT088H.1IE1BIT088H.3BDATA0F0HCP_RL2BIT0C8H.0ACCDATA0E0Hservo_doorBIT0B0H.7ET0BIT
15、0A8H.1ET1BIT0A8H.3TF0BIT088H.5ET2BIT0A8H.5TF1BIT088H.7TF2BIT0C8H.7RB8BIT098H.2TH0DATA08CHEX0BIT0A8H.0IT0BIT088H.0TH1DATA08DHTB8BIT098H.3EX1BIT0A8H.2IT1BIT088H.2TH2DATA0CDHPBIT0D0H.0SM0BIT098H.7TL0DATA08AHSM1BIT098H.6TL1DATA08BHSM2BIT098H.5TL2DATA0CCHPT0BIT0B8H.1PT1BIT0B8H.3RS0BIT0D0H.3PT2BIT0B8H.5TR
16、0BIT088H.4RS1BIT0D0H.4TR1BIT088H.6TR2BIT0C8H.2PX0BIT0B8H.0PX1BIT0B8H.2DPHDATA083HDPLDATA082HEXEN2BIT0C8H.3RENBIT098H.4T2CONDATA0C8HRXDBIT0B0H.0TXDBIT0B0H.1F0BIT0D0H.5PSWDATA0D0H?PR?_delay?SMARTCAR SEGMENT CODE ?PR?_ABS?SMARTCAR SEGMENT CODE ?PR?keysort?SMARTCAR SEGMENT CODE ?PR?keycheck?SMARTCAR SEG
17、MENT CODE ?PR?sys_init?SMARTCAR SEGMENT CODE ?PR?_BCD?SMARTCAR SEGMENT CODE ?PR?main?SMARTCAR SEGMENT CODE ?PR?TIME_BASE?SMARTCAR SEGMENT CODE ?C_INITSEG SEGMENT CODE ?BI?SMARTCAR SEGMENT BIT ?DT?SMARTCAR SEGMENT DATA EXTRNCODE (?C_STARTUP)PUBLICfloor_up_2PUBLICfloor_up_1PUBLICrankkeyPUBLICopendoorP
18、UBLICiPUBLICup_flagPUBLICrowPUBLICfloor_down_5PUBLICfloor_down_4PUBLICfloor_down_3PUBLICfloor_down_2PUBLICpressflagPUBLICkeyPUBLICkey_flagPUBLICstop_flagPUBLICtempPUBLICdown_flagPUBLICfloor_flag_5PUBLICfloor_flag_4PUBLICfloor_flag_3PUBLICfloor_flag_2PUBLICfloor_flag_1PUBLICstartPUBLICclose_doorPUBLI
19、CrankPUBLICcountPUBLICrowkeyPUBLICfloor_up_4PUBLICfloor_up_3PUBLICTIME_BASEPUBLICmainPUBLIC_BCDPUBLICsys_initPUBLICkeycheckPUBLICkeysortPUBLIC_ABSPUBLIC_delayRSEG ?BI?SMARTCAR floor_up_3: DBIT 1 floor_up_4: DBIT 1 close_door: DBIT 1 start: DBIT 1 floor_flag_1: DBIT 1 floor_flag_2: DBIT 1 floor_flag_
20、3: DBIT 1 floor_flag_4: DBIT 1 floor_flag_5: DBIT 1 down_flag: DBIT 1 stop_flag: DBIT 1 pressflag: DBIT 1 floor_down_2: DBIT 1 floor_down_3: DBIT 1 floor_down_4: DBIT 1 floor_down_5: DBIT 1 up_flag: DBIT 1 opendoor: DBIT 1 floor_up_1: DBIT 1 floor_up_2: DBIT 1RSEG ?DT?SMARTCAR rowkey: DS 1 count: DS
21、 2 rank: DS 1 temp: DS 1 key_flag: DS 16 key: DS 1 row: DS 1 i: DS 1 rankkey: DS 1RSEG ?C_INITSEGDB002HDBcountDW00000HDB010HDBkey_flagDB000HDB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000HDB 000H,000H,000H,000H,000HDB001HDBkeyDB000HDB001HDBiDB000HDB0C1H, pressflag + 000H; bit-initDB0C1H, up_flag
22、 + 000H; bit-initDB0C1H, down_flag + 000H; bit-initDB0C1H, stop_flag + 000H; bit-initDB001HDBrowkeyDB000HDB001HDBrankkeyDB000HDB001HDBtempDB000HDB001HDBrowDB000HDB001HDBrankDB000H DB0C1H, floor_flag_1 + 000H; bit-init DB0C1H, floor_flag_2 + 000H; bit-initDB0C1H, floor_flag_3 + 000H; bit-initDB0C1H,
23、floor_flag_4 + 000H; bit-initDB0C1H, floor_flag_5 + 000H; bit-initDB0C1H, floor_down_5 + 000H; bit-initDB0C1H, floor_up_4 + 000H; bit-initDB0C1H, floor_down_4 + 000H; bit-initDB0C1H, floor_up_3 + 000H; bit-initDB0C1H, floor_down_3 + 000H; bit-initDB0C1H, floor_up_2 + 000H; bit-initDB0C1H, floor_down
24、_2 + 000H; bit-initDB0C1H, floor_up_1 + 000H; bit-initDB0C1H, opendoor + 000H; bit-initDB0C1H, close_door + 000H; bit-initDB0C1H, start + 000H; bit-init; /晶振 12MHz 6T模式,总线频率2MHz 指令0.5us; #pragma src; #include /89C52的头文件; ; #define T0_HIGH 0xff /T0计时器寄存器初值; #define T0_LOW 0x9b /溢出计数80个,定时周期80*0.25us=
25、20us; /为了保证主程序正常运行,定时器计数最好不要小于80个; ; #define keynumber 16 16个按键标志; #define KEYIO P2 4*4键盘输入; #define output P1 lcd12864数据D0D7; #define nobcd P0 BCD端口输出; ; sbit clock=P30; lcd12864时钟输出端; sbit servo_door=P37; 舵机控制门输出端口; int count=0; ; char key_flagkeynumber=0; 按键标志位; ; char key=0; char i=0; ; bit pres
26、sflag=0; bit up_flag=0; bit down_flag=0; 控制信号标志位; bit stop_flag=0; ; ; ; ; ; char rowkey=0; 键盘反选变量设置; char rankkey=0; char temp=0; char row=0; char rank=0; ; bit floor_flag_1=0;、 各楼层标志位; bit floor_flag_2=0; bit floor_flag_3=0; bit floor_flag_4=0; bit floor_flag_5=0; bit floor_down_5=0; bit floor_up_
27、4=0; bit floor_down_4=0; bit floor_up_3=0; bit floor_down_3=0; bit floor_up_2=0; bit floor_down_2=0; bit floor_up_1=0; bit opendoor=0; bit close_door=0; bit start=0; ; /-; void delay(unsigned int i)/延时函数_delay:USING0; SOURCE LINE # 56;- Variable i?040 assigned to Register R6/R7 -; ; SOURCE LINE # 57
28、; unsigned char j; for(;i0;i-); SOURCE LINE # 59?C0001:SETB CMOV A,R7SUBB A,#00HMOV A,R6SUBB A,#00HJC ?C0007; for(j=0;j=0) return i; SOURCE LINE # 65CLR CMOV A,R6XRL A,#080HSUBB A,#080HJC ?C0008RET ?C0008:; else return -i; SOURCE LINE # 66CLR CCLR ASUBB A,R7MOV R7,ACLR ASUBB A,R6MOV R6,A; ; SOURCE L
29、INE # 67?C0009:RET ; END OF _ABS; /-; void keysort(void)RSEG ?PR?keysort?SMARTCARkeysort:USING0; SOURCE LINE # 69; ; SOURCE LINE # 70; for(i=0;i16;i+); SOURCE LINE # 71CLR AMOV i,A?C0011:; ; SOURCE LINE # 72; if(key=i) key_flagi=1; SOURCE LINE # 73MOV A,keyCJNE A,i,?C0013MOV A,#LOW (key_flag) 读并且记录标
30、志位函数ADD A,iMOV R0,AMOV R0,#01H; ; SOURCE LINE # 74?C0013:INC iMOV A,iCJNE A,#010H,?C0011?C0012:; ; for(i=0;i16;i+); SOURCE LINE # 76CLR AMOV i,A?C0015:; ; SOURCE LINE # 77; if(key_flagi!=0) ; SOURCE LINE # 78MOV A,#LOW (key_flag)ADD A,iMOV R0,AMOV A,R0JNZ $ + 5HLJMP ?C0017; ; SOURCE LINE # 79; if(i=
31、0) floor_flag_1=1; else floor_flag_1=0; SOURCE LINE # 80MOV A,iJNZ ?C0019SETB floor_flag_1SJMP ?C0020?C0019:CLR floor_flag_1?C0020:; if(i=1) floor_flag_2=1; else floor_flag_2=0; SOURCE LINE # 81MOV A,iCJNE A,#01H,?C0021SETB floor_flag_2SJMP ?C0022?C0021:CLR floor_flag_2?C0022:; if(i=2) floor_flag_3=
32、1; else floor_flag_3=0; SOURCE LINE # 82MOV A,iCJNE A,#02H,?C0023SETB floor_flag_3SJMP ?C0024?C0023:CLR floor_flag_3?C0024:; if(i=3) floor_flag_4=1; else floor_flag_4=0; SOURCE LINE # 83MOV A,iCJNE A,#03H,?C0025SETB floor_flag_4SJMP ?C0026?C0025:CLR floor_flag_4?C0026:; if(i=4) floor_flag_5=1; else
33、floor_flag_5=0; SOURCE LINE # 84MOV A,iCJNE A,#04H,?C0027SETB floor_flag_5SJMP ?C0028?C0027:CLR floor_flag_5?C0028:; if(i=5) floor_down_5=1; else floor_down_5=0; SOURCE LINE # 85MOV A,iCJNE A,#05H,?C0029SETB floor_down_5SJMP ?C0030?C0029:CLR floor_down_5?C0030:; if(i=6) floor_up_4=1; else floor_up_4
34、=0; SOURCE LINE # 86MOV A,iCJNE A,#06H,?C0031SETB floor_up_4SJMP ?C0032?C0031:CLR floor_up_4?C0032:; if(i=7) floor_down_4=1; else floor_down_4=0; SOURCE LINE # 87MOV A,iCJNE A,#07H,?C0033SETB floor_down_4SJMP ?C0034?C0033:CLR floor_down_4?C0034:; if(i=8) floor_up_3=1; else floor_up_3=0; SOURCE LINE
35、# 88MOV A,iCJNE A,#08H,?C0035SETB floor_up_3SJMP ?C0036 电梯运行函数?C0035:CLR floor_up_3?C0036:; if(i=9) floor_down_3=1; else floor_down_3=0; SOURCE LINE # 89MOV A,iCJNE A,#09H,?C0037SETB floor_down_3SJMP ?C0038?C0037:CLR floor_down_3?C0038:; if(i=10) floor_up_2=1; else floor_up_2=0; SOURCE LINE # 90MOV A,iCJNE A,#0AH,?C0039SETB floor_up_2SJMP ?C0040?C0039:CLR floor_up_2?C0040:; if(i=11) floor_down_2=1; else floor_down_2=0; SOURCE LINE # 91MOV A,iCJNE A,#0BH,?C0041SETB floor_down_2SJMP ?C
链接地址:https://www.31ppt.com/p-4139724.html