《单片机原理及应用课程设计排队叫号系统.doc》由会员分享,可在线阅读,更多相关《单片机原理及应用课程设计排队叫号系统.doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 课程设计报告课程名称: 单片机原理及应用课程设计设计题目: 排队叫号机 系 别: 信工系 专 业: 物理与电子信息工程 班 级: 学生姓名: 学 号: 起止日期: 指导教师: 成绩评定项 目权重成绩姓名1姓名21、设计过程中出勤、学习态度等方面0.22、课程设计质量与辩论0.53、设计报告书写及图纸标准程度0.3总 成 绩 指导教师评语:指导教师签名: 年 月 日摘 要排队叫号管理系统(排队机、叫号机)是针对银行、工商、税务、通讯、政府机构等部门的大厅工作流程设计的,是利用电脑的科学管理客户排队的系统,很好地解决了客户在效劳机构办理业务时所遇到的各种排队、拥挤和混乱现象,为客户办理业务带来莫
2、大的方便和愉悦。本课题研究的目的是研制一款无人排队的排队叫号机,它主要由主控制器、键盘、数码管显示电路、蜂鸣器电路等局部构成。 系统利用单片机进行控制,通过串行通信方式传输处理数据;通过按键取号,在数码管上显示排队的号码以及当前正在等待的人数;通过按键叫号,在数码管上显示叫到的号码,由扬声器发出声音提示客户。同时免除了令客户不舒服的站立式排队,这种现代化的高科技产品彻底解决了银行、医院等效劳性企业普遍存在的站立等候,效劳无序的问题,深化并完善了效劳的质量。本系统采用单片机进行控制,利用数码管显示,蜂鸣器鸣叫提示的人机交互界面,模拟排队管理系统,科学地处理各种排队情况。操作简便,控制灵活,显示清
3、晰,制作本钱低,性价比拟高。 关键词:排队叫号机;串行通信;独立键盘;数码管动态显示;蜂鸣器目 录1 方案论证32主要芯片功能介绍42.1 STC89C5242.2 74HC138及74HC245引脚功能说明73 硬件电路设计8总体设计电路8排队取号控制电路9排起取号电路10程序流程图115系统功能测试与整体指标115.1 硬件测试11软件调试116 总结与思考及致谢11参考文献12附录一:详细元件清单12附录二:详细系统源程序13排队叫号机设计要求 利用单片机的串行通信方式,完成一个科学管理各种复杂排队情况的排队叫号系统。具体要求如下: (1) 主机:通过按键来完成报号,由数码管显示叫到的号
4、码,并发出蜂鸣声。 (2) 客户端:通过按键完成取号,由数码管显示号码和当前需要等待的人数。 (3) 主机和客户端用串口通信。1 方案论证 系统采用如下图的电路,系统采用如下图的电路,通过STC89C52单片机直接扩展的独立键盘,完成排队取号流程本系统直接利用系统的中断0按键控制,单片机控制数码管显示排队等待情况控制蜂鸣器发声完成叫号功能。数码显示数码显示STC89C52从机STC89C52主机蜂鸣器主机独立键盘独立键盘2主要芯片功能介绍2.1 STC89C521STC89C52单片机简介STC89C52是美国ATMEL公司推出的系列单片机,将多种功能的8位CPU与FPEROM快闪可编程/擦除
5、只读存储器结合在一个芯片上,是一种低功耗、高性能的CMOS控制器,为很多嵌入式控制应用提供了非常灵活而又价格适宜的方案,其性能价格比远高于同类芯片。它与MCS-51指令系统兼容,片内FPEROM允许对程序存储器在线重复编程,也可用常规的EPROM编程器编程,可循环写入/擦除1000次。STC89C52内含4KB的FPEROM,一般的EEPROM的字节擦除时间和写入时间根本上均为10ms,对于任一个实时控制系统来说,这样长的时间是不可能在线修改程序的。其内部结构框图如图3所示:图3 STC89C52内部结构图与EEPROM相比拟,FPEROM大大缩短了存储内容擦除和写入的时间,为在线改写程序提供
6、了极大的方便,而且价格也比带EPROM87C系列单片机廉价,这更显示出了89C系列的优越性。它还有128*8Bit的片内RAM;32根I/O线;2个16位定时/计数器;5个中断源;一个全双工的异步串行口;间歇和掉电工作模式;三级程序存储器加密;全静态工作,晶振工作范围:0Hz24MHz。2管脚功能STC89C52单片机为40引脚芯片如图4所示。I/O口线: P0、P1、P2、P3共四个八位标准双向口。P0口是三态双向口, 通称数据总线口, 因为只有该口能直接用于对外部存储器的读写操作。P0口也用以输出外部存储器的低8位地址。由于是分时输出, 故应在外部加锁存器将此地址数据锁存, 地址锁存信号用
7、ALE。P1口是专门供用户使用的I/O口, 是准双向口。P2口是从系统扩展时作高8位地址线用。不扩展外部存储器时, P2口也是标准双向口。P3口是双功能口, 该口的每一位均可独立地定义为第一I/O 功能或第二I/O功能,作为第一功能使用时操作同P1口,P3口的第二功能如表1。图4 STC89C52引脚图控制口线: PSEN (片外取控制)、ALE( 地址锁存控制)、EA (片外储器选择)。电源及时钟: VCC、VSS; XTAL1,XTAL2。表1 引脚功能表 74HC138及74HC245引脚功能说明引脚图如下所示:74HC245:74HC138:当一个选通端G1为高电平,另两个选通端/(G
8、2A)和/(G2B)为低电平时,可将地址端A、B、C的二进制编码在一个对应的输出端以低电平译出。 利用 G1、/(G2A)和/(G2B)可级联扩展成 24 线译码器;假设外接一个反相器还可级联扩展成 32 线译码器。3 硬件电路设计 按照课程设计要求,结合单片机系统特点,排队叫号总体设计电路如下图: 4系统软件设计初始化 判断从机是否取号否是向主机发送数据数码管显示当前人数主机接收数据主机是否叫号是否数码管显示叫到的号码蜂鸣器响应5系统功能测试与整体指标5.1 硬件测试 第一步:目测。检查外部的各种元件或那么电路是否有断点; 第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种
9、电源线与地线之间是否有短路现象。 第三步:加电检测。给板加电,检测所有的插座或是器件的电源端是否符合要求的值。 第四步:联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。程序后,编辑,查看程序是否有逻辑的错误。6 总结与思考及致谢(1) 通过本次课程设计,加深了对于怎样学好单片机这门课程的理解,学单片机就是要多实践,老师领我们进入单片机世界,精通它就得靠我们自己,那就是多实践,灵活运用自己所学知识到自己的作品当中。 (2) 在程序设计过程中遇到的很多问题,阻碍设计的过程,通过总结,深深
10、体会到程序设计的时候模块化处理的重要性,可以先画好程序流程图,然后各个模块各个击破。同时遇到问题时可以同学之间相互讨论、回到书本在学习,更有助于加深对所学知识的理解。参考文献1 张鑫.单片机原理及应用M.北京:电子工业出版社,2005.8. 2 邱关源、罗先觉.电路M.北京:高等教育出版社,2006.5. 3 康光华.电子技术根底.数字局部M.北京:高等教育出版社,2006.1. 4 康光华.电子技术根底.模拟局部M.北京:高等教育出版社,2006.1. 5 祁伟, 杨亭. 单片机C51程序设计教程与实验M.北京:北京航空航天大学出版社,2006. 6 楼然苗.李光飞.单片机课程设计指导M.北
11、京:北京航空航天大学出版社,2007.4 7 单片机学习网8基于工程教学附录一:详细元件清单仪器名称数量STC89C52芯片2个按键3个电阻29个数码管6块PCB板1块杜邦线2根电源线1根附录二:详细系统源程序 排队叫号机程序:取号程序:#includesbit addr3=P13;sbit enled=P14;sbit keyout1=P23;sbit keyin1=P24;unsigned char T0RH = 0;unsigned char T0RL = 0;void delay(unsigned int z);void ConfigTimer0(unsigned int ms);un
12、signed char code LedChar = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E;unsigned char LedBuff6 = 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF; /数码管缓冲unsigned char getdate;unsigned char allman;void main()addr3=1;enled=0;keyout1=0;EA=1;ConfigTimer0(1);/串口设置SCON=
13、0x50;PCON=0x00;TMOD&=0x0f; TMOD|=0x20; TH1=0xFD;TL1=0xFD; TR1=1;while(1) if(RI)RI=0;delay(5);allman=SBUF;if(keyin1=0)delay(100);if(keyin1=0)allman+;getdate+;if(allman=100)allman=0;LedBuff0=LedCharallman%10;LedBuff1=LedCharallman/10%10;LedBuff2=0xbf;LedBuff3=LedChargetdate%10;LedBuff4=LedChargetdate/
14、10%10;SBUF=allman;if(TI)TI=0;delay(5);void delay(unsigned int z) unsigned int x,y; for(x=z;x0;x-) for(y=125;y0;y-); void ConfigTimer0(unsigned int ms) /T0配置函数unsigned long tmp;tmp = 11059200/12; /定时器计数频率tmp = (tmp * ms)/1000;/计算所需的计数值tmp = 65536 - tmp; /计算定时重载值tmp = tmp + 18; /修正中断响应延时造成的误差T0RH = (u
15、nsigned char)(tmp 8);/ 定时器重载值拆分为上下字节T0RL = (unsigned char)tmp;TMOD &= 0xF0; TMOD |= 0x01; TH0 = T0RH; TL0 = T0RL;ET0 =1; TR0 = 1; void LedScan() /? static unsigned char i = 0; P0 = 0xFF; P1 = (P1 & 0xF8) | i; P0 = LedBuffi; if (i 5) i+; else i = 0;void InterruptTimer0() interrupt 1 TH0 = T0RH; TL0 =
16、 T0RL; LedScan(); 叫号程序:#includesbit addr3=P13;sbit enled=P14;sbit keyout1=P23;sbit keyin1=P24;sbit beep=P16;unsigned char flag = 0;unsigned char getdate =0;unsigned char allman;unsigned char T0RH = 0;unsigned char T0RL = 0;void delay(unsigned int z);unsigned char LedBuff6 = 0xFF, 0xFF, 0xFF, 0xFF, 0
17、xFF, 0xFF;/数码管显示缓冲区,初值0XFF确保启动时都不亮unsigned char code LedChar = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E;void ConfigTimer0(unsigned int ms);void beeper();void main()enled=0;addr3=1;keyout1=0;EA=1;ConfigTimer0(1);SCON=0x50;/设置串口工作方式1PCON=0x00;TMOD&
18、=0x0f; /清零T1控制位TMOD|=0x20; /配置T1为模式2TH1=0xFD;TR1=1;LedBuff0=LedChargetdate%10;LedBuff1=LedChargetdate/10%10;while(1)if(RI)RI=0;delay(5);allman=SBUF;if(keyin1=0)delay(100);if(keyin1=0)if(allman != 0)getdate+;allman-; flag = 1;else allman = allman;getdate = getdate;flag = 0;LedBuff0=LedChargetdate%10;
19、LedBuff1=LedChargetdate/10%10;SBUF=allman;if(TI)TI=0;delay(5); if(flag) beeper(); elsebeep=0;void beeper()unsigned char i,j,k;for(i=0;i18;i+)for(j=0;j250;j+)for(k=0;k120;k+) ;beep=!beep;for(j=0;j130;j+)for(k=0;k 8);T0RL = (unsigned char)tmp;TMOD &= 0xF0;TMOD |= 0x01;TH0 = T0RH;TL0 = T0RL;ET0 =1;TR0 = 1; void LedScan() static unsigned char i = 0; P0 = 0xFF; P1 = (P1 & 0xF8) | i; P0 = LedBuffi; if (i 0;x-) for(y=125;y0;y-); void InterruptTimer0() interrupt 1 TH0 = T0RH; TL0 = T0RL; LedScan();