基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx

上传人:b****2 文档编号:2558656 上传时间:2023-05-04 格式:DOCX 页数:25 大小:177.24KB
下载 相关 举报
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第1页
第1页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第2页
第2页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第3页
第3页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第4页
第4页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第5页
第5页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第6页
第6页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第7页
第7页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第8页
第8页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第9页
第9页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第10页
第10页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第11页
第11页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第12页
第12页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第13页
第13页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第14页
第14页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第15页
第15页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第16页
第16页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第17页
第17页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第18页
第18页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第19页
第19页 / 共25页
基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx

《基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx(25页珍藏版)》请在冰点文库上搜索。

基于单片机的游泳馆计价器系统设计LCD课程设计论文.docx

基于单片机的游泳馆计价器系统设计LCD课程设计论文

基于单片机的游泳馆计价器系统设计

目录

1、绪论1

2、总体方案设计2

3、硬件电路设计3

3.1单片机简介4

3.2晶振复位电路4

3.3显示电路5

3.4按键电路6

4、系统软件设计7

4.1编程软件介绍7

4.2主程序8

5、系统综合调试9

总结及课设体会10

附录11

参考文献12

 

基于单片机的游泳馆计价器系统设计(LCD)

XXX沈阳航空航天大学自动化学院

摘要:

本文设计了一种基于LCD的游泳馆计价器系统。

按时间长短方式分段作为计价的基准。

系统采用8位STC89C52单片机作为主控芯片,LCD1602液晶显示作为主输出设备,外加几个按键进行人机交互式操作。

设定启动停止清零等几种工作模式。

能够智能计算并显示出进馆时长和总价数。

该系统低功耗体积小,反应时间短,抗干扰能力强,便于携带,人机交互界面友好,显示清晰,适用于各种应用场合。

关键词:

STC89C52单片机;定时器;LCD1602液晶显示;

1、绪论

随着健身行业的发展,体育游泳馆已经是城市娱乐生活的重要组成部分,从加强行业管理以及减少工作人员与顾客的纠纷出发,具有良好性能的计价器无论是对体育馆还是顾客来说都是很必要的。

而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。

而单片机相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能,避免了机械开关带来的不稳定因素。

本设计采用AT89C52单片机为主控器,设计一款多功能游泳馆计价器,该计价器通过时间分段计价,具有暂停和清零功能,能将进馆时间总费用等相关信息在1602液晶显示器上综合显示,它比市场上的一些计价器使用更方便,功能更全,显示更直观,而且系统稳定性好。

2、总体方案设计

方案一:

采用数字电子技术,利用555定时芯片构成多谐振荡器,或采用外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分频,最后通过译码电路对数据进行译码,将译码所得的数据送给LCD1602显示。

图1数字电路控制原理图

方案二:

采用单片机控制。

通过C52单片机作为主控器,利用LCD1602显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节。

图2单片机控制原理图

方案一的计价器整体电路的规模较大,用到的器件多,造成故障率高难调试,对于模式的切换需要用到机械开关,时间久了会造成接触不良,功能不易实现。

整体来讲,性能不够稳定,电路也不实用。

方案二相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,灵活性强,可以通过软件编程来完成更多的附加功能。

综合设计要求以及上述两种设计方案,最终选择方案二。

3、硬件电路设计

3.1单片机简介

在本设计中,用到的是AT89C51的升级版AT89C52。

AT89C52是ATMEL公司生产的CMOS八位高性能低功耗微控制器,硬件方面,是40脚DIP封装,其中有32个外部双向I/O(输入/输出)端口,同时内含2个16位可编程定时/计数器和1个全双工串行通信口,允许六个中断源进行两级中断,自带片内振荡放大器和时钟电路,又具有低功耗的闲置和掉电模式;软件方面,兼容标准MCS-51指令系统,不管是通过汇编语言还是C语言都可以对其进行方便的编程。

相比最为基础的AT89C51,AT89C52具有性能上的优势。

C51只有4kB闪存的只读存储器,而S52有8Kb,有更为充足的存储空间可用于程序设计。

尤为重要的是,AT89C52系统内核内已经固化了ISP监控程序,支持ISP(在系统编程),这样就可以有效地缩短开发时间并降低开发成本。

