太原科技大学课程设计报告基于AT89C52的叫号系统设计人:李磊专业:电子信息工程班级:学号:指导教师:二零一六年一月1目录第一章设计目的及要求....................................................................21.1设计目的................................................................................21.2设计要求................................................................................2第二章设计原理与方案....................................................................32.1设计原理................................................................................32.2设计方案................................................................................3第三章硬件设计................................................................................43.1硬件系统主要组成部分设计................................................43.1.1AT89C52芯片.....................................................................43.1.2键盘电路设计.....................................................................53.1.3四位数码管........................................................................6第四章软件设计................................................................................84.1主程序模块设计....................................................................94.2键盘扫描模块......................................................................114.3数码管显示模块..................................................................124.4软件延时模块......................................................................144.5中断定时..............................................................................14第五章系统调试..............................................................................155.1硬件连接..............................................................................155.2下载调试..............................................................................15第六章结论分析与体会..................................................................16参考文献............................................................................................17附录:..................................................................................................182第一章设计目的及要求1.1设计目的在C51单片机上实现类似银行排队叫号系统的一些功能,从而熟悉单片机的硬件,如数码管,接口,蜂鸣器等。以及熟悉并用单片机C语言编程,进行仿真,并做成硬件,自己动手,学以致用。1.2设计要求1.用4位数码管实现号码的显示。2.按下“下一位”键号码加1。3.特定叫号:用“输入键”进行手动输入号码并显示。4.复位功能:为了防止操作员忘记在“特定叫号”前排到的号码,可以按“复位键”来回到之前的那个号码。5.清零:按下“清零”键来对当前屏幕进行清零。6.每按下一个键,同时发出按键声。3第二章设计原理与方案2.1设计原理类似于银行的叫号系统,用单片机上的4位数码管来作为显示屏幕,显示当前排到的号码,用4*4矩阵键盘作为操作员的操作键盘来实现按键以及数字输入,用蜂鸣器来发出按键声及提醒声,客户看见排到自己的号时,到柜台来办理业务。2.2设计方案用C语言来编程,分别编写出数码管的显示模块,键盘的扫描模块,蜂鸣器的发声模块,软件延时模块等等。显示模块用table表存显示的数字和字母,用“动态显示法”在数码管显示出来;键盘扫描模块编写的程序中用到了按下和起手检测,把按下的键位代码反馈给程序;蜂鸣器发声模块,while循环,端口输出1、0,并延时;软件延时用的for循环的嵌套。4第三章硬件设计本设计主要有四个部分,AT89C51单片机芯片,4*4矩阵键盘,4位共阳极数码管,蜂鸣器。由矩阵键盘获得按键信号后,经单片机芯片处理,将显示信号输送给数码管和蜂鸣器,从而显示数字和发出声音。3.1硬件系统主要组成部分设计3.1.1AT89C52芯片AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。它的引脚图如图3.1图3.1AT89C52引脚图53.1.2键盘电路设计如下图3.2即为4*4矩阵键盘键盘P13^1~8分别与芯片的P3^0~7相连,它一组按压式开关的集合,是微机系统不可缺少的输入设备,用于输入数据和命令。键盘的每一个按键都被赋予一个代码,称为键码。键盘系统的主要工作包括及时发现有键闭合,求闭合键的键码。根据这一过程的不同,键盘可以分为两种,即编码键盘和非编码键盘。编码键盘是通过一个编码电路来识别闭合键的键码,非编码键盘是通过软件来识别键码。由于非编码键盘的硬件电路简单,用户可以方便地增减键的数量,因此在单片机应用系统中,非编码键盘得到广泛的应用,有较好的应用价值。图3.24*4矩阵键盘63.1.3四位数码管如下图3.3,为四位共阳极数码管,数码管的P17^1~8与芯片的P1^0~7相连,P16^1~4与芯片P2^0~3相连LED数码管由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到图3.3四位共阳极数码管7一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。按显示方式分,用单片机驱动LED数码管的方法有静态显示和动态(扫描)显示两种。静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后需要刷新,直到下一次显示内容需要更新时再传送新的数据,这种方法显示稳定,占用CPU时间少。本设计主要是用的动态显示,它的特点正好与静态显示相反,需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多,但动态显示所需硬件少,电路相对简单,能节省线路板空间。采用1位8段共阴极LED,P0口作为LED显示码输出端,因为只采用1位数码管,因此线选端直接接地。8第四章软件设计本程序分为五个模块,分别是主程序模块,键盘扫描模块,数码管显示模块,软件延时模块,中断定时模块。键盘扫描模块负责获得键盘按下的按键值,主模块负责处理传进来的信息,处理后发送给输出设备,显示模块实现数码管的数字显示。软件延时和中断延时应用于其他模块来实现其功能。具体流程如下图4.1主程序是while循环。while语句后跟显示模块,在每次循环都显示数字在数码管上,swich语句用来将键盘扫描返回的值指向各自的功能,清零,复位,输入,下一个等功能。在输入的同时,每按一个数字,为了使显示不中断,加入数字显示模块。图4.1程序流程图94.1主程序模块设计voidmain(){TMOD=0x01;//开中断总开关TH0=(65536-5000)/256;TL0=(65536-5000)%256;//设置初始地址,一次中断为5毫秒EA=1;ET0=1;display2(18,1,20,20);//显示欢迎HIwhile(1){display(shu);//数码管显示数字switch(keyscan())//返回键盘扫描值{case13://按下“下一个”键shu加1shu++;break;case15://按下“输入”键{jiyi=shu;//记住输入前的shu,赋给jiyis=16;x=16;y=16;z=16;while(keyscan()==17)//是否开始输入数字display1(5,17,16,16);//显示SR__if(num9)//是否输入的是0~9的数字{display2(14,17,17,0);//不是数字则显示ERRObreak;}num1=num;s=num1;x=16;y=16;z=16;//使键盘扫描时仍显示10while(keyscan()==17)display1(num1,16,16,16);//显示num1___if(num9){display2(14,17,17,0);//同上break;}num2=num;s=num1;x=num2;y=16;z=16;while(keyscan()==17)display1(num1,num2,16,16);if(num9){display2(14,17,17,0);break;}num3=num;s=num1;x=num2;y=num3;z=16;while(keyscan()==17)display1(num1,num2,num3,16);if(num9){display2(14,17,17,0);break;}num4=num;shu=num