1、一课程设计题目 基于 51 单片机的三层电梯控制 二课程设计的目的 1 学习 P 口的使用方法 2 掌握如何利用单片机控制 LED 动态显示 3 掌握动态扫描显示的基本原理,动态显示的控制电路及控制程序 4 掌握微机控制系统的键盘组成及工作原理 5 认识微机控制系统的键盘设计,了解单片机键盘的特点和应用 三设计要求 设计一个自动电梯模拟升降控制系统,通过乘客的自行按键达到电梯的升降功能。结合硬件与软件对应。端口 P0.0-0.6 用来控制 LED 灯 的亮与灭,其中从低位到高位分别为一层 灯 ,二层 灯 ,三层 灯 (前述三个信号为电梯内请求信 号,乘客在电梯内部 方可置为有效 ),一层上 灯
2、 ,二层上 灯 ,二层下 灯 ,三层下 灯 (上述四个信号为电梯外部信号,乘客在电梯外部方可置为有效) P2 口与键盘对应连接,数码管采用串行输入方式, 键盘从低位到高位分别为一层按键,二层按键,三层按键,一层上升按键,二层上升按键,二层下降按键,三层下降按键 .P1.0与数码管的时钟输入端相连, P1.1 与数码管的串行口相连 ,用来显示电梯的上升下降和当前所在楼层,电梯门是否开启三种状态, p 表示上升, d 表示下降, 1,2, 3 表示当前楼层,如果数码管闪烁,表示电梯门开启,反之则关断。 四控制 系统的总体设计方案 微型计算机的出现使计算机在逻辑处理和工业控制等方面的非凡能力得到了更
3、好的体现。尤其是其非凡的嵌入能力对于满足嵌入式应用需求具有独特的优势。 随着城市建设的不断发展,楼群建筑不断增多,电梯在当今社会的生活中有着广泛的应用。电梯作为楼群建筑中垂直运行的交通工具已与人们的日常生活密不可分。 实际上电梯是根据外部呼叫信号 (呼梯信号 )以及自身控制规律等运行的,而呼叫是随机的,电梯实际上是一个人机交互式的控制系统,单纯用顺序控制或逻辑控制 是不能满足控制要求的,因此,大部分电梯控制系统都采用随机逻辑 方式控制。 在目前广泛使用的电梯控制系统中,绝大多数为继电器控制型,所有的逻辑及控制关系完全由诸多继电器互相配合来完成,该控制系统的缺点是:( 1)随着楼层的 增高,使用
4、继电器的数量越来越多,造价和体积也越来越大;( 2)继电器这种触点式的电控元器件不宜长时间频繁工作,因而采用在电梯系统当中常发生触电表面 烧结、控制失灵的故障。 因此 我们设计一个 3 层自动电梯模拟升降控制系统,通过乘客的自行按键达到升降功能。 采用单片机作为控制核心进行仿真。 本次设计是应用 AT89C51 芯片进行设计制作的模拟电梯控制系统,通过乘客 的按键达到对电梯升降的控制,并且模拟电梯的运行状态。 在设计方案中,通过对各个 P 口的合理安排和统一协调,通过按键、和 LED数码管来实现对设计设计方案的仿真演示。另外在实验程序中通过对不同按键键码在功能上的分配,在按键按下之后使 CPU
5、 做相应的工作,即 LED 数码管显示与之相应的楼层和使彩灯显示相应的电梯状态。最后,结合 PCB 板的实际接线情况进行编程。使实验顺利仿真。 五控制系统的硬件系统设计 5.1.AT89C51 单片机介绍 微型计算机系统的硬件部分通常由五部分组成:中央处理器 CPU 、数据存储器RAM、程序 存储器 ROM、定时 /计数器、 I/O 接口。 MCS-51 单片机内部的总体硬件结构: 1、中央处理单元 CPU( 8 位) 用于数据处理、位操作(位测试、置位、复位)。 2、只读存储器 ROM( 4KB或 8KB) 用于永久性存储应用程序,掩膜 ROM、 EPROM、 EEPROM。 3、随机存取存
6、取器 RAM( 128B 或 256B) 用于程序运行中存储工作变量和数据。 4、并行输入 /输出口 I / O( 32 线) 4 个 8 位并行 I/O 口 P0、 P1、 P2、 P3 口用作系统总线、扩展外存、 I / O 接口芯片。 5、串行输入 /输出口 UART (二线) 1 个全双工的异步串行口;用于串行通信。 6、定时 /计数器 T( 16 位增量可编程) 2 个或三个 16 位定时器 /计数器;它与 CPU 之间各自独立工作,当它计数满时向 CPU 中断。 7、时钟电路 fosc 振荡频率 fosc 在 1.212Mhz; 分为内部振荡器、外接振荡电路。 8、中断系统 5 源
7、中断、 2 个中断优先级; ,可编程进行控制。 5.2硬件系统原理框图 AT89C51单片机键盘 彩灯控制 Led 数码管 #include void Zero(); void Delay_ms(unsigned int Time); void Display(unsigned int n,unsigned char a); void Flash(unsigned int Time); void KBScan(); void dl_ms(); void Destination(); void Up(); void Down(); unsigned char code TAB38=0,0,0,0
8、,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1;/*楼层数码管显示矩阵 */ /P2 与查询式键盘硬件相连 sbit P2_0=P20; sbit P2_1=P21; sbit P2_2=P22; sbit P2_3=P23; sbit P2_4=P24; sbit P2_5=P25; sbit P2_6=P26; sbit P2_7=P27; /P0 与 LED 灯硬件相连 sbit P0_0=P00; sbit P0_1=P01; sbit P0_2=P02; sbit P0_3=P03; sbit P0_4=P04; sbit P0_5=P05; sbi
9、t P0_6=P06; sbit P0_7=P07; sbit P1_0 = P10; /*用于产生时钟信号 */ sbit P1_1 = P11; /*用于产生串行输入信号 (显示 or 清零 )*/ unsigned int lift=1; /*电梯所在楼层 */ unsigned int status=1; /*电梯上行为 1, 下 行为 0*/ unsigned char request3=0,0,0; /*13 楼有无请求 , 有请求为 1*/ unsigned char dst=1; /*电梯的目的楼层 */ /清零程序 void Zero() unsigned char k; P
10、1_1=0; P1_0=0; for(k=0;k40;k+) dl_ms(); P1_0=1; dl_ms(); P1_0=0; /延 时程序,以毫秒为单位,用软件计时,输入的参数 void Delay_ms(unsigned int Time) unsigned int i=0,j=0; for(i=0;iTime;+i) KBScan(); for(j=0;j125;+j); /显示某一楼层 void Display(unsigned int n,unsigned char a) unsigned char k; unsigned char b=0,0,0,0,0,0,0,0; if(a=
11、1) b7=1;b6=1;b5=0;b4=0;b3=1;b2=1;b1=1;b0=0; else if(a=0) b7=0;b6=1;b5=1;b4=1;b3=1;b2=0;b1=1;b0=0; Zero(); P1_0=0; for(k=0;k8;k+) KBScan(); P1_1=bk; dl_ms(); P1_0=1; dl_ms(); P1_0=0; P1_0=0; for(k=0;k8;k+) KBScan(); P1_1=TABn-1k; dl_ms(); P1_0=1; dl_ms(); P1_0=0; /闪烁显示到达楼层 void Flash(unsigned int Time) unsigned char i; for(i=0;iTime;i+) Zero(); Delay_ms(1000); KBScan(); Display(lift,status); Delay_ms(1000); KBScan(); Zero(); Delay_ms(1000); KBScan();