综上可知,AT89C52单片机可谓功能强大,可适用于许多控制领域,为嵌入式控制系统提供了灵活高效且廉价的处理方案,完全能够满足本设计的需要。

3.2晶振复位电路

该系统是由AT89C52芯片构成单片机最小系统,是出租车计价系统的核心部分,主要对各种信号及信息进行处理,并对电路进行控制。

单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。

单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态。

我们采用按键复位电路,如图3所示,按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平。

而且由于电容的充电,会保持一段时间的高电平来使单片机复位。

单片机系统里都有晶振,全称叫晶体振荡器。

它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,单片机运行速度就越快,单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率之上。

如图3所示,AT89C52使用12MHz的晶体振荡器作为振荡源。

由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。

电路中采用22pF的瓷片电容。

 

图3STC89C52复位及时钟电路

3.3按键电路

如图4所示,有三个按键接在单片机的P3口上,分别为P3.2、P3.3、P3.4,当第一个按键按下时,单片机检测到P3.2口为低电平,直到按键释放后才执行操作。

此时,定时器启动,系统开始工作,计时开始,显示器上秒表开始刷新。

第二个按键按下时,定时器停止,秒表停止在当前示数,总费用停止变化,可以读取示数。

第三个按键按下时,执行清零操作,相当于从新开始计算另外一位顾客。

 

 

图4按键电路图

3.4液晶显示模块电路

如图5所示,LCD1602液晶显示器与单片机的接口电路,其中P0口为液晶显示器的数据输出口,en是液晶的使能端由P1.6控制,给高电平的时候液晶显示器使能。

dula与wela是P2.6与P2.7口,这两个是开发板内部定义的数码管段码和位码锁存器74hc573的锁存端,由于要液晶显示,所以为了防止数码管出现乱码影响整个计价器系统显示,特意在程序中关闭了数码管的位锁存端,这样就相当于关闭了所有的数码管,即使P0口持续不断的输送数据,数码管也不会有任何显示。

P0口在单片机不断刷新的同时,不断送出不同的数据供显示。

 

图5LCD1602液晶显示器电路图

3.5美化效果模拟电路

如图6所示,游泳馆中的彩色装饰灯由四个灯依次亮来模拟。

在系统开始后,彩灯就打开,停止时,相应关闭。

图6电机控制电路图

4、系统软件设计

4.1编程软件介绍

KEILC51是美国KEILSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

KEIL提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在一起。

运行KEIL软件需要WIN98、NT、WIN2000、WINXP等操作系统。

如果你使用C语言编程,那么KEIL几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

4.2初始化子程序

在程序开始时,需要对一些参数以及寄存器设置数值或者是工作方式,称之为系统初始化。

在本系统设计中,如图8所示,包含几个部分。

其中变量指代的是显示以及一些标志位的变量初值。

定时器初始化需要设置定时器的标号以及工作方式。

在这里,定时器0用的是定时,方式一16位定时器。

液晶初始化包含测忙以及显示方式设置。

静态显示是指液晶需要将一些标志符号比如游泳馆等一直显示在液晶上。

在程序开始时,这些初始化程序只执行一次。

 

图8初始化子程序框图

4.3秒表子程序

如图9所示,定时器每50ms会产生一次中断,每一次中断后会把变量tt加1,当加到20时,代表1秒时间到,这时秒表的个位变量加1,当加到10时,十位加1,同时个位清零。

通过费用的计算公式,结合实际情况,在30秒(代表实际情况2小时)以内,费用为8元,超出后每十秒(代表实际情况一刻钟)加收2元。

图9秒表子程序框图

4.4主程序

如图10所示,系统开始后,先进行初始化和静态显示,这些程序只执行一次,而后就进入到大循环中,循环检测按键,不断刷新液晶显示。

当第一个按键按下以后,系统开始工作,定时器打开,模拟彩灯装饰效果的四个灯会轮流点亮,秒表刷新。

当第二个按键按下以后,定时器关闭。

当第三个按键按下以后,系统全部清零,恢复到初始化后的初始状态。

 

图10主程序框图

5、系统综合调试

对照硬件原理图,在单片机开发板上实验如图11所示。

