本项目设计了一套基于单片机的电梯模拟系统,通过硬件和软件结合的方式实现电梯运行状态的仿真。该系统能够模拟不同场景下的电梯操作流程,并提供友好的人机交互界面,适用于教学、培训及研究领域。
利用Proteus进行单片机电梯仿真的程序如下:
```
ORG 0000H
SJMP MAIN
ORG 0003H
SJMP INT0
ORG 0030H
MAIN:
CLR IT0 ; 关闭外部中断IT0的触发方式为低电平有效
SETB EX0 ; 开启外部中断INT0功能
SETB EA ; 允许全局中断
MOV 40H,#1 ; 设置初始显示楼层号为1
MOV R0,#1 ; 当前选择的楼层数字
LOOP: ACALL DISPLAY1
SJMP LOOP ; 不断循环调用DISPLAY1子程序进行楼层数字刷新和显示
INT0:
CLR EA ; 关闭全局中断,防止其他中断干扰
PUSH PSW ; 保护现场状态寄存器PSW
PUSH ACC ; 保存累加器ACC的值
JUDGE_BUTTON:
JNB P1.0,S1 ; 判断P1口第0位是否被按下(对应楼层按钮)
JNB P1.1,S2
JNB P1.2,S3
JNB P1.3,S4
JNB P1.4,S5
JNB P1.5,S6
JNB P1.6,S7
JNB P1.7,S8
RETUP: POP ACC ; 恢复累加器ACC的值
POP PSW ; 还原现场状态寄存器PSW
SETB EA ; 重新开启全局中断
RETI ; 结束中断返回主程序
S1: MOV R0,#1 ; 如果P1.0被按下,设置R0为1
ACALL DISPLAY ; 调用显示子程序
AJMP RETUP
S2: MOV R0,#2
ACALL DISPLAY
AJMP RETUP
S3: MOV R0,#3
ACALL DISPLAY
AJMP RETUP
S4: MOV R0,#4
ACALL DISPLAY
AJMP RETUP
S5: MOV R0,#5
ACALL DISPLAY
AJMP RETUP
S6: MOV R0,#6
ACALL DISPLAY
AJMP RETUP
S7: MOV R0,#7
ACALL DISPLAY
AJMP RETUP
S8: MOV R0,#8
ACALL DISPLAY
AJMP RETUP
DISPLAY:
MOV 30H,40H
MOV 40H,R0
MOV R0,30H
DISPLAY1:
MOV P2,#0FH ; 设置P2口为输出模式
CLR P3.0 ; 灯灭,表示当前楼层未选中
CLR P3.1 ;
LOOP_TAB:
MOV A,R0 ; 将R0的值传给A寄存器
MOV 42H,A ; R0中的值保存到42H单元
MOVC A,@A+DPTR ; 根据当前楼层号从表格中取出对应的段码数据
MOV P2,A ; 将段码数据输出给P2口显示
SETB P3.1 ; 点亮LED,表示选中此楼层数字
CALL DELAY ; 延时让数字稳定显示一段时间
CLR P3.1
UPDATE_FLOOR:
MOV A,42H ; 比较当前楼层号和目标楼层号是否一致
CJNE A,40H,FLOOR_UPDATE ; 如果不相等,则更新R0为下一个楼层数字
RET ; 若已经到达目标楼层则直接返回
FLOOR_UPDATE:
JNC FLOOR_UP ; 判断当前值是否小于目标值,若小则递增
INC R0
SJMP LOOP_TAB ; 循环刷新显示直到目标楼层号一致
FLOOR_DOWN:
DEC R0
SJMP LOOP_TAB
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ; 楼层显示段码表
DELAY:
MOV R7,#250 ; 设定延时循环次数
DEL1:
MOV R6,#250
DEL2:
MOV R5,#4
DEL3: DJNZ R5,DEL3 ;
DJNZ R6,DEL