篮球计分器毕业论文.doc 35页

  • 1.70 MB
  • 2022-04-22 13:49:07 发布

篮球计分器毕业论文.doc

  • 35页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'篮球计分器毕业论文目录摘要1英文摘要1引言21设计方案选择31.1设计概述31.2设计要求及功能31.3设计方案比较32系统设计主要器件介绍32.1LCD1602介绍32.2单片机STC89C51介绍43系统硬件设计63.1原理框图63.2工作原理63.2.1显示电路63.2.2时钟电路73.2.3复位电路73.2.4按键电路73.2.5电源电路84系统软件设计94.1流程图整体介绍94.2各模块流程图介绍104.2.1主程序流程图114.2.2键盘程序流程图114.2.3显示程序流程图125电路仿真和实物制作125.1电路仿真12 5.2原理图绘制125.3PCB图绘制125.4电路板制作136调试与分析136.1调试工具136.2调试结果136.3调试中遇到的问题14结论与谢辞15参考文献16附件1:源程序17附件2:仿真图31附件3:原理图32附件4:PCB图33附件5:实物图34 篮球计分器的设计与实现信息工程学院应用电子技术专业何志勤摘要:本设计主要采用单片机STC89C51芯片作为核心控制元件,按键输入电路输入信号,由13个按键控制所有分数的加减以及时间的倒计时、暂停及清零,采用LCD1602作为显示器件。系统符合一般篮球计时器的工作要求,可用于平时的篮球赛,携带操作方便。关键词:STC89C51按键输入液晶显示1602计时Basketball scoringdevice design(MajorofAppliedElectronicTechnology,InformationandEngineeringcollege,JinHuaCollegeofVocationAndTechnology,HeZhiqin)Abstract:ThisdesignmainlyusestheSTC89C51chipasthecorecontrolelement,akeyinputcircuitofinputsignal,iscomposedof13keystocontrolallfractionsandtimecountdown,pauseandreset,usingLCD1602asthedisplay.Thesystemaccordswiththegeneralbasketballtimerjobrequirements,canbeusedforpeacetimebasketball,convenientcarryingandoperation.Keywords:STC89C51 keyinput  LCD1602counter timer-33- 引言体育比赛计分系统是快速采集得分数据,记录,处理,加工和传输数据的信息系统。包括各类测量等级,等级分类,命中类、制胜得分等多种分类,根据不同的体育赛事规则,体育比赛计时计分系统的的要求不同。体育游戏在规定的游戏时间决定胜负的比赛计时计分系统是球队得分一个得分型系统。定时的评分系统计时器,计分和其他电子设备,同时,根据目前的高级别体育比赛的要求的体育竞赛,体育比赛计时计分系统设备应能处理田间试验结果,现场大屏幕电视卡车和其他设备与比赛现场的高感,表演娱乐观众,为了实现功能的目标。由于其独特的优点是高度集成的单芯片,功能性,通用性,尤其是它的体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强的能力和易于使用的,所以很快微控制器推动使用,现在已经成为了系统的测量和控制应用的首选机型和新的电子产品的关键部件。本设计篮球比赛计分器就是以单片机为核心的一套系统。篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统。篮球比赛的计时计分系统由计时器,计分器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时计分系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。篮球比赛计分器是为了解决篮球比赛时计分与计时准确的问题。此装置利用单片机STC89C51完成了计时和计分的功能。本文详细地介绍了系统硬件与软件的设计过程,采用该装置可根据实际情况进行比分修改和时间的准确显示,具有低功耗,可靠性,安全性以及低成本等特点。-33- 1设计方案选择1.1设计概述本设计选用常用的STC89C51单片机作为主控制器件,由键盘模块直接向单片机输入信号,再由显示模块显示所输入的数据。1.2设计要求及功能(1)能够显示篮球比分。(2)通过加分按钮可以对A队或B队加分。(3)具有对调功能,交换场地后,A队B队分数互换。(4)具有比赛倒计时功能。(5)具有局数比分功能。(6)比分加错还可以减分调整。1.3设计方案比较(1)显示模块设计方案比较方案一:采用数码管显示各项数据需要10个以上的单个数码管,该方案成本低,但只能显示数字比较单调,且功耗大。方案二:采用1602LCD液晶显示各个数据及队伍,该方案价格不贵,不但能显示数字还能显示字母显示内容较为丰富,且功耗相对较小。综上所述采用方案二。(2)单片机选择方案比较方案一:采用单片机PIC16F877,该芯片功能多且可以重复烧录其ROM的容量高,但价格也相应要贵,功耗也大。方案二:采用单片机STC89C51,该芯片应用广泛且我们学习应用的较多利于我们使用。综上所述采用方案二。2系统设计主要器件介绍2.1LCD1602介绍1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”-33- 的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。LCD1602引脚如表2-1所示。表2-11602a引脚分配表引脚名引脚号电平输入/输出功能VSS1电源地VCC2电源(+5V)VEE3对比调整电压RS40/1输入0=输入指令1=输入数据R/W50/1输入0=向LCD写入指令或数据1=从LCD读取信息E61,1→0输入使能信号,1=读取信号1→0(下降沿)执行指令DB070/1输入/输出数据总线line0(最低位)DB180/1输入/输出数据总线line1DB290/1输入/输出数据总线line2DB3100/1输入/输出数据总线line3DB4110/1输入/输出数据总线line4DB5120/1输入/输出数据总线line5DB6130/1输入/输出数据总线line6DB7140/1输入/输出数据总线line7(最高位)A15+VCCLCD背光电源正极K16接地LCD背光电源负极2.2单片机STC89C51介绍在单片机设计模块中,采用Atmel公司的STC89C51单片机作为控制器。该单片机扩展功能强,软件编程灵活,自由度大,可通过软件编程实现各种算法和逻辑控制,并具有功耗低、体积小、技术成熟等优点,使其广泛应用于各个电子控制系统,完全能满足本系统的功能需求。单片微型计算机(SingleChip-33- Microcomputer)简称单片机,是指在一块芯片上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM或EPROM、定时器计数器、中断控制器以及串行和并行IO接口等部件,构成一个完整的微型计算机。对于简单的输入和输出控制,51显然最合适,51单片机是8位的,采用总线结构,但是具有控制简便,接口简单,工作可靠,价格经济,能耗少,容易实现系统小型化等特点。本次设计采用常用的STC89C51,其基本结构框图如图2-1。CPU4KBROM128字节的RAM定时器计数器并行IO接口串行接口中断系统时钟源图2-1单片机结构框图图2-2STC89C51引脚图STC89C51简介:P0:双向I/O口,寻址外部程序存储器时分时作为双向8位数据口和输出低8位地址复用口;不接外部存储器时可作为8位准双向I/O口使用。引脚为39-32。P1:8位双向I/O口,P1口写入’1’后可作为输入,引脚为1-8。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入,引脚为19。XTAL2:来自反向振荡放大器的输出,引脚为18。STC89C51的引脚图如图2-2所示。-33- 3系统硬件设计通过分析题目的要求,此次系统设计主要可分为三大模块,一是系统显示模块,二是单片机设计模块,三是键盘输入模块。3.1原理框图该系统包括单片机STC89C51,时钟电路,复位电路,按键控制电路,及LCD显示器五部分。该电路控制简单,清晰明了,用LCD液晶显示,避免了用LED的复杂接线,便于实体硬件电路的焊接。其系统框图如图3-1所示。LCD显示器时钟电路STC89C51复位电路按键电路图3-1系统框图3.2工作原理3.2.1显示电路该显示器的RS,RW,E端与P2相连,引脚的作用分别是:RS=0输入指令,RS=1输入数据,RW=0向LCD写入指令或数据,RW=1从LCD读取信息,E是使能信号。D0~D7与P3相连是数据总线。图3-2是LCD1602电路。图3-2LCD1602显示电路-33- 3.2.2时钟电路时钟电路在单片机系统中起着非常重要的作用,是为保证系统正常工作的基础,在一个单片机系统中,时钟是保障系统正常工作的基准震荡定时信号。图3-3是晶振电路,主要有晶振和外围电路组成,晶振频率大小决定单片机的快慢,我们这里采用的是12MHZ,另外有2个30P的电容。其中接地用来削减谐波对电路的稳定性的影响。图3-3时钟电路图3.2.3复位电路单片机系统的复位电路我们采用的是上电加按钮的复位电路形式,电阻采用220欧的阻值,采用22μ的电容。其电路连接方式如图3-4。当单片机的复位引脚RESET出现2个机器周期以上的高电平时,单片机就执行复位操作。图3-4复位电路图3.2.4按键电路本设计共有13个设置按键,分别为分数比分的+1,+2,+3,-1,暂停,清零,局数比分的+1,交换分数位置的按键。按键与P1,P3口相接。其电路图如图3-5。-33- 图3-5按键电路图当按下不同的按键时,显示器上显示相应的数据,从上到下第一、二、三个按键控制左边显示的队伍的分数+1,+2,+3,第四个按键控制局数比分显示在左边的队伍+1第五个按键控制右边的队伍+1,第六、七、八个按键控制右边显示的队伍的分数+1,+2,+3,第九个按键控制左边显示的队伍的分数-1,第十个按键控制右边显示的队伍的分数-1,第十一个按键控制交换场地是队伍比分的位置交换,第十二个按键控制倒计时的开始暂停,第十三个按键控制LCD的初始化。3.2.5电源电路使用USB接口数据线给系统供电,如图3-6所示。-33- 图3-6电源电路及实物4系统软件设计4.1流程图整体介绍定时器T0,T1及LCD的初始化,T0计每一小节的倒计时时间,T1计当前时间。按键与P1,P3口相接,读取P1,P3口的数据判断是否有按键按下,若没有按键按下则继续返回读取P1,P3口的数据。若有按键按下就判断是哪个键按下,各个键的作用是:显示在左边的队伍加一分,加二分,加三分;显示在右边的队伍加一分,加二分,加三分;两队得分的减一,开始/暂停,交换比分位置,两队的节次比分加一,初始化。等待按键释放并将时间,分数,节次经P2,P0口输出在LCD上显示。其总的流程图如图4-1。-33- 图4-1整体程序流程图4.2各模块流程图介绍主程序主要调用了两个子程序,分别是1602LCD液晶显示程序、按键输入程序。由按键扫描程序输入信号和数据给单片机,单片机接受信号后处理并输送给1602LCD液晶显示模块,显示模块接受数据后显示所输入的值。-33- 4.2.1主程序流程图图4-2主程序流程图主程序的主要功能是负责读取按键输入的数据然后传输给1602LCD液晶显示模块。按键每按一次就读取一次数据并且传输出去。主程序流程图如图4-2。4.2.2键盘程序流程图图4-3键盘程序流程图-33- 这次设计有十三个按键每个按键都有不同的功能。有两队的比分的加一加二加三和减一,一个开始暂停键,一个交换比分位置的按键和一个初始化数据的按键,如图4-3。4.2.3显示程序流程图图4-4显示程序流程图液晶显示程序很简单主要就是读取单片机传输过来的数据然后显示在液晶屏上,如图4-4。5电路仿真和实物制作使用各种学过的软件进行硬件设计。5.1电路仿真使用仿真软件Proteus画出仿真原理图,并加载程序测试仿真。在画原理图时需要注意各个器件的型号大小,如果有错误也会导致仿真失败。仿真图如附件2所示。5.2原理图绘制用AltiumDesigner根据仿真图画出原理图再添上电源模块。打开软件后需要新建工程后才能画原理图及PCB图。画原理图时,先加载自己所需要的器件库从库里选择器件,但有一些器件在软件库里是没有的需要自己画。所以需要新建一个库再在库里画出自己所需要的器件并加载该库,注意各个引脚不要连错。原理图如附件3所示。5.3PCB图绘制-33- 在画好的原理图后,点击设计下的第一个能将原理图转换成PCB图。再在PCB界面内排版好各个器件并画好所需要的板子大小,然后开始布线。布线可以手动布线也可以自动布线但自动布线会出现许多错误所以我选择手工布线。在该界面还可以进行跳线等,需要注意的是在布线前要选用单面板、设置焊盘的大小以及线的宽度以免出现交叉并线等问题。PCB图如附件4所示。5.4电路板制作将绘制好的电路板用转印纸打印出来,注意滑的一面面向自己,一般打印两张电路板,即一张纸上打印两张电路板。在其中选择打印效果最好的制作线路板。覆铜板,也就是两面都覆有铜膜的线路板,将覆铜板裁成电路板的大小,不要过大,以节约材料用细砂纸把覆铜板表面的氧化层打磨掉,以保证在转印电路板时,热转印纸上的碳粉能牢固的印在覆铜板上,打磨好的标准是板面光亮,没有明显污渍。将打印好的电路板裁剪成合适大小,把印有电路板的一面贴在覆铜板上,对齐好后把覆铜板放入热转印机,放入时一定要保证转印纸没有错位。一般来说经过2-3次转印,电路板就能很牢固的转印在覆铜板上。热转印机事先就已经预热,温度设定在160-200摄氏度,由于温度很高,操作时注意安全。先检查一下电路板是否转印完整,若有少数没有转印好的地方可以用黑色油性笔修补。然后就可以腐蚀了,等线路板上暴露的铜膜完全被腐蚀掉时,将线路板从腐蚀液中取出清洗干净,这样一块线路板就腐蚀好了。腐蚀液的成分为浓盐酸、浓双氧水、水,比例为1:2:3,在配制腐蚀液时,先放水,再加浓盐酸、浓双氧水,若操作时浓盐酸、浓双氧水或腐蚀液不小心溅到皮肤或衣物上要及时用清水清洗,由于要使用强腐蚀性溶液,操作时一定注意安全。线路板上是要插入电子元件的,所以就要对线路板钻孔了。依据电子元件管脚的粗细选择不同的钻针,在使用钻机钻孔时,线路板一定要按稳,钻机速度不能开的过慢。钻孔完后,用细砂纸把覆在线路板上的墨粉打磨掉,用清水把线路板清洗干净。完成电路板后焊接元器件并通电检测。6调试与分析6.1调试工具数字万用表,电脑,小刻刀,下载串口,电源线等。6.2调试结果倒计时方式显示单节比赛剩余时间,可暂停。显示双方得分,按键输入可修改分值,设置六个按键分别对两队加分1,2,3,如有错误可进行分值的相应修改设置一个按键每次减1分。显示每一个节次,按键输入可修改局数比分,交换场地时,按键可交换两队分数的位置。比赛结束后,按键可使数据初始化。-33- 6.3调试中遇到的问题问题一:在将程序烧录单片机后液晶显示屏上只显示一排黑格,没有正常显示。解决措施:在检查硬件后大致发现没问题就从软件查找,发现1602LCD的RS,RW,E的管脚与硬件不符所以改正。问题二:在改正软件后确定了软件正确无误后发现自己的程序烧录到单片机后液晶屏上仍不能显示,但在同学的板子上能显示,同学的程序也能在我的板子上显示唯独自己的程序不能在自己的板子上显示。解决措施:由于粗略检查过一遍硬件大致没问题后感觉无从下手再求助了老师和同学后,又仔细的检查了一遍板子,终于发现有两条不该连一起的线居然相通了所以用刀子分开后就正常显示了。问题三:在仿真的时候液晶显示屏上显示不出我所设置的数字样式,并且有些地方的显示会乱跳。解决措施:检查了一遍程序发现数组定义的过少,自己实际所使用的多于定义的。将数组定义成大于自己使用的就能正常显示了,Tim【10】改成了Tim【16】。-33- 结论与谢辞通过本次本次课程设计的实践,发现了自己的很多不足,首先是自己知识掌握很多都一知半解,实践经验及动手能力比较薄弱,不管是程序设计阶段还是实际调试阶段都出现了很多错误。在设计过程中,我经历了很多,也学到了很多,对于程序的改写一筹莫展的时候也有,此次设计是我们专业课程知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一个必不少的过程。“实践出真知”,通过这次课程设计,我认识到只有理论联系实践才可以把所学的东西真正掌握。此次课程设计让我进一步了解了单片机的实际设计过程,了解了基本的设计方法和调试过程的基本步骤,以及学会了制板。在本次设计的实现过程中,我遇到了很多困难,同时也得到了老师和同学的帮助,在他们的热心帮助下,才使我的这项设计得以实现。在这过程中出现了很多问题,在此特别感谢同学们的细心指导和帮助,以及指导老师范灵芝对我的系统设计和硬件调试过程帮助和指导,有了他们我的设计才有了实物制作成功的保证。再次感谢同学们的细心指导和帮助,还要特别地感谢我的指导老师范灵芝老师,在设计过程中多次问我的设计进度,解决设计中所出现的问题,不断给我提出问题和建议,以及帮我反复修改论文,同时也要感谢信息学院为我提供了良好的实验环境,给了我一个动手做设计的机会。在此我对你们表示衷心的感谢。-33- 参考文献[1]万文略编著.单片机原理及应用.重庆:重庆大学出版社,2004.[2]张建勋编著.C语言程序设计教程.北京:清华大学出版社,2008.[3]胡建明编著.MCS-51单片机篮球计分器的设计[N].期刊论文.广西轻工业.2008-9.[4]马汝星.单片机应用系统设计与制作[M].人民邮电出版社,2010.[5]李广弟.单片机基础[M].北京:北航出版社,2010.[6]胡学海.单片机原理及应用系统设计[M].北京:京电子工业出版社,2005.[7]彭为.单片机典型系统设计实例精讲[M].北京:电子工业出版社,2006.附件附件1源程序-33- #include#include#include"key.h"#include"xianshi.h"#include"exsample.h"//以下为演示程序的函数定义signedchartim[16];sbitRSPIN=P2^5;//RS对应单片机引脚sbitRWPIN=P2^6;//RW对应单片机引脚sbitEPIN=P2^7;//E对应单片机引脚sbitK1=P3^2;sbitK2=P3^3;sbitK3=P3^4;sbitK4=P1^0;sbitK5=P1^1;sbitK6=P1^2;sbitK7=P1^3;sbitK8=P1^4;sbitK9=P1^5;sbitK10=P1^6;sbitK11=P1^7;sbitK12=P3^0;sbitK13=P3^1;unsignedcharSM[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};unsignedcharWH[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};unsignedcharC,r,p;biti,a;signedcharx;unsignedchardataCXPOS;//列方向地址指针(用于CHARLCDPOS子程序)unsignedchardataCYPOS;//行方向地址指针(用于CHARLCDPOS子程序)voidputchar(unsignedcharc);//在(CXPOS,CYPOS)字符位置写字符子程序voidputstrxy(unsignedcharcx,unsignedcharcy,unsignedcharcode*s);voidkey(void);voidexsample(void);//演示程序voidcharfill(unsignedcharc);//整屏显示A代表的ASCII字符子程序-33- voidlcdreset(void);//SMC1602系列液晶显示控制器初始化子程序//-------------------------------------------------------------------------------//以下CXPOS,CYPOS变量用于指示当前操作字符的位置的预定义voidlcdwc(unsignedcharc);voidlcdwd(unsignedchard);voiddelay3ms(void);voidlcdwaitidle(void);voidcharcursornext(void);voidcharlcdpos(void);voidputchar(unsignedcharc);voidputstrxy(unsignedcharcx,unsignedcharcy,unsignedcharcode*s);voidcharfill(unsignedcharc);//-------------------------------------------------------------------------------//以下lcdwc,lcdwd,lcdrd为HD44780兼容芯片的MCS51模拟口线方式的基本子程序,//lcdwaitidle为内部子程序.//-------------------------------------------------------------------------------//-------------------------------------------------------------------------------//子程序名称:voidlcdwaitidle(void).//功能:忙检测.//修改日期:2009.08.12//修改人:chujianjun@sunman.cn,tanchao@sunman.cn//-------------------------------------------------------------------------------voidlcdwaitidle(void)//忙检测子程序{unsignedchari;P0=0xff;RSPIN=0;//RS=0RW=1E=高电平RWPIN=1;EPIN=1;for(i=0;i<20;i++)if((P0&0x80)==0)break;//D7=0表示LCD控制器空闲,则退出检测EPIN=0;}voidlcdwc(unsignedcharc)//送控制字到液晶显示控制器子程序{-33- lcdwaitidle();//HD44780液晶显示控制器忙检测RSPIN=0;//RS=0RW=0E=高电平RWPIN=0;P0=c;EPIN=1;_nop_();EPIN=0;}//-------------------------------------------------------------------------------//子程序名称:voidlcdwd(unsignedchard).//功能:送数据到液晶显示控制器.//修改日期:2009.08.12//修改人:chujianjun@sunman.cn,tanchao@sunman.cn//-------------------------------------------------------------------------------voidlcdwd(unsignedchard)//送控制字到液晶显示控制器子程序{lcdwaitidle();//HD44780液晶显示控制器忙检测RSPIN=1;//RS=1RW=0E=高电平RWPIN=0;P0=d;EPIN=1;_nop_();EPIN=0;}voiddelay3ms(void)//延时3MS子程序{unsignedchari,j,k;for(i=0;i<3;i++)for(j=0;j<64;j++)for(k=0;k<51;k++);}voidlcdreset(void)//SMC1602系列液晶显示控制器初始化子程序{//1602的显示模式字为0x38lcdwc(0x38);//显示模式设置第一次delay3ms();//延时3MSlcdwc(0x38);//显示模式设置第二次-33- delay3ms();//延时3MSlcdwc(0x38);//显示模式设置第三次delay3ms();//延时3MSlcdwc(0x38);//显示模式设置第四次delay3ms();//延时3MSlcdwc(0x08);//显示关闭lcdwc(0x01);//清屏delay3ms();//延时3MSlcdwc(0x06);//显示光标移动设置lcdwc(0x0C);//显示开及光标设置}voidcharfill(unsignedcharc)//整屏显示A代表的ASCII字符子程序{for(CXPOS=CYPOS=0;1;){putchar(c);//定位写字符charcursornext();//置字符位置为下一个有效位置if((CXPOS==0)&&(CYPOS==0))break;}}//-------------------------------------------------------------------------------//子程序名称:voidputstrxy(unsignedcharcx,unsignedcharcy,unsignedchar*s).//功能:在(cx,cy)字符位置写字符串.//修改日期:2009.08.11//修改人:chujianjun@sunman.cn,tanchao@sunman.cn//-------------------------------------------------------------------------------voidputstrxy(unsignedcharcx,unsignedcharcy,unsignedcharcode*s){//在(cx,cy)字符位置写字符串子程序CXPOS=cx;//置当前X位置为cxCYPOS=cy;//置当前Y位置为cyfor(;*s!=0;s++)//为零表示字符串结束,退出{putchar(*s);//写1个字符charcursornext();//字符位置移到下一个}}//-------------------------------------------------------------------------------//子程序名称:voidputchar(unsignedcharc).-33- //功能:在(CXPOS,CYPOS)字符位置写字符.//修改日期:2009.08.11//修改人:chujianjun@sunman.cn,tanchao@sunman.cn//-------------------------------------------------------------------------------voidputchar(unsignedcharc)//在(CXPOS,CYPOS)字符位置写字符子程序{charlcdpos();//设置(CXPOS,CYPOS)字符位置的DDRAM地址lcdwd(c);//写字符}//-------------------------------------------------------------------------------//以下charlcdpos,charcursornext,lcdreset为HD44780兼容芯片的液晶显示控制器的//16字符X2行的SMC1602系列标准字符点阵型液晶显示模块的接口程序.//-------------------------------------------------------------------------------//子程序名称:voidcharlcdpos(void).//功能:设置(CXPOS,CYPOS)字符位置的DDRAM地址.//修改日期:2009.08.11//修改人:chujianjun@sunman.cn,tanchao@sunman.cn//-------------------------------------------------------------------------------voidcharlcdpos(void)//设置(CXPOS,CYPOS)字符位置的DDRAM地址{CXPOS&=0X0f;//X位置范围(0到15)CYPOS&=0X01;//Y位置范围(0到1)if(CYPOS==0)//(第一行)X:第0----15个字符lcdwc(CXPOS|0x80);//DDRAM:0----0FHelse//(第二行)X:第0----15个字符lcdwc(CXPOS|0xC0);//DDRAM:40----4FH}//-------------------------------------------------------------------------------//子程序名称:voidcharcursornext(void).//功能:置字符位置为下一个有效位置.//修改日期:2009.08.11//修改人:chujianjun@sunman.cn,tanchao@sunman.cn//-------------------------------------------------------------------------------voidcharcursornext(void)//置字符位置为下一个有效位置子程序{-33- CXPOS++;//字符位置加1if(CXPOS>15)//字符位置CXPOS>15表示要换行{CXPOS=0;//置列位置为最左边CYPOS++;//行位置加1CYPOS&=0X1;//字符位置CYPOS的有效范围为(0到1)}}voidmain(void)//主程序{tim[9]=1;tim[6]=1;TMOD=0x01;EA=1;ET0=1;TR0=1;TH0=0x3c;TL0=0xb0;lcdreset();//液晶显示控制器初始化charfill("");//显示清屏while(1){key();exsample();//调用演示程序}}voidkey(void){if(K1==0){while(K1!=0xff);tim[2]++;if(tim[2]>9){tim[2]=0;tim[1]++;if(tim[1]>9)-33- {tim[1]=0;tim[0]++;}}}if(K2==0){while(K2!=0xff);tim[2]=tim[2]+2;if(tim[2]>9){tim[2]=0;tim[1]++;if(tim[1]>9){tim[1]=0;tim[0]++;}}}if(K3==0){while(K3!=0xff);tim[2]=tim[2]+3;if(tim[2]>9){tim[2]=tim[2]%10;tim[1]++;if(tim[1]>9){tim[1]=0;tim[0]++;}}}if(K4==0){while(K4!=0xff);tim[5]++;if(tim[5]>9){tim[5]=0;tim[4]++;if(tim[4]>9)-33- {tim[4]=0;tim[3]++;}}}if(K5==0){while(K5!=0xff);tim[5]=tim[5]+2;if(tim[5]>9){tim[5]=0;tim[4]++;if(tim[4]>9){tim[4]=0;tim[3]++;}}}if(K6==0){while(K6!=0xff);tim[5]=tim[5]+3;if(tim[5]>9){tim[5]=tim[5]%10;tim[4]++;if(tim[4]>9){tim[4]=0;tim[3]++;}}}if(K7==0){while(K7!=0xff);tim[2]--;if(tim[2]<0){tim[2]=9;tim[1]--;if(tim[1]<0){tim[1]=9;tim[0]--;-33- if(tim[0]<0){tim[0]=tim[1]=tim[2]=0;}}}}if(K8==0){while(K8!=0xff);tim[5]--;if(tim[5]<0){tim[5]=9;tim[4]--;if(tim[4]<0){tim[4]=9;tim[3]--;if(tim[3]<0){tim[5]=tim[4]=tim[3]=0;}}}}if(K9==0){while(K9!=0xff);i=~i;C=tim[2]+tim[1]*10+tim[0]*100;tim[2]=tim[5];tim[1]=tim[4];tim[0]=tim[3];tim[5]=C%10;tim[4]=(C/10)%10;tim[3]=C/100;p=tim[7];tim[7]=tim[8];tim[8]=p;}if(K10==0){while(K10!=0xff);a=~a;}if(K11==0)-33- {while(K11!=0xff);i=0;a=0;tim[0]=0;tim[1]=0;tim[2]=0;tim[3]=0;tim[4]=0;tim[5]=0;tim[6]=1;tim[7]=0;tim[8]=0;tim[9]=1;tim[10]=0;tim[11]=0;tim[12]=0;}if(K12==0){while(K12!=0xff);tim[7]++;}if(K13==0){while(K13!=0xff);tim[8]++;}}voidtime0()interrupt1{TH0=0x3c;TL0=0xb0;x++;-33- if(x>20&a==1){x=0;tim[12]--;if(tim[12]<0){tim[12]=9;tim[11]--;if(tim[11]<0){tim[11]=5;tim[10]--;if(tim[10]<0){tim[10]=9;tim[9]--;if(tim[9]<0){a=~a;tim[9]=1;tim[10]=0;tim[11]=0;tim[12]=0;tim[6]++;}}}}}}voidexsample(void)//演示程序{-33- if(i==0){putstrxy(0,0,"A");//在(4,0)位置开始显示字符串putstrxy(11,0,"B");}if(i==1){putstrxy(0,0,"B");//在(4,0)位置开始显示字符串putstrxy(11,0,"A");}putstrxy(1,0,":");putstrxy(12,0,":");putstrxy(7,1,":");CXPOS=2;CYPOS=0;putchar(WH[tim[0]]);//A队百CXPOS=3;CYPOS=0;putchar(WH[tim[1]]);//A队十CXPOS=4;CYPOS=0;putchar(WH[tim[2]]);//A队个CXPOS=13;CYPOS=0;putchar(WH[tim[3]]);//B队百CXPOS=14;CYPOS=0;putchar(WH[tim[4]]);//B队十CXPOS=15;CYPOS=0;putchar(WH[tim[5]]);//B队个CXPOS=7;CYPOS=0;putchar(WH[tim[6]]);//比赛场次-33- CXPOS=2;CYPOS=1;putchar(WH[tim[7]]);//左边胜场CXPOS=14;CYPOS=1;putchar(WH[tim[8]]);//右边胜场CXPOS=5;CYPOS=1;putchar(WH[tim[9]]);//比赛时间分的十位CXPOS=6;CYPOS=1;putchar(WH[tim[10]]);//分的个位CXPOS=8;CYPOS=1;putchar(WH[tim[11]]);//秒的十位CXPOS=9;CYPOS=1;putchar(WH[tim[12]]);//秒的个位}附件2.仿真图-33- 附件3.原理图-33- 附件4.PCB图-33- 附件5.实物图-33- -33-'