连接完毕后,向单片机烧写程序,开机,然后按下第一个按键,发现系统运行不完全,秒表正常运行,只是液晶上会出现乱码。

经过检查发现是单片机功率限制,不能带动所有器件同时工作,于是把彩色灯通过四个灯的轮流点亮来模拟,发现很好的解决了刚才的问题。

由上述调试现象可知,系统达到设计要求。

图11硬件实物图

6、结论及进一步设想

通过长达两周时间的设计与调试,本设计完全达到了设计要求,能在大部分场合下实时计时计费,并在LCD1602液晶显示器上实时显示。

本文设计的系统尺寸小,成本低,性能稳定,在计时计费领域上有远大的应用前景。

随着控制技术的发展,传感器的精度测量将有很大的提高。

虽然该系统完全满足了本课程设计的各项要求,但是在两周的仔细专研后发现还有一些有待提高的地方,只是限于时间精力有限,未能在本文实现。

该系统在应用过程中还应该加入更加美观的视觉感受,此外,还可以加上语音播报系统,提醒用户时间。

我相信,在未来的许多领域,必将大规模,大批量的使用这种计时计费装置。

参考文献

[1]刘复华.单片机及其应用系统.北京:

清华大学出版社,1992

[2]李斌,董慧颖.可重组机器人研究和发展现状.沈阳工业学院学报,2000,19(4):

23-27

[3]马淑华.单片机原理与接口技术.北京邮电大学出版社,2007,8

[4]张义和.例说51单片机.人民邮电出版社,2008,4

总结及课设体会

在本次设计中,我们对专业课的学习有了新的认识,以前上课注重理论的比较多,真正自己动手做的时候比较少,所以在设计的过程中,遇到了很多的困难。

但是还是在老师和同学的帮助以及自己的不懈努力下成功地完成了本次设计。

通过对该课题的研究,加深对所学知识的理解,提高对课外知识的学习能力,增强知识的应用能力,提高解决实际问题的能力,培养自我创新意识。

积累实践经验,为以后的发展打下基础,也为以后我们自己在这方面的发展打下基础,并能够在这方面培养自己的兴趣。

在设计中我们必须首先熟悉和掌握单片机的结构及工作原理,单片机的接口技术及相关外围芯片的外特性,控制方法。

以单片机核心的电路设计的基本方法和技术。

单片机不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲:

一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机了解计算机原理与结构的最佳选择。

课程设计能培养学生综合运用所学知识,提高发现,提出,分析和解决实际问题的能力,是对学生实际工作能力的具体训练和考察过程。

通过这次设计,无论从选题到定稿,从理论到实践都使我学到了很多东西,它不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

同时也明白了理论与实践相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

最后,特别感谢在两周课设里老师给予的技术上和硬件上的大力支持,同时课程设计也大大提高了我的实际运用能力。

 

[2014年1月10日完成]

附录1电路原理图

附录2程序清单

//********头文件*****************************

#include

#include

#include

#include

//********宏定义*****************************

#defineucharunsignedchar

#defineuintunsignedint

#defineshujuP0//LCD1602P0输出显示数据

//********位定义*****************************

sbitrs=P2^1;//LCD1602忙碌检测

sbitrw=P1^5;//LCD1602读写控制

sbiten=P1^6;//LCD1602使能端

sbitwela=P2^7;//数码管位选锁存端

sbitkey1=P3^2;//启动命令

sbitkey2=P3^3;//停止命令

sbitkey3=P3^4;//清除键

sbitLED0=P1^0;//定义LED端口

sbitLED1=P1^1;//定义LED端口

sbitLED2=P1^2;//定义LED端口

sbitLED3=P1^3;//定义LED端口

//********定义变量*****************************

ucharflag;//标志位

ucharflag1;

uchartable[]={'0','1','2','3','4','5','6','7','8','9'};//码表

uchartt;//计时标量每50ms加1

ucharpp;//计时标量每50ms加1

uchara;//秒个位

ucharb;//秒十位

ucharc;//分个位

uchard;//分十位

ucharh;//总费用

ucharhge;//总费用个位

ucharhshi;//总费用十位

//**********延时函数***************

voiddelayus(uchart)

