《基于单片机的游泳馆计价器系统设计lcd课程设计论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的游泳馆计价器系统设计lcd课程设计论文.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、沈阳航空航天大学课程设计论文 基于单片机的游泳馆计价器系统设计(LCD)目 录1、绪论12、总体方案设计23、硬件电路设计33.1单片机简介43.2晶振复位电路43.3显示电路53.4按键电路64、系统软件设计74.1编程软件介绍74.2主程序85、系统综合调试9总结及课设体会10附录11参考文献12基于单片机的游泳馆计价器系统设计(LCD)XXX 沈阳航空航天大学自动化学院摘要:本文设计了一种基于LCD的游泳馆计价器系统。按时间长短方式分段作为计价的基准。系统采用8位STC89C52单片机作为主控芯片,LCD1602液晶显示作为主输出设备,外加几个按键进行人机交互式操作。设定启动停止清零等几
2、种工作模式。能够智能计算并显示出进馆时长和总价数。该系统低功耗体积小,反应时间短,抗干扰能力强,便于携带,人机交互界面友好,显示清晰,适用于各种应用场合。关键词:STC89C52单片机 ;定时器 ;LCD1602液晶显示;191、 绪论随着健身行业的发展,体育游泳馆已经是城市娱乐生活的重要组成部分,从加强行业管理以及减少工作人员与顾客的纠纷出发,具有良好性能的计价器无论是对体育馆还是顾客来说都是很必要的。而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。而单片机相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以
3、通过软件编程来完成更多的附加功能,避免了机械开关带来的不稳定因素。本设计采用AT89C52单片机为主控器,设计一款多功能游泳馆计价器,该计价器通过时间分段计价,具有暂停和清零功能,能将进馆时间总费用等相关信息在1602液晶显示器上综合显示,它比市场上的一些计价器使用更方便,功能更全,显示更直观,而且系统稳定性好。2、总体方案设计方案一:采用数字电子技术,利用555定时芯片构成多谐振荡器,或采用外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分频,最后通过译码电路对数据进行译码,将译码所得的数据送给LCD1602显示。时钟脉冲时间脉冲计费脉冲计费译码液晶显示图1 数字电路控制原
4、理图方案二:采用单片机控制。通过C52单片机作为主控器,利用LCD1602显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节。电源、复位电路AT89C52LCD1602显示电路按键电路振荡电路图2 单片机控制原理图方案一的计价器整体电路的规模较大,用到的器件多,造成故障率高难调试,对于模式的切换需要用到机械开关,时间久了会造成接触不良,功能不易实现。整体来讲,性能不够稳定,电路也不实用。方案二相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,灵活性强,可以通过软件编程来完成更多的附加功能。综合设计要求以及上述两种设计方案,最终选择方案二。3、硬件电路设计3.1单
5、片机简介 在本设计中,用到的是AT89C51的升级版AT89C52。AT89C52是ATMEL公司生产的CMOS八位高性能低功耗微控制器,硬件方面,是40脚DIP封装,其中有32个外部双向I/O(输入/输出)端口,同时内含2个16位可编程定时/计数器和1个全双工串行通信口,允许六个中断源进行两级中断,自带片内振荡放大器和时钟电路,又具有低功耗的闲置和掉电模式;软件方面,兼容标准MCS-51指令系统,不管是通过汇编语言还是C语言都可以对其进行方便的编程。相比最为基础的AT89C51,AT89C52具有性能上的优势。C51只有4kB闪存的只读存储器,而S52有8Kb,有更为充足的存储空间可用于程序
6、设计。尤为重要的是,AT89C52系统内核内已经固化了 ISP 监控程序,支持ISP(在系统编程),这样就可以有效地缩短开发时间并降低开发成本。综上可知,AT89C52单片机可谓功能强大,可适用于许多控制领域,为嵌入式控制系统提供了灵活高效且廉价的处理方案,完全能够满足本设计的需要。3.2 晶振复位电路该系统是由AT89C52芯片构成单片机最小系统,是出租车计价系统的核心部分,主要对各种信号及信息进行处理,并对电路进行控制。单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始
7、化到空状态。我们采用按键复位电路,如图3所示,按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平。而且由于电容的充电,会保持一段时间的高电平来使单片机复位。 单片机系统里都有晶振,全称叫晶体振荡器。它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,单片机运行速度就越快, 单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率之上。如图3所示,AT89C52使用12MHz的晶体振荡器作为振荡源。由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF 至50 pF之间。电路中采用22 pF的瓷片电容。图
8、3 STC89C52复位及时钟电路3.3 按键电路如图4所示,有三个按键接在单片机的P3口上,分别为P3.2、P3.3、P3.4,当第一个按键按下时,单片机检测到P3.2口为低电平,直到按键释放后才执行操作。此时,定时器启动,系统开始工作,计时开始,显示器上秒表开始刷新。第二个按键按下时,定时器停止,秒表停止在当前示数,总费用停止变化,可以读取示数。第三个按键按下时,执行清零操作,相当于从新开始计算另外一位顾客。图4 按键电路图3.4 液晶显示模块电路如图5所示,LCD1602液晶显示器与单片机的接口电路,其中P0口为液晶显示器的数据输出口,en是液晶的使能端由P1.6控制,给高电平的时候液晶
9、显示器使能。dula与wela是P2.6与P2.7口,这两个是开发板内部定义的数码管段码和位码锁存器74hc573的锁存端,由于要液晶显示,所以为了防止数码管出现乱码影响整个计价器系统显示,特意在程序中关闭了数码管的位锁存端,这样就相当于关闭了所有的数码管,即使P0口持续不断的输送数据,数码管也不会有任何显示。P0口在单片机不断刷新的同时,不断送出不同的数据供显示。 图5 LCD1602液晶显示器电路图3.5 美化效果模拟电路如图6所示,游泳馆中的彩色装饰灯由四个灯依次亮来模拟。在系统开始后,彩灯就打开,停止时,相应关闭。图6 电机控制电路图4、系统软件设计4.1编程软件介绍KEIL C51是
10、美国KEIL Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。KEIL提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在一起。运行KEIL软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么 KEIL几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。4.2初始化子程序在程序开始时,需要对一些参数以及寄存器设置数值或者
11、是工作方式,称之为系统初始化。在本系统设计中,如图8所示,包含几个部分。其中变量指代的是显示以及一些标志位的变量初值。定时器初始化需要设置定时器的标号以及工作方式。在这里,定时器0用的是定时,方式一16位定时器。液晶初始化包含测忙以及显示方式设置。静态显示是指液晶需要将一些标志符号比如游泳馆等一直显示在液晶上。在程序开始时,这些初始化程序只执行一次。变量初始化静态显示初始化LCD1602初始化定时器初始化图8 初始化子程序框图4.3 秒表子程序如图9所示,定时器每50ms会产生一次中断,每一次中断后会把变量tt加1,当加到20时,代表1秒时间到,这时秒表的个位变量加1,当加到10时,十位加1,
12、同时个位清零。通过费用的计算公式,结合实际情况,在30秒(代表实际情况2小时)以内,费用为8元,超出后每十秒(代表实际情况一刻钟)加收2元。检测中断变量tt计时各变量加进位总费用计算显示图9 秒表子程序框图4.4主程序如图10所示,系统开始后,先进行初始化和静态显示,这些程序只执行一次,而后就进入到大循环中,循环检测按键,不断刷新液晶显示。当第一个按键按下以后,系统开始工作,定时器打开,模拟彩灯装饰效果的四个灯会轮流点亮,秒表刷新。当第二个按键按下以后,定时器关闭。当第三个按键按下以后,系统全部清零,恢复到初始化后的初始状态。开始初始化按键检测是否启动系统是否中断产生中断变量加1是否计数到20
13、时间秒表刷新等待中断液晶显示等待按键启动是是是否否图10 主程序框图5、系统综合调试对照硬件原理图,在单片机开发板上实验如图11所示。连接完毕后,向单片机烧写程序,开机,然后按下第一个按键,发现系统运行不完全,秒表正常运行,只是液晶上会出现乱码。经过检查发现是单片机功率限制,不能带动所有器件同时工作,于是把彩色灯通过四个灯的轮流点亮来模拟,发现很好的解决了刚才的问题。由上述调试现象可知,系统达到设计要求。图11 硬件实物图6、结论及进一步设想通过长达两周时间的设计与调试,本设计完全达到了设计要求,能在大部分场合下实时计时计费,并在LCD1602液晶显示器上实时显示。本文设计的系统尺寸小,成本低
14、,性能稳定,在计时计费领域上有远大的应用前景。随着控制技术的发展,传感器的精度测量将有很大的提高。虽然该系统完全满足了本课程设计的各项要求,但是在两周的仔细专研后发现还有一些有待提高的地方,只是限于时间精力有限,未能在本文实现。该系统在应用过程中还应该加入更加美观的视觉感受,此外,还可以加上语音播报系统,提醒用户时间。我相信,在未来的许多领域,必将大规模,大批量的使用这种计时计费装置。参考文献1 刘复华.单片机及其应用系统.北京:清华大学出版社,19922 李斌,董慧颖.可重组机器人研究和发展现状.沈阳工业学院学报,2000,19(4):23-273 马淑华.单片机原理与接口技术.北京邮电大学
15、出版社,2007,84 张义和.例说51单片机. 人民邮电出版社,2008,4总结及课设体会在本次设计中,我们对专业课的学习有了新的认识,以前上课注重理论的比较多,真正自己动手做的时候比较少,所以在设计的过程中,遇到了很多的困难。但是还是在老师和同学的帮助以及自己的不懈努力下成功地完成了本次设计。通过对该课题的研究,加深对所学知识的理解,提高对课外知识的学习能力,增强知识的应用能力,提高解决实际问题的能力,培养自我创新意识。积累实践经验,为以后的发展打下基础,也为以后我们自己在这方面的发展打下基础,并能够在这方面培养自己的兴趣。在设计中我们必须首先熟悉和掌握单片机的结构及工作原理,单片机的接口
16、技术及相关外围芯片的外特性,控制方法。以单片机核心的电路设计的基本方法和技术。单片机不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机了解计算机原理与结构的最佳选择。课程设计能培养学生综合运用所学知识,提高发现,提出,分析和解决实际问题的能力,是对学生实际工作能力的具体训练和考察过程。通过这次设计,无论从选题到定稿,从理论到实践都使我学到了很多东西,它不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。同时也明白了理论与实践相结合的重要
17、性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 最后,特别感谢在两周课设里老师给予的技术上和硬件上的大力支持,同时课程设计也大大提高了我的实际运用能力。2014年1月 10日完成附录1 电路原理图附录2 程序清单/*头文件*#include#include #include #include/*宏定义*#define uchar unsigned char#define uint unsigned int#define shuju P0 /LCD1602 P0输出显示数据/*位定义*sbit
18、 rs=P21; /LCD1602 忙碌检测sbit rw=P15; /LCD1602 读写控制sbit en=P16; /LCD1602 使能端sbit wela=P27; /数码管位选锁存端sbit key1 =P32;/启动命令 sbit key2 =P33; /停止命令sbit key3 =P34; /清除键sbit LED0=P10; /定义LED端口sbit LED1=P11; /定义LED端口sbit LED2=P12; /定义LED端口sbit LED3=P13; /定义LED端口/*定义变量*uchar flag; /标志位 uchar flag1; uchar table=
19、0,1,2,3,4,5,6,7,8,9; /码表uchar tt; / 计时标量每50ms加1uchar pp; / 计时标量每50ms加1uchar a; / 秒个位uchar b; / 秒十位uchar c; / 分个位uchar d; / 分十位uchar h; / 总费用uchar hge;/总费用个位uchar hshi; / 总费用十位/*延时函数*void delayus(uchar t) while(-t);/*延时函数*void delay(uchar t) /大致延时1mS while(t-) delayus(235); delayus(235); /*彩灯代替*void
20、caideng(void) if (flag1=1) switch(pp)case 5: LED0=0;break;case 10: LED1=0;break;case 15: LED2=0;break;case 20: LED3=0;break;default:P1=0xff; break; else P1=0xff; /*秒表计时*void jishi(void)if(tt=20) / 1秒到tt=0; / 清零 a+; if(a=10) a=0;b+;if(b=6)b=0;c+;if(c=10)c=0;d+; /*费用计算* void money(void) if(b3)&(a=21)pp=0;