1二模拟电梯设计基本要求:用键盘、按钮、八段码和LED模拟电梯工作过程。楼层设为8层,键盘数字键1-8用来键入希望停的楼层,8个LED显示希望停的楼层,八段码指示电梯当前所在楼层,按扭用来启、停电梯。电梯正常运行时以每2秒1层的速度上升或下降。要求“电梯”能按以下方式运行:(1)设当前电梯停在某层(八段码显示相应楼层,8个LED全灭)。键入1-8数字键,如键入的数字与当前电梯停层同,则不发生任何动作;若不同则相应楼层的LED亮。如再按运行键,则电梯自动判别上升或下降(在运行过程中八段码显示楼层变化)一直到达希望停的楼层(八段码显示该楼层,相应LED灭);2(2)设当前电梯正在上升或下降运行(此时八段码显示楼层变化,LED指示希望抵达的楼层),若键入新的希望停的楼层数字(相应的LED亮),则对同方向(上升或下降)未到的楼层能停,对其他情况则先停原希望停的楼层,然后按运行键后继续进行)。如下几例:a)设电梯当前在2层,向上运行,LED指示希望在6层停,此时若键入4,则电梯将在4层停;若再按运行键,则继续运行至6层停。b)同上情况,若键入的不是4而是8,则电梯将先停在6层;再按运行键,运行至8层停。c)同上情况,若键入的不是4(或8),而是1,则电梯先停在6层;再按运行键,运行至1层停。。33)进一步设计要求除运行按钮外,再设计几个按钮,模拟更多的电梯运行功能,如:直达按钮若按此按钮,电梯按直达方式运行,即对运行期间新键入的停靠楼层(即使是同方向未到楼层)亦不停,直达终点楼层。急停按钮电梯运行中,若按此按钮,则电梯立即停在将要到达的楼层。断电待修按钮按下该钮电梯不能工作,再按一下才能重新工作。其他功能按钮(由设计者自由发挥)。4电梯状态的介绍1)当电梯主体由低楼层向高楼层运动时,称为上升状态。2)当电梯主体由高楼层向低楼层运动时,称为下降状态。3)当电梯主体到达了某个乘客所希望到达的楼层(以下简称目标楼层)后,在系统中仍然有使用它的请求存在,称为暂停状态。4)当电梯主体到达目标楼层后,在系统再也没有使用它的请求存在,称为停止状态。5)当乘客进入电梯主体后,使用梯内控制器向系统发送到达其它楼层的请求时,称为楼层请求发送状态。6)当电梯正在运行时,产生了停电条件,此时称为停电状态。5当电梯主体在进行状态转换时,将遵守以下的运行规则:1)上升状态能变为暂停状态,转变条件为电梯主体到达了目标楼层。2)上升状态能变为停电状态,转变条件为电梯上升时遇到了停电条件。3)下降状态能变为暂停状态,转变条件为电梯主体到达了目标楼层。4)下降状态能变为停电状态,转变条件为电梯下降时遇到了停电条件。5)暂停状态能变为上升状态,转变条件为以下两个条件中的任意一个成立。6键盘的管理策略的探讨及选择方案一:实验装置上有一个2*8的键盘,它的2根行线接在8255A并行I/O接口的PB0和PB1上,8根列线接在PA0~PA7上,使用行扫描法管理该键盘的子程序。方案二:采用实验装置上的8279来使用“中断方式”来管理键盘。由于该实验装置上IRQ8279并未引出,且查询方式可以满足设计需求。所以选择方案一来管理键盘。73.1系统设计的主要难点⑴该系统模拟真实电梯的运行,有生活经验可知电梯有楼层数字显示,内部面板按钮用以楼层请求且按下后相应的键亮(此处用LED模拟),上升下降显示(该系统不模拟电梯外部等待按键请求),所需控制的东西较多,实现起来逻辑需分析清晰。⑵在基本要求及实现的功能⑵中可知在电梯运行过程中有键按下后如何判断先满足哪个请求8系统的硬件设计思路该实验在ADEK5196实验箱上实现电路设计。采用8255控制键盘查询,8279控制的8段数码管(HL6,HL7)显示来表示当前电梯所在层,LED控制楼层亮灯情况,串行口扩展并行输出接口的8段数码管(HL5)显示电梯运行状态“U”或“P”9实验连线任务为:LED控制部分:DL1~DL8接74LS273的PO0~PO7,其设备选择端“CS”接编号为8100H的译码器输出。8255控制键盘查询部分:实验装置上有一个2*8的键盘,它的2根行线接在8255A并行I/O接口的PB0和PB1上,8根列线接在PA0~PA7上,“CS”接编号为8700H的译码器输出.该部分只需将十个跳帽都跳至8255处即可。采用8279控制数码管显示:实验装置上该部分已连好所以无需连线。串行口扩展并行输出接口部分:将74LS164移位寄存器的INDATA连到8031的RXD,CLK连到TXD。具体电路可参照单片机实验书。10系统的软件的设计思路一﹑软件算法软件的设计是该设计的关键部分之一,对电梯模拟的显示控制不仅多而且复杂,尤其是对于在运行过程中有键按下的处理要用到多重判断,同时还要考虑键盘的响应问题,这些都是该系统设计着重解决的问题。下面先给出主程序流程图,从总体上说明该程序的实现,再从各个模块上进行分析。11开始主程序键盘扫描子程序键值=0?点亮相应的LED开T1中断K1~K8按下?NYK1~K8按下?Y返回主程序N键盘扫描子程序NY键盘扫描子程序2S到,当前楼层+1=键值?N存键值转判断子程序12二﹑判断子程序:当前电梯正在上升或下降运行(此时八段码显示楼层变化,LED指示希望抵达的楼层),若键入新的希望停的楼层数字(相应的LED亮),则对同方向(上升或下降)未到的楼层能停,对其他情况则先停原希望停的楼层,然后按运行键后继续进行。以下解释所用单元的含义:FLAG:上升下降标志。FLAG=1上升,FLAG=0下降。NOW:电梯当前值FIR:第一次按键值(即第一次按下希望到的楼层)SEC:第二次按键值(即第二次按下希望到的楼层)其软件流程图如下所示:13判断子程序SECFIR?NY先上升到SEC楼层FLAG=1?YSECNOW?YN先上升到FIR楼层0键按下?Y上升到未到的层返回主程序与上升类似的判断N返回主程序14下面对各个模块的程序进行简要的分析:上电复位后即进入主程序,主程序对8279、8255及相应单元初始化,8断数码管显示“1F”表示1层,系统等待键盘响应。下面给出8279初始化的程序片段:MOVDPTR,#COM8279;8279端口地址MOVA,#0D3HLOOP0:MOVXA,@DPTRJBACC.7,LOOP0;8279总清零MOVA,#34H;CLK20分频MOVX@DPTR,AMOVA,#10H;8字符显示,右进,编码扫描,2键锁定MOVX@DPTR,A;8279初始化完成15三、显示程序的算法a)采用8279来控制8段数码管的显示,用以模拟电梯楼层的显示。8279采用8字符右进方式来显示当前楼层值。从左到右依次将其记为LED7-LED0。该实验LED0固定显示“F”,LED1显示当前楼层值,LED2-LED7灭灯。下面给出一程序片段:DISPLAY:MOVA,#71HMOVDPTR,#DATA8279MOVX@DPTR,A;LED0显示“F”MOVR1,#06HMOVDPTR,#SEGDAT1;取表格地址MOVA,20H;取当前电梯值MOVCA,@A+DPTRMOVDPTR,#DATA8279;LED1显示当前楼层值MOVX@DPTR,AMOVA,#00HDISPLAY1:MOVX@DPTR,ADJNZR1,DISPLAY1;LED7-LED2灭RET;七段数码管的显示16b)采用串行口0方式来显示八段数码管的“U”或“D”,来模拟电梯的升降状态程序片段如下:DIS:MOVA,22H;存的“U”或“D”的值MOVSCON,#00HMOVSBUF,AJNBTI,$CLRTI;数据送显示RETc)LED的控制只需送数据LED即可,但键盘扫描的值为16进制,需转化成01H,02H,04H,08H,10H,20H,40H,80H来模拟1-8层的亮灯情况。这可采用查表来实现。17四、键盘扫描子程序所谓按查询方式工作的子程序,就是当引用该子程序的时候若用户按下了键盘上的按键就会获得一个“有效键值”,否则将获得一个“无效键值”,对于M行N列的键盘来说,可认为的规定有效键值的取值范围为0~M*N-1,无效键值的数值为M*N。此处给出该实验用到的键值及定义:1-8:对应的电梯楼层键。按下表示该楼层有请求0:运行键。电梯按下需要到达的楼层显示对应的LED,需按下此键才能运行到相应的楼层。9-F:可做为扩展功能的实现程序可参考《单片机实验书》的键盘管理18五、定时器1延时2S子程序定时器1采用模式1,每个100MS的中断一次,中断20次为2S。在子程序中2S到后电梯上升或下降1层,调显示子程序显示当前电梯值。中断子程序片段如下:TOSEV1:MOVTL1,#0B0HMOVTH1,#3CH;重装计数初值DJNZR2,LOOPMOVR2,#0A0H;重置循环次数MOVA,21HCJNEA,20H,JUDGE;电梯是否到达所请求层数LJMPLOOP19JUDGE:JCJUDGE1SETBFLAG;FLAG=1为上升INC20H;2S到电梯值加一LCALLXIANSHIMOV22H,#0C7H;数码管HL5显示“U”LCALLDISSJMPLOOPJUDGE1:CLRFLAG;FLAG=0为下降DEC20H;2S到电梯值减一LCALLXIANSHIMOV22H,#85H;数码管HL5显示“d”LCALLDISLOOP:RETI