{

while(--t);

}

//**********延时函数***************

voiddelay(uchart)//大致延时1mS

{

while(t--)

{

delayus(235);

delayus(235);

}

}

//*******彩灯代替*******

voidcaideng(void)

{

if(flag1=1)

{

switch(pp)

{

case5:

LED0=0;break;

case10:

LED1=0;break;

case15:

LED2=0;break;

case20:

LED3=0;break;

default:

P1=0xff;break;

}

}

else

{

P1=0xff;

}

}

//*******秒表计时*******

voidjishi(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++;

}

}

}

}

}

//*******费用计算*******

voidmoney(void)

{

if((b<3)&&(a<=9)&&(c==0)&&(d==0))//三公里以内

{

if(flag==0)//标志位清零

{

h=8;

}

else

{

h=0;

}

}

else

{

h=8+(b-3)*2+c*20+d*200;//费用计算公式

}

hge=h%10;

hshi=h/10;

}

//*******定时器初始化*******

voidInit_Timer0(void)

{

TMOD|=0x01;//使用模式1,16位定时器,使用"|"

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;//总中断打开

ET0=1;//定时器中断打开

}

//**********检测忙信号************************

bitcemang(void)

{

shuju=0xff;

rs=0;

rw=1;

en=0;

_nop_();

en=1;

return(bit)(shuju&0x80);

}

//**********写命令至LCD***********************

voidcommand(ucharcom)

{

while(cemang());

{

rs=0;

rw=0;

en=1;

shuju=com;

_nop_();

en=0;

}

}

//**********LCD初始化***************

voidLCD_Init(void)

{

command(0x38);//显示模式设置

delay(5);

command(0x38);

delay(5);

command(0x38);

delay(5);

command(0x38);

command(0x08);//显示关闭

command(0x01);//显示清屏

command(0x06);//显示光标移动设置

delay(5);

command(0x0C);//显示开及光标设置

}

//**********写数据至LCD************************

voidlcddata(uchardataa)

{

while(cemang());//忙则等待

{

rs=1;

rw=0;

en=1;

shuju=dataa;

_nop_();

en=0;

}

}

//*********写一个字符数据到指定的目标***********

voidwrite_Char(ucharx,uchary,ucharz)

{

if(y==0)

{

command(0x80+x);

}

else

{

command(0xC0+x);

}

lcddata(z);

}

//*********写入字符串函数***********

voidwritestring(ucharx,uchary,uchar*s)

{

if(y==0)

{

command(0x80+x);

}

else

{

command(0xC0+x);

}

while(*s)

{

lcddata(*s);

s++;

}

}

//*******************数据显示**********************

voiddisplay(void)

{

write_Char(5,1,table[a]);//秒个位

write_Char(4,1,table[b]);//秒十位

write_Char(2,1,table[c]);//分个位

write_Char(1,1,table[d]);//分十位

write_Char(11,1,table[hge]);//费用个位

write_Char(10,1,table[hshi]);//费用十位

}

//*******独立按键检测**********************

voidkey(void)

{

if(key1==0)

{

delay(15);

if(key1==0)//按键消抖

{

TR0=1;//打开定时器

flag=0;//标志位设置

flag1=1;

}

}

if(key2==0)

{

delay(15);

if(key2==0)

{

TR0=0;

flag=1;

flag1=0;

}

}

if(key3==0)

{

delay(15);

if(key3==0)

{

a=0;

b=0;

c=0;

d=0;

h=0;

flag=1;

TR0=0;

flag1=0;

}

}

}

//*************主程序**************************

voidmain()

{

a=0;//各参数初始化

b=0;

c=0;

d=0;

h=0;

flag=1;

flag1=0;;

LCD_Init();//初始化LCD

wela=1;

shuju=0xff;

wela=0;//关闭数码管

Init_Timer0();//定时器初始化

writestring(3,0,"indoorpool");//第一行种类

write_Char(3,1,':

');//时间中的冒号分隔符

while

(1)

{

caideng();

key();

jishi();

money();

display();

}

}

//******************定时器中断服务函数************

voidtime0()interrupt1

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

tt++;

pp++;

if(pp>=21)

{

pp=0;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2