版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
概述单片机将我们带入了智能的电子领域,许多复杂的系统若用单片机进行设计,便能达到电路更简单、功能更齐全的效果。若把经典的电子系统当作一个僵硬的电子系统,那么智能的现代电子系统则是一个具有“生命”的电子系统。单片机的使用领域已十分广泛,几乎很难找到哪个领域没有单片机的踪迹。智能仪表、实时工控、通讯设备、导航系统、家用电器等,各种产品一旦用上了单片机,就能起到使产品升级换代的功效。单片机具有集合程度非常高、外形小、系统控制功能强与扩展空间大等特点,而且能快速地处理指令,有很高的稳定性,因此在仪器仪表的制造领域占有一席之地【1】。就其应用性而言,单片机改变了传统的测量方式、引领了仪器仪表制造应与用技术的浪潮。使用此项技术使仪器仪表实现了更加智能、应用更加广泛、适用场景更加多变的功能。本设计是由STC89C52RC单片机编程控制LCD1602显示器做显示的篮球计时计分系统。本系统具有比赛定时设置、赛程时间暂停、甲、乙双方比分以及比赛节数。它具有价格低廉、性能稳定、操作方便且易携带等特点。本设计是基于单片机的计时计分系统,通过串口通信动态传输数据,使计时计分系统有了更多更完善的功能。单片机系统的硬件结构给了篮球计分器系统“身躯”,而单片机的应用程序赋予其新的“生命”。2篮球计数器系统的总体设计2.1基本功能介绍(1)赛程时间设置在计时电路中,按键开关K1、K4、K5、K6用来设置时间。比如:比赛时上半场时间为10分,在上电显示开机画面,则通过按K1键,进入节时间调整;再分别按K5、K6键对时间加减,默认为12分钟一节,设置好后按K4键退出时间设置,等待比赛开始。当比赛规定时间结束时,双方分数仍然相同,这时系统默认再进行5分钟加时,不可调整。(2)赛程时间启/停设置时间设置好后按K8键开始进行比赛时间倒计时,倒计时开始后再按一次,比赛时间暂停。可随时进行时间暂停。(3)比分刷新控制由于在比赛中,甲、乙两队的比分是不断变化的,所以需设置比分刷新控制装置;此功能由K1-K6完成:K1键:完成甲队加1分操作K2键:完成甲队减1分操作K3键:完成甲队局数比分加1分操作K4键:完成甲队局数比分减1分操作K5键:完成乙队加1分操作K6键:完成乙队减1分操作K7键:完成乙队局数比分加1分操作K8键:完成乙队局数比分减1分操作另外通过K8可以开始比赛(4)赛程结束报警当比赛结束时,系统会自动发出报警声,提示比赛结束,之后报警结束。2.2系统构成框图系统的主要功能模块方框图如图2-1所示。图2-1系统构成框图2.3篮球计时计分器的工作过程整个篮球比赛计时计分器的工作过程如下:首先在比赛之前,接通电源,系统自动复位,此时第一行显示双方总分数为000和000;第二行依次显示:节数、节倒计时时间、24秒倒计时时间。开机后显示Welcometouse,如果不需要设定单节比赛时间的话直接按下K2按键,默认12分钟每节比赛时间,进入比赛界面,如果需要需要设定按下K1按键后显示set-time:00,按K5+,K6-,设定完成后按K4即可进入比赛界面。进入比赛界面后,按K8开始计时比赛,此时可以加2分和3分,加分后自动暂停,重新24秒计时,需再次按下K8继续比赛,比赛期间不可加1分,1分只有罚球可得,罚球时是暂停的,所以在暂停时A队和B队加一分才管用,两罚不进按下k5之后重新计时继续比赛。24秒内如果没有加分,进攻违例报警2秒,按K8继续开始比赛。如果四节比赛时间到后比分相同自动进入加时赛。加时赛5分钟,时间不可修改。由于对于各队的分数加减是利用系统中的中断程序完成,并且在将计时电路的中断优先级设计成大于加减分的中断优先级,故而计时程序电路在此过程中可以正常工作。比赛的中途,假如有一支队伍因换人而请求暂停比赛,得到裁判的同意,操作员即可对应的按键,就可以实现对比赛暂停计时的功能,恢复比赛时,再次按下对应的按键就可实现对比赛的继续计时的功能。至本场比赛结束,蜂鸣器会发出2秒钟响声,表示比赛结束。3系统的硬件设计3.1系统硬件部分组成:系统硬件主要是由单片机STC89C52RC、显示电路、报警电路和按键开关四个部分组成。(1)器件的选择本系统在设计过程中主要选取了以下一些器件:单片机:STC89C52RC。显示器件:LCD1602显示器。报警器件:5V有源蜂鸣器。按键:独立式按键。(2)显示部分硬件的设计1.LCM1602的接口信号说明如表3-1:编号引脚符号功能说明编号引脚符号功能说明1VSS电源地9D2DATAI/O2VDD电源正极10D3DATAI/O3VL液晶显示偏压信号11D4DATAI/O4RS数据/命令选择端(H/L)12D5DATAI/O5R/W读/写选择端(H/L)13D6DATAI/O6E使能信号14D7DATAI/O7D0DATAI/O15BLA背光正极8D1DATAI/O16BLK背光负极表3-1LCM1602的接口信号2.基本操作时序如下:1)读状态:RS=L,RW=H,E=H2)写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲3)读数据:RS=H,RW=H,E=H4)写数据:RS=H,RW=L,D0~D7=数据,E=高脉冲3.初始化设置1)显示模式设置如表3-2:表3-2显示模式设置2)显示开/关及光标设置如表3-3:表3-3显示开/关及光标设置3.2时钟频率电路设计时钟电路的作用在于能够发生单片机在运行时的时间单位的时钟脉冲,这种脉冲式控制其工作的信号,可以监管单片机按照指挥进行运作。在此过程中,中央处理器会先从数据寄存器中提取所参照的指令的代码,紧接着对指令进行翻译,然后会根据时序电路发出的信号去实现指令所指导的步骤任务【2】。CPU发出的时序信号有两类,一类用于内部对各个实现不同功能的组件的控制,另一类用于对片外存储器或I/O端口的控制外部时钟方式外部时钟方式是使用外部振荡器产生的脉冲信号,常用于多片单片机同时工作,以便于多片单片机之间的同步,一般为低于12MHz的方波,常见的89C52单片机的外部接法:外部的时钟源直接连接到XTAL1端,XTAL2端悬空NC外部振荡信号输入.至于内部接法,在单片机的组成部分中有一个可以实现提高增益的组件,该组件为反向放大器【3】。其输入端单片机的引脚XTAL1输出为XTAL2。电路如下图图3-4所示。图3-4振荡电路XTAL2XTALGND内部时钟电路的电路中所使用的电容C1和C2的典型值通常取为30pF左右,对在外部连接的电容的值虽然没有具体的规格上限值,可是所使用的电容的规格大小还是对晶体振荡器频率及其稳定程度、产生振荡的速度都具有很大的影响。晶体振荡器的频率范围通常是在1.2MHz-12MHz之间,晶振的频率提高,系统时钟时钟频率也会随之而提高,单电容必须安置在得与单片机芯片靠近的位置,为了防止产生对应的附加电容,并以此来提高振荡器的稳定程度、可靠程度【4】。3.3复位电路的设计单片机在开始运行到正常工作的过程中时或正在工作时由于外部的干扰而导致程序失去控制,或工作中由于程序错误导致单片机处于一种死循环的状态,每当在此种情况下都需要通过复位电路来实现系统的复位操作。复位电路的作用是使系统的处理器CPU以及外部电路与系统的其他部分的功能部件能迅速地恢复到一正常的初始运行状态,而且可以从此状态正常开始工作下去。以下给大家介绍一种名为看门狗的复位电路:图3-5看门狗型复位电路对于系统的软件程序设计是使电路稳定工作的主要原因,即是按一定时间发送给复位电路的相应信号的寄存位置,在通常情况下,这个程序都会被安置在系统内部的定时器的内部中断子程序中。但是,经常会因为电路的设计导致程序不能正常工作,其产生的缘由是:每当系统产生错误时系统的定时器恢复到初始状态以及断开之时,产生的错误状态不能被此电路纠正回来。这是由于系统定时断开信号会可以持续的发送,就算在错误的情况下,此复位电路也能被正常复位【5】。为了应对这种情况,在系统中添加了定时的预定的设计程序。是在系统初始状态时加入一个可寻信号地址,使程序在这个地址里面运行一个预设的系统的断开程序与另外的一个死循环的程序。如此,即是在程序发生错误的时候,它进入之前预定的程序的概率会变大,并且只要进入预定的程序,系统起定时脉冲作用的功能就会停止工作,此时,此复位电路就会产生一种可以将中央处理器复位的脉冲信号。即达到复位的效果,实现复位的功能。3.4显示电路的设计同键盘一样,显示器也是人机交流的重要组成部分。计算机的运行结果和运行状态可以通过显示器显示出来。单片机应用系统中常用的显示器有LED和LCD两种方式。LED显示最为普遍,发光二极管LED(LightEmittingDiode)是一种通电后能发光的半导体器件,其导电性质与普通二极管类似。LED数码显示器就是由发光二极管组合而成的一种新型显示器件,但是由于低功耗的要求,LCD显示器越来越被广泛地使用。LED数码管显示器是由若干个发光二极管组成的,当发光二极管导通时,相应的点或线段发光,将这些发光二极管排成一定的图形,控制不同组合的二极管导通,就可以显示出不同的字形和符号。单片机系统中常用的LED显示器为七段显示器,再加上一个小数点,因此也可以把它称之为八段数码管显示器【6】。其机构形式有共阴极和共阳极两种。共阴极是把所有组成八段数码管的发光二极管的阴极连在一起,通常接地,通过控制每一只发光二极管的阳极电平来使其发光或熄灭,阳极为高电平则发光,阳极为低电平则熄灭;共阳极是把组成八段数码管的所有发光二极管的阳极连起来,通常为高电平(如+5V),通过控制每一只发光二极管的阴极电平的高低来使其发光或是熄灭,阴极为低电平发光,为高电平则熄灭。图中的com端在应用的时候可以作为位选端,8只发光二极管被分成两组所以有两个com端,在使用的时候它们并联起来。(1)共阴极接法刚好与共阳极相反,对于共阴极LED显示器,当公共端接地时(为0电平),而阳极dp、g、f、e、d、c、b、a各段位01110011时,显示“P”字符,也就是说对于共阴极LED显示器,“P”字符的字形代码是073H。(2)LED数码显示器的显示段码为了显示字符,要为LED显示器提供显示段码(或字形代码),组成一个“8”字形字符的7段,再加上1个小数点位,共8段,因此提供给LED显示器的显示段码为1的字符,各段码的对应关系如图3-6所示。图3-6数码管的引脚结构图3.5开关键盘的设计按钮开关的本质属于机械、有弹性的开关。当开启开关按钮时,即按下按钮,按钮内置的复位弹簧被压缩,使静片触点与动片触点相接触,接通了键盘引脚,当松开按钮时,按钮内置的复位弹簧弹开动片触点,使静片触点与动片触点相分离,断开键盘引脚。由于按钮内的弹簧具有弹性,使按键从按下到稳定接触要经历一段时间,并在这段时间内会发生抖动。按键抖动波形如图3-7所示。图3-7按键抖动电压波形常见的电子控制装置中都可以实现对数据的输入或操作设置特殊功能。因为它有按键输入电路的设计,在整个控制系统电路中,如果按键数不多可以采用独立式按键的方法。单稳态锁存器常常是独立式按键用来消除抖动的方式,所以判定按下了哪个键可以通过检测输入线的电平状态就可以实现【4】。当在按键较多的时候常采用软件的方法消除抖动,按键开关输入目前面临的问题是如何针对按键抖动采取合适措施处理,和确定是否按下了按键。判定是否有按下按键主要取决于跟按键相连接的引脚状态是处于高电平状态还是低电平状态。一般来说分为硬件和软件两种消除按键抖动的方法。4系统软件设计4.1软件任务分析显示部分软件的设计根据硬件单位连接然后进行软件的编写。开关电路时间长短与开关的机械性有关,一般为5-10ms。单片机对非编码键盘的控制方式:独立式键盘的编程。复位电路:复位的作用是使中央处理器CPU以及其他功能部件都恢复到一个确定的初始状态,并从这个状态重新开始工作。4.2主程序设计主程序主要由系统初始化段、开中断、键盘识别、键值处理、两个4位共阴极LED显示器扫描显示子程序和中断处理子程序等组成。通过对以上各段和子程序的结合,以实现系统功能。该系统主程序流程图如下图4-1所示。图4-1主程序流程图4.3键盘识别及处理程序设计按键识别及处理程序主要由键盘识别和键值处理组成。其中键盘识别子程序不断地对键盘进行判断是否有键按下。当有键按下时则转到键码处理即甲、乙总分处理子程序对相应按键进行相应处理,即可实现对甲、乙两队总分的计算与处理。键盘识别即依次判断第一列、第二列、第三列、第四列是否有键按下。如果有键按下,先得出列,再反向赋值得出行,最后得出所在行和列的位置。键值处理即先定义0~9这九个按键,再对三次按键值进行保存,再来判断是甲队还是乙队加减分,再判断是加还是减,最后判断加或减多少分,实现分别给甲、乙总分进行加分和减分。键值处理即甲、乙总分处理子程序流程图如下图4-2所示。图4-2键值处理子程序流程图4.4显示子程序设计由于该系统使用的是8位LED显示器显示计分器比分,因此显示采用动态扫描显示方法,即由显示器扫描显示子程序控制显示器逐个循环从左至右依次点亮各个显示器。这样虽然在任一时刻只要一个显示器点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮效果一样。显示器扫描显示子程序显示每一位用如图4-3所示流程方法完成。图4-3显示子程序流程图4.5复位程序设计按钮与单片机P0.6/AD6引脚相连,当每次按下该按钮后,系统将通过软件实现对计分复位功能。在主程序运行过程中,只要系统识别到与单片机P0.6/AD6引脚相连的按键按下,程序则会转去执行复位程序,完成对甲、乙总分寄存单元的清零,显示器各位的显示数寄存单元的复位,执行完毕后,返回主程序。流程图如4-4所示。图4-4复位程序流程图第5章系统调试5.1软件模拟调试本设计主要是用proteus软件绘图以及伟福软件进行编程仿真的。调试步骤由两个部分组成:首先,确定程序中错误的确切性质和位置;然后,对程序代码进行分析,确定问题的原因,并设法改正这个错误。具体地说,由以下步骤组成:1.从仿真显示出来的结果来深入,进行逆向的思考,找出软件程序中有问题的部分;2.仔细分析调试所使用的程序代码,发现程序有误的部分;3.对找到的错误或者不当的代码进行从新编写,订正程序;4.对于修改过的程序进行重新的测试,若测试结果正常,达到修改的目的,可以实现预期的功能,则进行下一步奏,否则回到上一步奏,继续修改。5.2硬件接线这个电路是在老师的指导下设计的,电路的设计在理论上完全行得通,不过接线是设计中最关键的一步,我的接线原则是从全局出发,逐个模块连接调试,最后总体调试。在这个指导思想下,我的安装还算是是成功的。逐个模块接线再调试,可以为总体调试省去很多时间,只要每个模块正常运行,几个模块通过地址总线连接之后,就不会出现太大的问题了。调试前的直观检查:1、连线是否正确,在通电之前应先检查一下电路的连线是否正确,包括错线,少线和多线的情况。查找的方法有:按照电路图检查安装的线路,这种方法的特点是,根据电路图来确定,按一定的顺序逐一检查安装好的线路,由此,可容易查出错线和少线的情况,还有一种方法就是按照实际的线路来对照原理电路进行查线,这是一种以元件为中心进行查线的方法。把每个元件引脚的连线一次查清,检查每个接线处在电路图上是否存在,这种方法不但可以查出错线和少线,还容易查处多线的情况。2、元器件安装时情况检查元、器见引脚之间有无短路;连接处有无接触不良;二极管和电容极性等是否连接有误。电源、信号源连接是否正确。3、电源端对地是否存在短路,在通电前,断开一根电源线,用万用表检查电源对地端是否存在短路模拟调试结果记录如下:通电后,显示器初始显示“000--000”。按照键盘分布说明按键,分布给甲、乙加1分、2分和3分,显示器跟踪显示出总分,然后模拟比赛细节,随意给甲、乙加分或是减分,均达到预期效果。在甲、乙均有一定总分的情况下对甲、乙进行减分处理,当减到0后便不能够再进行减分操作,与程序设计相符。在甲、乙均有一定总分的情况下,按清零按钮,显示结果清零。重复进行上面操作,结果均符合设计要求。5.3实物调试(1)在进行过硬件调试之后,就要进行最后一步的实物调试,如图5-1示,是第一步进行的比分调节测试,通过对TeamA和TeamB的加分调节来二所加减分按键是否正常工作,图5-1-a是显示两队比分为初始值0:0,图5-1-b是在进行加分以后的比分为5:10,。测试结果显示两队的加分按功能正常。图5-1-a图5-1-b(2)第二步的测试是对单节倒计时及单次进攻24秒倒计时功能是否正常工作的测试,如图5-2-a显示的时间是距离本节比赛结束还有12分00秒,离单次进攻结束还有24秒的初始状态;图5-2-b显示的则是距离本节比赛结束还有11分50秒,离单词进攻结束还有14秒的状态。测试结果显示单节倒计时及单次进攻24秒倒计时功能正常。图5-2-a图5-2-b(3)第三步测试的是对已经比赛结束的局数显示的测试,如图5-3-a显示的是局数比为2:2,图5-3-b显示的局数比为3:2,测试结果显示比赛结束的局数显示功能正常。图5-3-a图5-3-b(4)最后一步的测试时对设定单节时间的测试,如图5-4-a所示,设定单节比赛时间为10分钟,图5-4-b显示的则是定义的时间为12分钟,测试结果显示设定单节比赛时间功能正常。图5-4-a图5-4-b 5.4调试总结本节对硬件及软件的各项功能均进行了测试,测试的结果令人满意,基本上实现了各种所具备的的功能,运行过程完整流畅,达到了预期的效果,圆满成功。结论与展望经过这段时间的不懈努力,毕业设计总算结束了。虽然不是什么大不了的事情,却也让自己学会了很多东西,尤其是做事的态度。无论做任何事情都要有一定的耐心和毅力,态度端正了,事情也就成功一半了,不能因为遇到一点困难就想着放弃,而是要坚持找到问题所在并想办法解决问题,另外在学习过程中要虚心请教,学会与人交流合作,认真听取老师和同学们的意见。开始抱着应付的态度,心里只是为了完成学校布置的任务,但是随着后来自己的深入,逐渐发现自己对单片机产生了兴趣。而兴趣指引着我去完成以前从没有真正去思考过完成过的任务。当然,不仅仅只是在做事的态度上有所感悟,相关知识也重新学习和巩固了一下,通过毕业设计对之前在书本上那些似懂非懂的专业知识加深了理解,真正体验了理论与实际相结合的重要性,只有自己亲自动手操作,才能体会其中的奇妙与不易。从最开始的似懂非懂到对电路设计的大致了解,再到自己亲自动手完成简单的电路设计、制板及调试等一系列过程,很好地锻炼了自己的动手操作能力,也让自己深刻的体会到了纸上读来终觉浅,绝知此事要躬行的道理。通过此次的磨练,我认为在将来在这个单片机应用于生活各个领域的将来,我必须更加努力的学习单片机相关的知识,让自己跟得上时代的步伐,追随前沿科学的脚步才能不被淘汰,才能让自己发挥出自己的全部潜力,体现自我的价值。致谢短暂几个月的毕业设计即将结束,在此,我首先感谢我的母校,在我们即将步入社会,走向工作岗位之际为我提供了这样一个良好的学习知识与动手操作的机会,并为我提供了先进实验设备。通过本次毕业设计我受益匪浅,不仅使我学会了用单片机编写程序的方法,而且对学过的相关知识得到了进一步的巩固和提高,通过阅读相关专业书籍掌握了一些以前未了解的知识;同时也熟悉了很多的硬件设备,更重要的是使我在学习和掌握这些知识的同时,能够在思维上得到提高和升华,在分析问题和解决问题的能力上得到培养和提高。这次毕业设计使我完善了知识结构、拓宽了知识面,开阔了眼界、提高了对各科知识综合应用的能力;同时也锻炼和培养了我的基本素质,它使我更加耐心、谨慎、细致。在这次毕业设计期间,指导老师老师给予了我耐心的辅导和热情的帮助。对于一些疑难问题老师更是很有耐心、不厌其烦的给予解答,并且在百忙之中对本论文进行了仔细的审阅,提出了极为宝贵的修改意见和建议,保证了论文的质量。实验室的同学们一起探究学习的过程也是使我体会到团队的力量的强大,我们彼此之间的相互交流,相互学习也让我收获了珍贵的友谊。更使我在毕业之际为学校交上了一份满意的答卷。在此对老师和同学们表示衷心的感谢和崇高的敬意。 参考文献[1]康华光。电子技术基础(模拟部分)(第四版)。高等教育出版社。北京:1999年。[2]、康华光。电子技术基础(数字部分)(第三版)。高等教育出版社。北京:1999年。[3]赵保经,中国集成电路大全——CMOS集成电路(第一版)。北京:国防工业出版社出版。2004[4]彭介华,电子技术课程设计指。长沙:高等教育出版社。2001[5]曾祥富,张龙兴,童士宽。电子技术基础(第一版)。北京:高等教育出版社,2003[6]梁宗善.电子技术基础课程设计——中大规模集成电路应用(第一版)。武汉:华中理工大学出版社。1995 附录A:系统原理图附录B:系统仿真图附录C:实物图附录D:系统源程序#include<reg52.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535#include<intrins.h>#include"eeprom52.h"//这三个引脚参考资料sbitrs=P1^0; //1602数据/命令选择引脚H:数据 L:命令sbitrw=P1^1; //1602读写引脚 H:数据寄存器 L:指令寄存器sbite=P1^2; //1602使能引脚下降沿触发ucharcodetable_num[]="0123456789abcdefg";sbitbeep=P2^0;//蜂鸣器IO口定义bitflag_200ms;ucharflag_start;//开始计时ucharmiao,fen,m_24;//时间ucharax_fen,bx_fen;// ab队的小比分ucharaj_fen,bj_fen;// ab队的局数比分ucharset_time;ucharmenu_1;//菜单设计的变量uchara_a;/***********************1ms延时函数*****************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/******************把数据保存到单片机内部eepom中******************/voidwrite_eeprom() //保存数据{ SectorErase(0x2000); byte_write(0x2000,ax_fen); byte_write(0x2001,bx_fen); byte_write(0x2002,aj_fen); byte_write(0x2003,bj_fen); byte_write(0x2004,miao); byte_write(0x2005,fen); byte_write(0x2006,m_24); byte_write(0x2007,set_time); byte_write(0x2058,a_a); }/******************把数据从单片机内部eepom中读出来*****************/voidread_eeprom() //读出保存数据{ ax_fen=byte_read(0x2000); bx_fen=byte_read(0x2001); aj_fen=byte_read(0x2002); bj_fen=byte_read(0x2003); miao=byte_read(0x2004); fen=byte_read(0x2005); m_24=byte_read(0x2006); set_time=byte_read(0x2007); a_a=byte_read(0x2058);}///**************开机自检eeprom初始化*****************/voidinit_eeprom() //开始初始化保存的数据{ read_eeprom(); //读出保存数据 if(a_a!=2) //新的单片机初始单片机内问EEPOM { miao=0;fen=set_time=12;m_24=24;//时间 ax_fen=0;bx_fen=0;// ab队的小比分 aj_fen=0;bj_fen=0;// ab队的局数比分 a_a=2; write_eeprom(); //保存数据 } }/*********************************************************************名称:delay_uint()*功能:小延时。*输入:无*输出:无***********************************************************************/voiddelay_uint(uintq){ while(q--);}/*********************************************************************名称:write_com(ucharcom)*功能:1602命令函数*输入:输入的命令值*输出:无***********************************************************************/voidwrite_com(ucharcom){ e=0; rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0;}/*********************************************************************名称:write_data(uchardat)*功能:1602写数据函数*输入:需要写入1602的数据*输出:无***********************************************************************/voidwrite_data(uchardat){ e=0; rs=1; rw=0; P0=dat; delay_uint(25); e=1; delay_uint(100); e=0; }/*********************************************************************名称:write_string(ucharhang,ucharadd,uchar*p)*功能:改变液晶中某位的值,如果要让第一行,第五个字符开始显示"abcdef",调用该函数如下 write_string(1,5,"abcdef;")*输入:行,列,需要输入1602的数据*输出:无***********************************************************************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } }/***********************lcd1602上显示两位十进制数************************/voidwrite_sfm2(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(table_num[date/10%10]); write_data(table_num[date%10]); }/***********************lcd1602上显示1位十进制数************************/voidwrite_sfm1(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(table_num[date%10]); }/***********************lcd1602上显示3位十进制数************************/voidwrite_sfm3(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(table_num[date/100%10]); write_data(table_num[date/10%10]); write_data(table_num[date%10]); }///**************显示函数*****************/voiddisplay() //显示函数{ write_sfm2(2,7,fen); //显示分 write_sfm2(2,10,miao); //显示秒 write_sfm2(2,13,m_24); //显示秒 write_sfm1(2,1,aj_fen); //显示A队的局数比分 write_sfm1(2,3,bj_fen); //显示B队的局数比分 write_sfm3(1,4,ax_fen); //显示A队每节的比分 write_sfm3(1,13,bx_fen); //显示B队的局数比分 }/*********************************************************************名称:init_1602()*功能:初始化1602液晶*输入:无*输出:无***********************************************************************/voidinit_1602()//1602初始化{ write_com(0x38); write_com(0x0c); write_com(0x06); delay_uint(1000); write_string(1,0,"T-A:000T-B:000"); write_string(2,0,"0:0S-00:0000");}ucharkey_can;/***************按键程序****************/voidkey() //{ staticucharkey_new=0,key_l; key_can=20;//按键值还原 P3=0x0f; if((P3&0x0f)!=0x0f) //按键按下 { delay_1ms(1); //按键消抖动 if(((P3&0x0f)!=0x0f)&&(key_new==1)) { //确认是按键按下 key_new=0; key_l=(P3|0xf0);//矩阵键盘扫描 P3=key_l; switch(P3) { case0xed:key_can=10;break;//得到按键值 case0xdd:key_can=7;break;//得到按键值 case0xbd:key_can=4;break;//得到按键值 case0x7d:key_can=1;break;//得到按键值 case0xeb:key_can=11;break;//得到按键值 case0xdb:key_can=8;break;//得到按键值 case0xbb:key_can=5;break;//得到按键值 case0x7b:key_can=2;break;//得到按键值 case0xe7:key_can=12;break;//得到按键值 case0xd7:key_can=9;break;//得到按键值 case0xb7:key_can=6;break;//得到按键值 case0x77:key_can=3;break;//得到按键值 } // write_sfm2(1,0,key_can); } } else { key_new=1; }}/****************按键处理数码管显示函数***************/voidkey_with(){ if(key_can==6) //设置键 { menu_1++; if(menu_1>=2) { menu_1=0; init_1602();//1602初始化 } if(menu_1==1) { write_string(1,0,"set_fen:00"); write_string(2,0,""); } } if(menu_1==1) { if(key_can==9) if(set_time<99) //设置每节的时间 set_time++; if(key_can==12) if(set_time!=0) //设置每节的时间 set_time--; write_sfm2(1,9,set_time); //显示设置的时间 fen=set_time; } if(menu_1==0) { if(key_can==3) //开始键 { flag_start++; if(flag_start==1) { if(m_24==0) //当秒为0时时间重新为24秒 m_24=24; if(fen==0) { m_24=24; fen=set_time; miao=0; } } if(flag_start>=2) flag_start=0; } if(key_can==1) ax_fen++; //A队每节的比分加1 if(key_can==4) if(ax_fen!=0) ax_fen--; //A队每节的比分减1 if(key_can==2) bx_fen++; //B队每节的比分加1 if(key_can==5) if(bx_fen!=0) bx_fen--; //B队每节的比分减1 if(key_can==7) if(aj_fen<9) aj_fen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届山东阳谷县联考初三3月质检数学试题试卷含解析
- 2025-2026学年湖南省东安县初三下学期第一次在线月考物理试题含解析
- 床上洗头护理的效果评估
- 2026年大学大一(建筑环境与能源应用工程)流体力学阶段测试试题及答案
- 护士查房中的儿科护理要点
- 护理学导思:批判性思维与决策
- 护理核心制度要点串讲
- 护理教育竞赛课件的设计原则与案例分析
- 习作教学“素材的串联组合”赏析
- 2026五年级数学下册 折线统计图计算技巧
- 勘探监督手册测井分册
- GB/T 39493-2020燃气燃烧器和燃烧器具用安全和控制装置特殊要求压力调节装置
- 三花电子膨胀阀介绍课件
- 2021年陕西省中考物理试卷一
- 电梯安装教程课件
- 城市燃气工程系统规划课件
- 申星牌SX型紫外线消毒车使用说明书
- 北师大版七年级数学下册-基础计算题100题(无答案)
- 石化信息分类编码-装置名称及3
- 土方工程沟槽土方(沟槽开挖)技术交底记录
- 区域卫生信息化平台项目建设方案
评论
0/150
提交评论