1、中国海洋大学计算机科学与技术系实验报告(6)姓名:徐云哲 学号:15020031088 同组者:张石胜 课程:微型计算机实验设计 教师: 徐慧敏 实验题目:设计六 电梯控制系统 1. 设计要求设计十五层建筑电梯的控制系统。 电梯外,每层设有上升键和下降键,并用两位 LED 显示当前电梯所在的层数。 电梯内:1. 发光二极管显示上升键和下降键,并用两位 led 显示当前电梯所在的层数。2. 设计 4*4 键盘,供乘客选择所要到达的层数。3. 用两个控制开关控制电梯门,同时用红绿 LED 指示当前电梯门的状态。 电梯再运行的过程中能随时检测电梯外输入的信号,当方向一致时,电梯可以及时停靠,当方向不
2、一致时不停靠。 2. 设计指导1) 可以利用可编程并行接口芯片 8255A 数据端口多的特点,接受数据和控制电梯。2) 显示可以用主机屏幕3. 实验程序代码展示#include#include#include#include#include “ApiExusb.h“#pragma comment(lib,“ApiExusb.lib“)using namespace std;char led17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;/*上面为从 0-f 对应的段码
3、表*/vector layer;int dire=0,i=1,flag=-1,open=0,wd=0;void num_out(int data)PortWriteByte(0x28b,0x81);if(data9)PortWriteByte(0x289,leddata-10);PortWriteByte(0x288,wd+32);Sleep(1);PortWriteByte(0x289,led1);PortWriteByte(0x288,wd+64);Sleep(1);elsePortWriteByte(0x289,leddata);PortWriteByte(0x288,wd+32);Sl
4、eep(1);PortWriteByte(0x289,0x00);PortWriteByte(0x288,wd+64);Sleep(1);void lift()int wd;if(dire) wd=4;else wd=8;PortWriteByte(0x288,wd);i=(i+1)%3000;int k;if(i1600) k=i/100;else k=(3100-i)/100;num_out(k);if(i=1500 | i=0) dire=(dire+1)%2;Sleep(1);for(int r=0;rlayer.size();r+)if(layerr=k)if(layerr=k)la
5、yer.erase(layer.begin()+r);int t=500;while(t-)num_out(k);PortWriteByte(0x288,wd+16);/Sleep(1);PortWriteByte(0x288,wd);/Sleep(1);open=0;return;if(open)int t=500;while(t-)num_out(k);PortWriteByte(0x288,wd+16);/Sleep(1);PortWriteByte(0x288,wd);/Sleep(1);open=0;void main()byte data;byte i,j;printf(“Pres
6、s any key to begin!nn“);getch();if(!Startup() /*打开设备*/printf(“ERROR: Open Device Error!n“);return;printf(“press any key to exit“);j=16;while(!kbhit()PortWriteByte(0x28b,0x81); /*设置 8255 的 A 口 C 口均为输出*/PortReadByte(0x28a,i=data;if (i!=0x0f)i=data;/ Sleep(50);PortWriteByte(0x28b,0x88);/PortWriteByte(0
7、x28a,0xf0);PortReadByte(0x28a,i=i|data;if (i=0x77) j=0;else if(i=0x7b) j=1;else if(i=0x7d) j=2;else if(i=0x7e) j=3;else if(i=0xb7) j=4;else if(i=0xbb) j=5;else if(i=0xbd) j=6;else if(i=0xbe) j=7;else if(i=0xd7) j=8;else if(i=0xdb) j=9;else if(i=0xdd) j=10;else if(i=0xde) j=11;else if(i=0xe7) j=12;el
8、se if(i=0xeb) j=13;else if(i=0xed) j=14;else if(i=0xee) j=15;else; if(j16)int r;for(r=0;rlayer.size();r+) if(layerr=j) break;if(r=layer.size() layer.push_back(j);j=16;PortWriteByte(0x28b,0x90); /*设置 8255 的 A 口 C 口均为输出*/PortReadByte(0x288,if(data%3=1 else if(data%3=2 PortWriteByte(0x28b,0x81);lift();
9、Cleanup(); /*关闭设备*/4. 实验硬件接线及截图行 3列 0PC7PC0数码管 dpaPB7PB0PA0时钟PA1单脉冲PA2L6PA3L7PA4L5PA5数码管 S0PA6数码管 S1数码管 S2GND数码管 S3GND5.实验体会本次设计完成并实现了模拟电梯运行,课设期间遇到了许多问题,通过网上查资料并分析,问题得到了解决。通过本次课程设计,我对所学的微机原理知识有了更深的理解,对 8255,8254 等芯片的功能和使用方法能够基本掌握,对程序的调试也有了进一步的掌握。本次设计使我的硬件编程能力有了显著的提高,并且通过动手实践,培养了我对硬件编程的兴趣,提高了分析问题,解决问题的能力。写程序的过程中要严谨,有耐心,慢慢加深对微机原理的理解与掌握。在课余时间要多写程序,熟练掌握在调试程序过程中所遇到的常见错误,以后尽量避免出现这样的错误。通过这次课程设计,我受益匪浅,我深深认识到,要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中经历失败,从失败中总结经验,然后再不断地尝试,才能获得成功。我也意识到要做一名 IT 精英,背后的努力与汗水是必不可少的,我会认真学习专业课程,多做程序,多调试,来理解计算机语言,不断提高自己,成为社会所需要的人。