银行排队叫号系统设计实验报告.docx
《银行排队叫号系统设计实验报告.docx》由会员分享,可在线阅读,更多相关《银行排队叫号系统设计实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
银行排队叫号系统设计实验报告
2011年至2012年第一学期
《银行排队叫号系统设计》课程设计
班级1006402
指导教师涂立、李旎
学生人数3
设计份数1
2011年12月23日
银行排队叫号系统设计报告
一.设计时间
2011年12月19日-----12月23日
二.设计地点
湖南城市学院实验楼计算机机房
三.设计目的
1.进一步熟悉和掌握单片机的结构及工作原理。
2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
3.通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,详细使用Protel软件绘制原理图的过程。
4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
四.实验成员及分工
五.指导老师
涂立副教授、李旎讲师.
六.设计课题
设计一个银行排队叫号系统。
理由:
1、系统原理容易理解,更贴近我们的生活。
2、怎个系统简洁明了,适于初学者。
3、能提高我们的综合应用能力。
七.基本思路及关键问题的解决方法
用八个二极管表示客户取号的号码和营业员准备给那位客户办理业务的号码,用二进制表示,亮的二极管表示0,灭的二极管表示为1。
开关KEY为客户取号码是所用,KEY闭合时八个二极管的亮灭顺序就是客户的号码。
开关KEY1,KEY2,KEY3,KEY4是分别在四个营业窗口,其中任意一个按下,八个二极管的亮灭会显示一个号码,此号码对应要办理业务客户的号码,与此同时蜂鸣器也会提醒客户。
八.算法及流程图
算法:
程序利用循环结构检测整个系统中的客户端和叫号端是否有按键被按下,如果检测到有按下的信号,首先判断按下按键的端口的类型,然后相应的计数变量加一,并把计数变量的信息以二进制的形式传送到相应的端口;如果没检测到按下信号,程序则跳入下一个循环继续检测按键信息。
表1元件清单
元件名称
规格与型号
数量
芯片
晶振
发光二级管
电容
电源
按键
蜂鸣器
导线
P87C52X2BN
11.0592MHZ
LED
10uf、30pf
5V
非自锁式
1
1
8
3
1
8
1
若干
图1.银行排队叫号系统原理图
图2.银行排队叫号系统流程图
九、调试过程中出现的问题及相应解决办法
1.开打keil软件,建立一个新工程单击【Project】在下拉菜单中找到【Newproject...】选项,如图3所示
图3.新建工程
2.选择工程要保存的路径,并且输入工程文件名。
Keil的一个工程里通常含有很多小文件,为了方便管理,一般将一个工程放在一个独立的文件夹下,比如保存到课程设计文件夹,工程文件的名字为part,如图4所示
图4.填写工程名程
单击保存后会弹出一个对话框,要求选择单片机的型号,可以根据使用的单片机来选择。
KeilC51几乎支持所有的51内核的单片机,在这里选择Atmel的AT89C52,如图5选择后单击保存。
图5.选择工程控制器型号
3.完成上一步骤后,窗口界面如图6所示
图6.完成工程创建
到此为止,还没有建立好一个完整的工程,虽然工程名有了,但工程当中还没有任何文件及代码,接下来的就是添加文件及代码。
4.单击【File】菜单中的【new】菜单项,或单击界面上的快捷键图标
。
如图7
图7.工程界面
新建文件后的窗口界面如图8所示
图8新建文件
此时光标在编辑窗口中闪烁,可以输入用户的应用程序,但此时这个新建文件与刚刚建立的工程还没有直接的联系,单击图标
,窗口界面如图9所示
图9填写文件名称
输入要保存的文件名,同时必须输入正确的扩展名(如果用C语言编写的程序,则扩展名必须是.c;如果用汇编语言编写的程序,则扩展名必须是.asm).这里的文件名不一定要和工程名相同,可以随意填写文件名,然后单击【保存】按钮。
5.回到编辑界面,单击【Target1】前面的“+”号,然后在【SourceGroup1】单击右键,弹出如图10所示的菜单
、图10添加程序文件到工程
然后选择【AddFilestoGroupSourceGroup1】菜单项弹出对话框图11
图11选择C语言程序文件
6.选中【Text1】,单击【Add】按钮,再单击【Close】按钮,然后再单击左侧【SourceGroup1】前面的“+”,屏幕窗口如图12所示
图12进入程序编辑界面
接着是在编辑窗口中编写程序。
7.编写好程序就要进行程序的编译,单击工具栏上的
进行编译,在编译过程中如果出现错误,修改程序直到没有错误为止,然后在依次点击
和
,在此过程中出现错误的,也要修改程序直到没有错误为止,编译过程中出现警告一般可以不必考虑,但特殊时也要通过修改程序消除警告。
8.把文件转化成十六进制文件,点击【Project】在下拉菜单里找到【OptionsforTarget‘target1】’,如下图13所示
图13打开文件属性设置窗口
单击【OptionsforTarget‘target1’】会弹出下面的对话框在Eprom和Ram后面的框中填入相应的数据(也可以不进行填写),然后单击Output选项出现以下界面如图14
图14设置输出晶振频率
用鼠标左键单击CreatHEXFi:
前面的方框,这时方框里会用一个对号如图15
图15设置运行后创建HEX文件
点击确定对话框就会消失,这样刚刚所建立的文件就转化成十六进制的文件。
9.用40针排线把DP-51PRO试验仪(如下图)上的A1区J76接口与A2区J79接口相连,然后使用导线把A2区的J61接口与D1区的J52接口相连。
再用导线把A2区的J58的RXD,TXD,与A2区的J53的KEY1,KEY2相连,最后用导线把A2区的J58的INTO与D4区的J8的任意一接口相连。
图16DP-51PRO试验仪
10.对DP-51PRO试验仪上电。
打开DPFlash软件出现如图17所示界面
图17DPFlash软件界面
点击栏中的【文件】在下拉菜单里找到【装载】,如图18所示
图18装载HEX文件
或者直接点击工具栏里图标
,点击后会弹出下图19所示的对话框
图19选择HEX文件
找到刚刚所建立的文件,点击后按打开按钮对话框就会消失。
然后单击
会弹出图20所示的对话框
图20编程准备界面
单击编程后,软件开始把程序烧入试验仪,烧片的过程如图21
图21烧录程序文件到单片机
当烧片完成后,点击退出就行了。
10.关闭DPFalsh软件。
把DP-51PRO单片机仿真试验仪A1区的工作模式选择开关(MOD_sw1)切换到RUN处,然后按一下复位键(RST),MON51程序即开始运行。
11.观察实验运行的情况是不是符合设想。
实验现象为:
按KEY时八个二极管会按一定的顺序亮灭,显示一个二进制号码,再次按KEY时八个二极管也会按一定的顺序亮灭,显示一个新的二进制号码,此号码为前一个号码加一;按下KEY1,KEY2,KEY3,KEY4中的任意一个按键,八个二极管会按一定的顺序亮灭,显示一个二进制号码,此号码对应要办理业务客户的号码,与此同时蜂鸣器发出声音提示,再次按KEY1,KEY2,KEY3,KEY4中的任意一个按键,八个二极管也会按一定的顺序亮灭,显示一个新的二进制号码,此号码为前一个号码加一,蜂鸣器发出声音。
十、课程设计心得体会
通过五天的单片机课程设计,我觉得学习单片机,学习书本上的知识是远远不过的,我们更应该多做实验,在学习的过程中我们要多动脑,多动手,单片机是实实在在的硬件,只有在不断实践中才能领悟它的工作原理。
而且当我们在实际动手的过程中要书本和实践相结合,有些不会再去翻书查资料,这样会记得更加牢固。
在实验的过程我更加体会到了团队的力量,有时仅仅靠一个人的努力,是完全不行的,要考团队的力量,共同去完成,要形成良好的团队意识。
十一、源程序
#include//52系列单片机头文件
#defineucharunsignedchar//宏定义
#defineuintunsignedint//宏定义
sbitkey=P3^3;//取号用的按键
sbitbeep=P3^2;//蜂鸣器接口
sbitkey1=P3^4;//呼叫客户的按键1
sbitkey2=P3^5;//呼叫客户的按键2
sbitkey3=P2^3;//呼叫客户的按键3
sbitkey4=P2^4;//呼叫客户的按键4
voiddelayms(ucharx)//延时函数
{
uchari,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
voidmain()
{
uchartemp=0xff,temp1=0xff;//temp为取号参数,temp1呼号参数
key=1;key1=1;key2=1;key3=1;key4=1;//初始化各按键状态
while
(1)
{
if(temp1==0x00)
temp1=0xff;//当号码取完时,从0重新开始
if(key==0)//是否有客户把按键按下
{
delayms(10);//消抖
if(key==0)//有按键按下
{
P1=temp;//客户领取号码
temp--;//为下个客户取号码做准备
while(!
key);
delayms(10);
while(!
key);//按键松手检测
if(temp==0x00)
temp=0xff;//当号码取完时,从0重新开始
}
}
if(key1==0)//是否有营业员把按键
{
delayms(10);//消抖
if(key1==0)//有按键按下
{
P1=temp1;//营业员取要为那位客户服务的号码
beep=~beep;
delayms(50);//呼叫客户
temp1--;//为呼叫下个客户做准备
while(!
key1);
delayms(10);
while(!
key1);//按键松手检测
}
}
elseif(key2==0)//是否有营业员把按键
{
delayms(10);//消抖
if(key2==0)//有按键按下
{
P1=temp1;//营业员取要为那位客户服务的号码
beep=~beep;
delayms(50);//呼叫客户
temp1--;//为呼叫下个客户做准备
while(!
key2);
delayms(10);
while(!
key2);//按键松手检测
}
}
elseif(key3==0)//是否有营业员把按键
{
delayms(10);//消抖
if(key3==0)//有按键按下
{
P1=temp1;//营业员取要为那位客户服务的号码
beep=~beep;
delayms(50);//呼叫客户
temp1--;//为呼叫下个客户做准备
while(!
key3);
delayms(10);
while(!
key3);//按键松手检测
}
}
elseif(key4==0)//是否有营业员把按键
{
delayms(10);//消抖
if(key4==0)//有按键按下
{
P1=temp1;//营业员取要为那位客户服务的号码
beep=~beep;
delayms(50);//呼叫客户
temp1--;//为呼叫下个客户做准备
while(!
key4);
delayms(10);
while(!
key4);//按键松手检测
}
}
}
}
参考文献
[1]郭天翔主编.新概念51单片机C语言教程.北京:
电子工业出版社,2008.
[2][美]RichardAnderson,ChrisBlexrud著.ASP3高级编程[M].刘福太,张立民,金慧琴,梁发麦等译.北京:
机械工业出版社,2000:
408-458.
[3]玉德等编.MCS-51单片机原理与应用.北京:
机械工业出版社,2002.
[4]李华主编.MCS-51系列单片机实用接口技术.北京:
北京航空航天大学出版社,2000.
[5]马骏.车站售票大厅智能排队叫号系统的设计和开发.科技情报开发与经济.2010.Vol.
[6]杨彦、王霖、张凤荔、刘丽萍.基于RS485和单片机的排队机控制系统设计.中文核心期刊《微计算机信息》(测控自动化)2008年第24卷第1-1期.
[7]张忠安齐俊传.门诊排队叫号系统设计.医疗卫生装备·2006年第27卷第10
[8]张毅刚.MCS-51单片机应用设计.哈尔滨:
哈尔滨工业大学出版社.
[9]闫玉德俞虹.MCS-51单片机原理与应用(C语言版).机械工业出版社.2003.
[10]