88LED点阵屏模仿电梯运行的楼层显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
88LED点阵屏模仿电梯运行的楼层显示
本科课程设计(论文)
8×8 LED点阵屏模仿电梯运行的楼层显示
学院信息工程学院
专业测控技术与仪器
(光机电一体化方向)年级班别 2011级(1)班
学号
学生姓名
指导教师
2013年01 月 13日
摘要
伴随着我国现代化程度的提高,电梯成为高层建筑中的重要交通工具,它是高层建筑中安全、可靠、垂直上下的运载工具,对改善劳动条件、减轻劳动强度起到很大的作用。
同时也给人们的生活带来了便利,为我国现代化建设的加速发展提供了强大的保障。
电梯的应用范围很广,可用于宾馆、饭店、办公大楼、商场、娱乐场所,仓库以及居民住宅大楼等。
因此,在现代社会中电梯已成为人类必不可少的垂直运输交通工具。
利用单片机控制电梯有成本低,通用性强,灵活性大以及易于实现复杂控制等优点。
本课程设计采用了一种采用单片AT89C51芯片进行电梯控制系统的设计方法,主要阐述如何使用单片机进行编程来实现电子设计的方法,利用单片机编程实现功能,简洁而又多变的设计方法,缩短了研发周期,同时使电梯控制系统体积更小功能更强大。
本设计实现了电梯控制系统所需的一些基本功能,能通过数字按键选择楼层,点阵显示实时楼层数。
原理图采用proteus专业软件来设计。
关键词:单片机;电梯;系统;控制;C语言
目录
摘要 (1)
1 任务提出与方案论证 (3)
1.1设计任务及要求 (3)
1.2课题设计内容 (3)
1.3方案论证 (3)
2 总体设计 (4)
2.1设计原理及方法 (4)
3硬件设计元器件选择 (5)
3.1 AT89C51单片机 (5)
3.2 74LS245 (7)
3.3 LED点阵 (8)
4 模块设计 (9)
4.1单片机最小系统模块 (9)
4.2开关控制模块 (10)
4.3显示模块 (11)
4.4声光模块 (11)
4.5按键中断检测模块 (12)
4.6电源电路模块 (12)
4.7电路总图 (13)
5 软件设计 (14)
6 总结 (15)
附录A 程序清单 (16)
附录B 元器件目录表 (23)
参考文献 (24)
1 任务提出与方案论证
1.1课程设计要求
1、设计采用单片机控制8*8 LED点阵屏来模仿电梯运行的楼层显示装置。
2、单片机的Pl口的8只引脚接有8只按键开关Kl~K8,这8只按键开关K1~K8分别代表l楼~8楼。
如果某一楼层的按键按下,单片机控制的点阵屏将从当前位置向上或向下平滑滚动显示到指定楼层的位置。
3、在上述功能的基础上,向电路中添加LED指示灯和蜂呜器,使系统可以同时识别依次按下的多个按键,在到达指定位置后蜂鸣器发出短暂声音且LED闪烁片刻,数字继续滚动显示。
4、如果在待去的楼层的数字中,有的在当前运行的反方向,则数字先在当前方向运行完毕后,再依次按顺序前往反方向的数字位置。
1.2课题设计内容
本课题的主要任务是完成一个电梯系统的智能控制模块,即根据每个楼层不同顾客的按键要求,让电梯做出合理的判断,正确高效的指导电梯完成各项载客任务。
设计基于单片机的电梯智能控制系统的硬件电路与软件程序,给出硬件系统的电路原理图,对硬件电路与软件分别进行调试,得到调试成功的基于单
片机的电梯智能控制系统。
根据此任务,本课题需要研究的内容有:
1、根据系统的技术要求,进行系统硬件的总体方案设计;
2、学习单片机的相关知识,并且加以运用;
3、选择适当的芯片,并对其内部协议有所掌握,便于应用。
4、研究单片机C语言编程,并且规定电梯的工作规则,用C语言加以实现;
5、对软件和硬件进行调试,让其协调工作,完成指定任务。
1.3方案论证
本次设计的基本思想是采用AT89C51单片机作为核心,利用其丰富的I/O接口与外围电路配合进行控制。
按题目要求采用8*8点阵来实时显示电梯所在楼层。
由于是8层楼,采用8个独立键盘。
当电梯到达目的楼层时,LED灯亮起,蜂鸣器响,此时即可进、出乘客,然后电梯根据乘客的选择判断去哪一层,继续运行。
电梯的正常运行通过单片机的控制来实现。
2 总体设计
2.1设计原理及方法
根据层次化设计理论,该设计问题自顶向下可分为单片机最小系统模块、显示模块、开关控制模块、电机驱动模块、稳压模块,其系统框图如图2.1所示。
A T 89C 51
电源模块
上电复位
按键电路
显示模块
锁存器
图2.1 电梯控制系统框图
本次设计是采用键盘控制实现上下到指定楼层,通过稳压模块使电机转动带动电梯箱上下运动,到达指定楼层。
显示模块是显示此时的楼层以及要求到达的楼层。
电梯初始显示0。
单片机的Pl 口的8只引脚接有8只按键开关K1~K8,这8只按键开关K1~K8分别代表l 楼~8楼。
如果按下代表某一楼层的按键,单片机控制的点阵屏将从当前位置向上或向下平滑滚动显示到指定楼层的位置。
在上述功能的基础上,向电路中添加LED 指示灯和
蜂呜器,使系统可以同时识别依次按下的多个按键,在到达指定位置后蜂鸣器发出短暂声音且LED闪烁片刻,数字继续滚动显示。
例如,当前位置在l层时,用户依次按下6、5时,则数字分别向上滚动到5、6时暂停且LED闪烁片刻,同时蜂鸣器发出提示音。
如果在待去的楼层的数字中,有的在当前运行的反方向,则数字先在当前方向运行完毕后,再依次按顺序前往反方向的数字位置。
用P2口做8*8点阵的行选通,Pl口完成按键的读取及确认。
3.硬件电路器件选择
3.1 AT89C51单片机
AT89C51是一个低电压,高性能CMOS8位单片机带有4K字节的可反复擦写的程序存储器(PENROM)。
和128字节的存取数据存储器(RAM),这种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-51系列的单片机兼容。
片内含有8位中央处理器和闪烁存储单元,有较强的功能的AT89C51单片机能够被应用到控制领域中。
本设计采用AT89C51,它提供以下的功能标准:4K 字节闪烁存储器,128字节随机存取数据存储器,32个I/O口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内震荡器和时钟电路。
另外,AT89C51还可以进行0HZ的静态逻辑操作,并支持两种软件的节电模式。
闲散方式停止中央处理器的工作,能够允许随机存取数据存储器、定时/计数器、串行通信口及中断系统继续工作。
掉电方式保存
随机存取数据存储器中的内容,但震荡器停止工作并禁止其它所有部件的工作直到下一个复位。
引脚图如图2-7所示。
P101P112P123P134P145P156P167P17
8
RST 9P3010P3111P3212P3313P3414P3515P3616P37
17
XT AL2
18
XT AL119GND 20P2021P2122P2223P2324P2425P2526P2627P2728PSE N 29AL E 30EA
31
P07
32
P0633P0534P0435P0336P0237P0138P0039VC C 40
U1
AT 89C51
图3.1 AT89C51引脚
VCC :电源电压
GND :地
P0口:P0口是一组8位漏极开路双向I/O 口,即地址/数据总线复用口。
作为输出口时,每一个管脚都能够驱动8个TTL 电路。
当“1”被写入P0口时,每个管脚都能够作为高阻抗输入端。
P0口还能够在访问外部数据存储器或程序存储器时,转换地址和数据总线复用,并在这时激活内部的上拉电阻。
P0口在闪烁编程时,P0口接收指令,在程序校验时,输出指令,需要接电阻。
P1口:P1口一个带内部上拉电阻的8位双向I/O 口,P1的输出缓冲级可驱动4个TTL 电路。
对端口写“1”,通过内部的电阻把端口拉到高电平,此时可作为输入口。
因为内部有电阻,某个引脚被外部信号拉低时输出一个电流。
闪烁编程时和程序校验时,P1口接收低8位地址。
P2口:P2口是一个内部带有上拉电阻的8位双向I/O
口,P2的输出缓冲级可驱动4个TTL电路。
对端口写“1”,通过内部的电阻把端口拉到高电平,此时,可作为输入口。
因为内部有电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器时,P2口线上的内容在整个运行期间不变。
闪烁编程或校验时,P2口接收高位地址和其它控制信号。
P3口:P3口是一组带有内部电阻的8位双向I/O口,P3口输出缓冲故可驱动4个TTL电路。
对P3口写如“1”时,它们被内部电阻拉到高电平并可作为输入端时,被外部拉低的P3口将用电阻输出电流。
P3口除了作为一般的I/O口外,更重要的用途是它的第二
功能,如下表所示:
端口引
脚第二功能
P3.0 RXD
P3.1 TXD
P3.2 INT0
P3.3 INT1
P3.4 T0
P3.5 T1
P3.6 WR
P3.7 RD
表2-1
P3口还接收一些用于闪烁存储器编程和程序校验的控制信号。
RST:复位输入。
当震荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。
ALE/ :当访问外部程序存储器或数据存储器时,ALE 输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE以时钟震荡频率的1/16输出固定的正脉冲信号,因此它可对输出时钟或用于定时目的。
要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲。
如果必要,可对特殊寄存器区中的8EH 单元的D0位置禁止ALE操作。
这个位置后只有一条MOVX和MOVC指令ALE才会被应用。
此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE无
效。
PSEN :程序储存允许输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN 有效,即输出两个脉冲。
在此期间,当访问外部数据存储器时,这两次有效的PSEN 信号不出现。
EA/VPP :外部访问允许。
欲使中央处理器仅访问外部程序存储器,EA 端必须保持低电平。
需要注意的是:如果加密位LBI 被编程,复位时内部会锁存EA 端状态。
如EA 端为高电平,CPU 则执行内部程序存储器中的指令。
闪烁存储器编程时,该引脚加上+12V 的编程允许电压VPP ,当然这必须是该器件是使用12V 编程电压VPP 。
XTAL1:片内振荡器反相放大器和时钟发生线路的输入端。
使用片内振荡器时,连接外部石英晶体和微调电容。
XTAL2:片内振荡器反相放大器的输出端。
当使用片内振荡器时,外接石英晶体和微调电容。
3.2 74LS245
A02A13A24A35A46A57A68A79B018B117B216B315B414B513B612B711E 19DIR 1
VC C 20GND
10
U374LS245
图3.2 74LS245
74LS245是我们常用的芯片,用来驱动LED 或者其他的设备,它是8路相同三态双向总线收发器,可双向传输数据。
74LS245还具有双向三态功能,既可以输出,也
可以输入数据。
当8051单片机的P0口总线负载达到或超过P0口最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)
DIR=“1”,信号由A向B传输;(发送)当CE 为高电平时,A、B均为高组态。
由于P2口始终输出地址的高8位,接口时74LS245d 三态控制端1G和2G接地,P2口与驱动器输入线对应相连。
P0口与74LS245输入端相连,E端接地,保证数据线畅通。
8051的/RD和/PSEN 相与后接DIR,使得RD且PSEN有效时,74LS245输入(P0.1←D1),其他时间处于输出(P01→D1)。
3.3.LED点阵
图3.3 LED点阵外观
显示屏是由发光二极管行列组成的LED点阵模块组成显示屏体。
本设计中选择8*8的点阵是由64个发光二极管按规律组成的。
如图2-10。
h1
h2
h3
h4
h5
h6
h7
h8
IO
L1L2L3L4L5L6L7L8
图3.4 LED点阵内部结构
如图2-8所示的发光二极管,行接高电平,列接低电平,发光二极管导通发光。
8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。
4 模块设计
4.1单片机最小系统模块
图4.1单片机最小系统
单片机最小系统包括主芯片,复位电路和晶振脉冲产生电路。
X1为12MHz晶振,与30Pf电容并联,产生1us的脉冲信号作为单片机的“心脏”部分。
复位电路是开关与10uf电容并联组成的上电自动复位电路,在RST端为高电平时单片机清零,也即开关按下会产生清零信号。
RP1为排阻,作为P0端的上拉电阻,接此原因是P0端口是由OC门组成。
U1为数据输入端口,通过电脑编程能将程序通过此接口烧录入单片机中。
8位CPU·4kbytes,程序存储器(ROM) (52为8K),128bytes的数据存储器(RAM) (52有256bytes的RAM),32条I/O口线·111条指令,大部分为单字节指令,21个专用寄存器,2个可编程定时/计数器,5个中断源,2个优先级(52有6个),一个全双工串行通信口,外部数据存储器寻址空间为64kB,外部程序存储器寻址空间为64kB,逻辑操作位寻址功能,双列直插40PinDIP封装,单一+5V电源供电。
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M。
4.2开关控制模块
图4.2 开关控制模块
单片机的Pl口的8只引脚接有8只按键开关K1~K8,这8只按键开关K1~K8分别代表l楼~8楼。
如果按下代表某一楼层的按键,单片机控制的点阵屏将从当前位置向上或向下平滑滚动显示到指定楼层的位置,系
统检测按键低电平识别依次按下的多个按键。
图4.3显示模块
8X8点阵,它共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管
就亮;p2进行列扫描,p0输入数据.
图4.4
P3.0、P3.1口分别控制电路中LED指示灯和蜂呜器,使系统可以同时识别依次按下的多个按键,在到达指定位置后蜂鸣器发出短暂声音且LED闪烁片刻,数字
继续滚动显示。
4.5按键中断检测模块
图4.5
按键中断检测模块,由于单片机检测低电平,有8个按键需要检测,采用2个四输入端与门和一个二输入端与门搭配,使之达到检测是否有按键按下目的。
4.6 电源电路模块
电源电路如图2-6所示。
整个系统采用的电源电压只需+5V 电压,将交流电经变压器变换为12V 交流电,再用整流桥得到8.5V 左右的直流电,采用不可调的3端稳压器件LM7805将电源稳定在5V 直流输出。
1
2
3
4
D1
T
104
25V 470uf
16V 470uf
104
R 510Ω
Vin
1
G N D
2
Vout
3
7805
~220V
~12V
图4.6 电源电路4.7电路总图
图4.7 电路总图
5. 软件设计
Y N
Y N
N
N N
开始 创建变主程序 开T0中初始化 数组大计数
进入T0
有无点阵扫描
进入外存键判断上升进入是否点阵上是否到达指定蜂鸣器
有无上升下降
点阵下
Y Y Y Y
图5.1 电梯智能控制功能实现流程图
详细程序见附录。
6 总结
本课程设计了实现单片机控制下电梯智能控制系统的设计方案。
由于条件的限制,没有做成真正的电梯。
但做成的电梯智能控制系统的硬件电路已能演示。
可以按照乘客的要求,将乘客送到要去的目的层。
但是,电梯还有很多的扩展的空间并未实现,比如电梯自动语音报站系统的设计,楼层监控系统,节能设计以及其它更多的服务。
设计的核心内容就是利用单片机C51的编程来实现控制外围各电路的运行。
通过本次设计,我熟练掌握了程控系统设计的一般步骤,熟悉了编程软件的用法,并对编程能力起到了一定的提高作用。
本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
在此次设计中,我们得到以下体会:
一、在这次点阵设计的过程让我进一步熟悉KEIL及Proteus的使用。
二、通过这次点阵设计,重新复习并进一步学习了MCS-52优点,明确了研究目标。
三、在后的设计中,既要想到电路器件的联合使用,又要灵活变通,举一反三。
通过本次设计,我收获颇丰,本人的知识领域得到进一步扩展,专业技能得到进一步提高,同时提高了分析和解决实际问题的综合能力。
另外,也培养了自己严肃认真的科学态度和严谨求实的作风。
由于本人水平有限,本次设计还存在一些不足之处,请评阅与答辩的各位老师批评指正。
附录A 程序清单
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Table_of_Digits[]= //点阵显示数组
{
0x00,0x3C,0x24,0x24,0x3C,0x24,0x24,0x3C,
//8
0x00,0x3C,0x04,0x04,0x04,0x04,0x04,0x00,
//7
0x00,0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,
//6
0x00,0x3C,0x20,0x20,0x3C,0x04,0x3C,0x00,
//5
0x00,0x0C,0x14,0x24,0x7E,0x04,0x04,0x00,
//4
0x00,0x3C,0x04,0x3C,0x04,0x04,0x3C,0x00,
//3
0x00,0x3C,0x04,0x04,0x3C,0x20,0x3C,0x00,
//2
0x00,0x08,0x38,0x08,0x08,0x08,0x3E,0x00,
//1
0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00
//0
};
uchar i=0,t=0,j=0,a=0; //i-行扫描,t-延迟
char offset=0;
static int Current_floor=0,Pressed_key_up=0,Pressed_key_dow n=0,b=0,c=0,max=0,min=0; //Current_floor-当前楼层,Pressed_key_up-上升请求,Pressed_key_down-下降请求
int flag;
int floor_up[8]={9,9,9,9,9,9,9,9}; //上升请求存放数组
int floor_down[8]={0,0,0,0,0,0,0,0}; //下降请求存放数组
sbit KEY1=P1^0; //定义P1口按键
sbit KEY2=P1^1;
sbit KEY3=P1^2;
sbit KEY4=P1^3;
sbit KEY5=P1^4;
sbit KEY6=P1^5;
sbit KEY7=P1^6;
sbit KEY8=P1^7;
sbit LED=P3^7; //定义LED跟蜂鸣器
sbit SPEAK=P3^6;
void Key_up_comparison();
//函数声明,把floor_up[]按从小到大排列
void Key_down_comparison();
//把floor_down[]按从大到小排列
void max_min_comparison(); //比较出floor_up[]的最大值(max)和floor_down[]的最小值(min)
//
//主函数
//
void main()
{
P2=0x80; //初始化
LED=0;
SPEAK=0;
TMOD=0x01; //T0方式
TH0=(-6000)/256;
//6ms定时
TL0=(-6000)%256;
IT0=1;
IE=0x83;
TR0=1;
ET0=1;
Pressed_key_up=floor_up[0];
while(1) //循环排列
{
Key_up_comparison();
Key_down_comparison();
max_min_comparison();
}
}
void LED_Screen_Display() interrupt 1
//进入中断,显示楼层
{
TH0=(-6000)/256;
//6ms
TL0=(-6000)%256;
P0=0xff;
Pressed_key_up=floor_up[0];
Pressed_key_down=floor_down[0];
if(flag==1) //上升标志
{
if(Pressed_key_up!=9)
//有上升请求
{
if(Pressed_key_up>Current_floor)
//点阵平滑上升显示
{
P0=~Table_of_Digits[(8-Current_floor)*8+i+offset];
P2=_crol_(P2,1);
if(++i==8)
{
i=0;
P2=0x80;
}
if(++t==25) //延迟
{
t=0;
if (--offset == -8)
{
offset = 0;
++Current_floor;
}
}
}
else if(Pressed_key_up<Current_floor) ;
else if(Pressed_key_up==Current_floor)
//到达请求楼层
{
P0=~Table_of_Digits[(8-Current_floor)*8+i];
P2=_crol_(P2,1);
if(++i==8)
{i=0;P2=0x80;}
LED=~LED;SPEAK=~SPEAK;
//蜂鸣器响,LED闪烁
if(++t==250)
{
t=0;
if(Current_floor==Pressed_key_up)
Current_floor=Pressed_key_up;
if(Current_floor==max)
{
flag=0;
}
floor_up[0]=9;
}
}
}
}
else if(Pressed_key_up==9) //无请求,扫描显示当前楼层
{
P0=~Table_of_Digits[(8-Current_floor)*8+i];
P2=_crol_(P2,1);
if(++i==8)
{
i=0;
P2=0x80;
if(++t==250)
t=0;
}
}
else if(flag==0) //下降标志
{
if(Pressed_key_down!=0) //有下降请求
{
if(Pressed_key_down>Current_floor);
else if(Pressed_key_down<Current_floor)
//点阵平滑下降显示
{
P0=~Table_of_Digits[(8-Current_floor)*8+i+offset] ;
P2=_crol_(P2,1);
if(++i==8)
{
i=0;
P2=0x80;
}
if(++t==25)
{
t=0;
if (++offset == 8)
{
offset = 0;
--Current_floor;
}
}
}
else if(Pressed_key_down==Current_floor)
//到达请求楼层
{
P0=~Table_of_Digits[(8-Current_floor)*8+i];
P2=_crol_(P2,1);
if(++i==8)
{i=0;P2=0x80;}
LED=~LED;SPEAK=~SPEAK; //蜂鸣器响,LED闪烁
if(++t==250)
{
t=0;
if(Current_floor==Pressed_key_down)
{
Current_floor=Pressed_key_down;
if(Current_floor==min)
{
flag=1;
}
floor_down[0]=0;
}
}
}
}
else if(Pressed_key_down==0) //无请求,扫描显示当前楼层
{
P0=~Table_of_Digits[(8-Current_floor)*8+i];
P2=_crol_(P2,1);
if(++i==8)
{
i=0;
P2=0x80;
}
if(++t==250)
t=0;
}
}
}
void Key_detection() interrupt 0 //按下按键,进入外部中断,将上升请求跟下降请求放入数组,并判断标志flag
{
P0=0xff;
P2=0x80;
i=0; //防抖
if(KEY1==0) j=8;
else if(KEY2==0) j=7; //判断请求
else if(KEY3==0) j=6;
else if(KEY4==0) j=5;
else if(KEY5==0) j=4;
else if(KEY6==0) j=3;
else if(KEY7==0) j=2;
else if(KEY8==0) j=1;
if(j>Current_floor) //将上升请求放入数组
{
if(floor_down[0]==0)
flag=1;
floor_up[b++]=j;
if(b==8)
b=0;
}
else if(j<Current_floor) //将下降请求放入数组
{
if(floor_up[0]==9)
flag=0;
floor_down[c++]=j;
if(c==8)
c=0;
}
else if(j==Current_floor);
}
void Key_up_comparison() //把floor_up[]按从小到大排列
{
int a1,a2,a3=0;
for(a2=0;a2<7;a2++)
{
for(a1=0;a1<7;++a1)
{
if(floor_up[a1]>floor_up[a1+1])
{
a3=floor_up[a1];
floor_up[a1]=floor_up[a1+1];
floor_up[a1+1]=a3;
}
if(floor_up[a1]==floor_up[a1+1])
floor_up[a1+1]=9;
}
}
}
void Key_down_comparison() //把floor_down[]按从大到小排列
{
int a1,a2,a3=0;
for(a2=0;a2<7;a2++)
{
for(a1=0;a1<7;++a1)
{
if(floor_down[a1]<floor_down[a1+1])
{
a3=floor_down[a1];
floor_down[a1]=floor_down[a1+1];
floor_down[a1+1]=a3;
}
if(floor_down[a1]==floor_down[a1+1])
floor_down[a1+1]=0;
}
}
}
void max_min_comparison() //求出floor_up[]的最大(max)和floor_down[]的最小(min)
{
int j;
for(j=1;j<=7;j++)
if(floor_down[j]==0);
else if(floor_down[j+1]==0)
min=floor_down[j];
else if(floor_down[j]>floor_down[j+1])
min=floor_down[j+1];
else min=floor_down[j];
for(j=1;j<=7;j++)
if(floor_up[j]==9);
else if(floor_up[j+1]==9)
max=floor_up[j];
else if(floor_up[j]<floor_up[j+1])
max=floor_up[j+1];
else max=floor_up[j];
}
附录B元器件目录表
序号
型号(名称)数量
作用
1 AT89C51 1 单片机
2 74LS245 1 锁存器
3 74LS21 2 判断按键
4 74LS09 1 判断按键
5 10kΩ排阻 1 上拉电阻
6 8*8LED点阵显示器 1 显示数字
7 按钮9 复位按钮等
8 22pF瓷片电容 2 晶振电路用
9 10μF电解电容 1 上电复位
10 11.0592MHz 1 晶振
11 蜂鸣器 1 提示
12 LED 1 提示
13 47k欧电阻 1
14 100欧电阻 2
15 三极管 1 驱动
参考文献
[1] 李朝青.单片机通讯技术与工程实践.北京:航空航天大学出版,2007.2
[2] 李群芳.单片机原理接口与应用.北京:清华大学出版社,2005.6
[3] 朱清慧,张凤蕊,翟天嵩,王志奎.Proteus教程——电子线路设计、制作与仿真[M]. 北京:清华大学出版社,2008.
[4] 谢自美.电子线路设计.武汉:华中科技大学出版社,2000.5
[5]康华光,陈大钦. 电子技术基础—模拟部分(第五版)[M]. 北京:高等教育出版社,2005
[6]郭天祥.51单片机C语言教程[M].北京:电子工业出版社.2009.1
[7] 刘欣铭,张广斌.LED显示屏技术综述[J].黑龙江电力,2003, 25(4):294-296.
[8] 苏凯,刘国庆,陈国平.MCS-51系列单片机系统原理与设计[J].北京:冶金工业出版社,2003。