秒表计时器设计报告
秒表计时器毕业设计报告

秒表计时器毕业设计报告秒表计时器毕业设计报告一、引言在快节奏的现代社会中,时间对于人们来说显得尤为重要。
无论是工作、学习还是生活,我们都需要一个准确、方便的计时工具来帮助我们管理时间。
因此,我选择了设计并开发一个秒表计时器作为我的毕业设计项目。
本报告将详细介绍我的设计思路、实现过程以及遇到的挑战和解决方案。
二、设计目标1. 实现基本的计时功能:包括开始、停止、暂停和重置功能。
2. 提供多种计时模式:可以选择倒计时模式或计时器模式。
3. 显示准确的计时结果:保证计时的准确性和精确度。
4. 用户友好的界面设计:界面简洁清晰,易于操作。
5. 适用于不同平台和设备:可以在电脑、手机等多种设备上使用。
三、设计思路1. 界面设计:我采用了简洁明了的界面设计,将计时器显示在屏幕中央,并在周围添加开始、停止、暂停和重置按钮,方便用户操作。
2. 计时功能实现:使用编程语言编写代码,通过调用系统时间函数来实现计时功能。
开始计时时记录当前时间,停止计时时再次获取当前时间,两个时间的差值即为计时结果。
3. 计时模式选择:根据用户的需求,提供倒计时模式和计时器模式的选择,用户可以根据实际情况进行设置。
4. 计时结果显示:将计时结果以小时、分钟、秒的形式显示在屏幕上,保证计时的准确性和精确度。
5. 跨平台适配:根据不同设备的屏幕尺寸和分辨率进行适配,确保在不同平台上都能正常显示和使用。
四、实现过程1. 界面设计:使用HTML和CSS进行界面设计,采用响应式布局,确保在不同设备上都能良好显示。
2. 编程语言选择:我选择使用JavaScript作为主要编程语言,因为它具有广泛的应用性和良好的跨平台性。
3. 计时功能实现:通过JavaScript编写代码,使用Date对象获取系统时间,并进行计算和显示。
4. 计时模式选择:使用JavaScript编写代码,通过监听用户的选择,切换不同的计时模式。
5. 计时结果显示:使用JavaScript编写代码,将计时结果以合适的格式显示在屏幕上。
24秒计时器设计报告

24秒计时器设计报告概述本文将介绍一个基于硬件电路的24秒计时器的设计过程。
该计时器可用于篮球比赛等需要精确计时的场合。
我们将逐步讨论设计思路和实施步骤。
设计思路我们的目标是设计一个简单而可靠的24秒计时器。
基于硬件电路的设计通常比软件实现更加稳定和精确。
我们将采用数字集成电路和准确的时钟源来实现计时功能。
步骤一:选择计时器芯片首先,我们需要选择一个合适的计时器芯片。
为了满足精确计时的要求,我们选择了XX型号的计时器芯片。
该芯片具有高精度的时钟源和适配器接口。
步骤二:设计电路原理图在这一步中,我们将根据计时器芯片的规格书设计电路原理图。
根据芯片的引脚定义,我们将确定输入按钮、显示器和报警器的连接方式。
同时,我们需要为芯片提供稳定的电源电压。
步骤三:制作电路板基于电路原理图,我们将制作一个电路板来实现计时器的电路部分。
我们可以使用PCB设计软件来绘制电路板图纸。
然后,我们可以通过特殊的设备将电路图纸转换为实际的电路板。
步骤四:组装计时器外壳当电路板制作完成后,我们将把它安装在一个适当的外壳内。
外壳可以保护电路板免受损坏,并提供按钮和显示器的合适位置。
步骤五:测试和调试在计时器完成组装后,我们将进行测试和调试。
我们将检查所有的功能是否正常工作,包括按钮操作、计时显示和报警器响铃。
如果发现问题,我们将修改电路或芯片的设置。
结论通过以上步骤,我们成功地设计和制作了一个24秒计时器。
这个计时器具有高精度、可靠性和易操作性的优点。
通过硬件电路的实现,我们可以确保计时的准确性,从而满足各种场合的计时需求。
注意:本文中的计时器设计仅为示例,实际设计可能需要根据具体要求进行调整和改进。
单片机秒表课程设计报告

一:课程设计题目秒表/时钟计时器二:课程设计任务与要求:利用89C51单片机设计秒表/时钟计时器,通过LED显示器显示秒十位和个位,在设计过程中用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加1,当秒计数达到60时,就自动返回到0,重新开始秒计数。
三:设计过程:1.设计原理:此次课程设计题目是秒表/时钟计时器,由课程设计的要求和任务,我采用的C语言编程,设计秒表要求一秒定时,采用了定时器和FOR循环来定时,其中一个软件一个硬件,会在方案论证中分析在1秒时采用的是硬件定时,即用单片机内部的定时器T0。
先将时钟初始化,赋入初值50ms定时,循环20次来进行1秒定时。
然后由定义的变量second来进行加一运算,然后将其值通过P1,P2口在数码管上进行显示。
其中数码管的显示时,我在程序中首先定义了一个关于数码管显示的字形码定义,以便在显示时调用即可。
(1)方案论证:方案1:在方案1中,我们所选用的是软件定时,即用for循环来定时1秒进行显示的变化.方案2:在方案2中,采用的是硬件定时,即用单片机内部的定时器T0。
先将时钟初始化,赋入初值50ms定时,循环20次来进行1秒定时.方案比较:我们从两方面进行两种方案的比较,第一,由于此次课程设计要求是秒表,则在定时时要求比较精确,所以采用硬件的定时器定时时比较准确的。
第二,由于秒表的定时程序是很小的,在利用软件定时占用的CPU并不是很多,不能显现出来,但真正大程序时会很占用资源的,所以在用定时中断过程中是非常节省资源的.综合上述两种比较,我们选用了第二种方案.(2)创新点:a。
在课程要求的基础上,我们做成的电路板上,用复位键来控制秒表计时的重新开始,即清零。
b。
在以上设计的基础上,我们又重新设计了一个程序,基本原理没有变,只是将秒表在到达59清零的瞬间向分的位数上进1,程序将会在附录3中给出。
2.硬件系统框图与说明:首先,连接的是单片机51的最小系统,其中包括时钟电路,复位电路,在此中包括的元器件在附录3中.我们所选用的数码管是共阴极的,置1时导通,所以将单片机的P1。
数字秒表设计实验报告(一)

数字秒表设计实验报告(一)数字秒表设计实验报告Introduction•实验目的:设计并实现一个数字秒表•实验时间:2021年10月10日至2021年10月15日•实验对象:本科计算机专业学生•实验设备:计算机、编程软件Experiment Procedure1.寻找合适的编程语言和开发工具2.设计秒表的用户界面3.编写代码实现秒表的计时功能4.测试并调试代码5.完善用户界面,添加重置和暂停功能6.进行性能测试,并分析结果Experimental Findings•选用Python编程语言和PyQt图形库进行开发•按照用户界面设计,实现了秒表的计时功能•通过测试,发现秒表计时准确性较高,误差范围小于0.1秒•添加了重置和暂停功能,提高了秒表的实用性•性能测试表明,在处理大数据量时,秒表的响应速度仍然较快Conclusion通过本次实验,我们成功设计并实现了一个功能完善的数字秒表。
通过合理的编程语言选择和用户界面设计,实验结果表明,我们的秒表具有准确的计时功能、良好的用户体验和较高的性能。
这对于计算机专业学生来说,具有较高的实用价值。
Future Work尽管我们已经取得了较好的实验结果,但仍有一些改进的空间。
在未来的工作中,我们计划:•进一步提高秒表的计时准确性,减小误差范围•探索更多的用户界面设计方案,增加更多便利的功能•优化性能,提高秒表在处理大数据量时的响应速度•结合云服务,实现秒表数据的备份和同步功能Acknowledgements感谢实验组的所有成员共同努力,以及指导老师的支持和指导,使得本次实验取得了圆满成功。
Reference无抱歉,关于数字秒表设计实验报告的文章已经终止。
单片机0-99计数器 秒表报告

姓名班级指导老师时间信息工程学院图1 硬件电路连接图(二)显示电路两位数码管循环显示00~99电路数码管只要就是用于数字得显示.数码管有共阴与共阳得区分,单片机都可以进行驱动,但就是驱动得方法却不同。
两位数码管循环电路就是由电阻、二极管与数码管组成,电源+5V通过560得电阻直接给数码管得7个段位供电,P0、0—P0、7对应了两个接数码管得A,B,C,D,E,F,G与小数点位,P2、6接显示个位数得数码管得3、8引角,P2、7则接十位数得。
P2、6与P2、7端口分别控制数码管得十位与个位得供电,当相应得端口变成低电平时,驱动相应得三极管会导通,+5V通过二极管与驱动三极管给数码管相应得位供电,这时只要P0口送出数字得显示代码,数码管就能正常显示需要得数字。
图2 十位显示动态数码管(共阳数码管)图3 个位显示静态数码管(共阴数码管)(三)时钟电路时钟电路得晶振频率越高,系统得时钟频率越高,单片机得运行速度也越快。
晶振频率根据设计需要设为12MHz,又根据谐振性质,电路中得电容应选择为30pF左右。
图4 时钟电路(四)复位电路MCS—51单片机得复位就是靠外部电路实现得。
MCS—51单片机工作之后,只要在她得RST引线上加载10ms以上得高点平,单片机就能有效地复位。
MCS-51单片机通常采用上电自动复位与按键复位两种方式。
最简单得复位电路如图5:图5 复位电路上电瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上得高电平,就能使单if(i++==100)//如果i=0{i=0;count++;P0=CODE[count/10];P2=~CODE[count%10];if(count==99)count=0; //如果到了99,则重新从0开始计数}}结果与分析(可以加页):(一)调试结果1.初始状态图7:初始状态结果图2.开始计时后按下按键暂停图8:中间状态图示(二)问题分析及解决措施1、一开始时没有分清楚数码管就是共阴数码管还就是共阳数码管,C语言程序中默认数码管就是共阴,所以两个P接口得值都就是按照共阴去写得,导致数码管选段及位显有问题,后来经过老师得指点,将共阳数码管P2得接口改成了共阴。
时、分、秒计时器的设计报告

时、分、秒计时器的设计一、实验目的掌握数码管动态显示的基本方法;掌握键盘按键控制的实现方法;根据已知电路和设计要求在实验板上实现时、分、秒计时器。
二、实验内容1、在STC89C52实验平台上实现时、分、秒时钟,4位数码管上显示分、秒或者时、分。
2、应用键盘控制时间的显示。
键盘按键控制“切换时分、分秒显示”、“启动停止”、“加秒显示内容”、“加分显示内容”、“加时显示内容”。
3、根据已知电路和设计要求在PROTEUS平台仿真实现时钟系统。
三、实验原理流程图如下所示:11、主程序流程图2、定时器/计数器T0中断服务程序流程图5 仿真分析在Proteus ISIS的80C51中载入程序生成的HEX文件,按开始符号运行,在数码管上观察程序运行结果,系统仿真结果如图5.1所示。
设计功能如下:(1)、初始状态:未按键之前,上电,数码显示00-00-00。
程序运行后,从秒针开始自动运行。
当秒数到59后,下一秒自动变为00,分针变为01,以此类推。
(2)、调整状态:仿真运行过程中,按p0键,系统暂停,此时,继续按p0无效。
第三次按p0,又开始,如此循环。
(3)、设置状态:按下p0暂停后,按p1,则时针加一,按下p2,则时针减一;按两下p0,在按下p1,则分针加一,按下p2,则分针减一。
时间显示格式为:时分秒;误差分析:实际程序到实验板中的电子钟显示存在一定的误差,误差来源可能为三个方面:第一,在程序运行过程中,时钟周期的不精确导致机器周期与理论值存在一定的差别;第二在中断一秒显示过程中,一些指令需要消耗一定的机器周期,使得一秒延时比实际要长;第三在键抖动的反应程度在运行中比较慢。
25.1实例仿真总结通过这次的课程设计我认识到我对单片机的知识学的太少了,对于书本上很多知识还不能灵活运用,都需要去巩固加强,我会在以后的学习中弥补我的不足。
我也了解了80C51集成环境和PROTEUS仿真软件的使用,用此软件练习电子时钟的设计,不仅使我熟悉了软件的使用方法,而且复习了单片机编程的相关知识。
EDA秒表设计 实验报告

EDA课程设计报告——基于VHDL语言的秒表设计课程名称:EDA技术院系:地球物理及信息工程学院专业班级:电子信息工程08级2班学生姓名:学号:指导老师:完成时间:2011年5月18日秒表设计一. 设计要求利用EDA实验箱,通过VHDL语言进行编程,设计一个简单的秒表,并用EDA实验箱进行实现,具体设计要求如下:(1)有使能、暂停、继续、秒表计数功能;(2)带有异步复位功能;(3)显示分、秒信息,若需要,显示秒表信息。
二. 设计的作用、目的在本次设计中,可以简单的了解EDA技术的应用以及VHDL语言编写的方法。
通过设计一个秒表,可以掌握用VHDL设计多位加法计数器的方法,尤其是调整时钟使得每过一秒就改变一个数,达到设计的要求。
三. 设计的具体实现1.系统概述本次系统设计主要分三个部分,一是通过VHDL语言设计一个八位的加法计数器,来实现秒表的计时功能;二是通过调整时钟使秒表计数为每秒改变一个数;三是加入一些控制按键,实现使能、暂停、继续等功能。
2.程序具体设计秒表显示共有6位,两位显示分,两位显示秒,十分秒和百分秒各一位。
设计时使用一个计数器,随着时钟上升沿的到来循环计数,每计数一次,百分秒位加一,通过百分秒位满十进位来控制十分位的计数,十分位满十进位,依次类推,实现秒表计数。
为实现秒位的计时精确,百秒位必须以0.01秒的时间间隔计数,即时钟的频率是100Hz。
为此,本设计采用3MHz的时钟频率通过分频得到100Hz的时钟频率,再送给控制时钟以得到比较精确的CLK信号。
具体程序设计见附录。
引脚定义如下:其中,时钟信号CLK为3MHz的时钟频率,分频后得到的时钟为CLK2,输出引脚CLK2和输入引脚CLK2在外部相连,实现将分频后的时钟送入。
3.调试应用MAX+plus II软件编译调试实验控制程序, 仿真运行结果如下:(1)给时钟后,实现开始功能:开始键按下(STA=‘1’)后,秒表计数开始。
(2)给时钟后,实现暂停功能:从上图可以看出暂停键按下后(POS=‘1’),输出(CQ)保持不变,直到暂停键再次按下(POS=‘0’),输出才继续计数,从而实现了暂停的功能。
秒表计数器的设计

数字系统设计实验报告秒表计数器的设计班级:学号:姓名:实验一秒表计数器的设计一、实验目的:通过设计实现四种频率可选的二位显示秒表,以熟悉VHDL语言编程。
二、实验流程:系统整体由分频器、多路选择器和计数器三个原件组成。
1.输入信号有4个,分别为复位信号(低有效)、时钟(提供整个系统的时钟信号)、选择器输入Sel1、Sel0(选择不同的频率输入)。
2.添加置位信号,以及添加置位信号后输入信号应为多少个。
3.输出引脚有8根,分别为个位count5(3 downto 0)和10位count10(3 downto 0)的计数(仿真结果使用16进制显示该两个输出信号的值)。
三、实验原理1.分频器模块设计:可选用计数器模块实现,如下所示:i f( rst = ’0’ ) thencount <=”0000”elsif( clk’event and clk = ‘1’) thencount <= count+1;end if;clk2<= count(0);clk4<= count(1);clk8<= count(2);clk16<= count(3);2.多路选择器模块设计:使用选择语句来实现:case sel iswhen “00” => clk <= clk2;when “01” => clk <= clk4;when “10” => clk <= clk8;when “11” => clk <= clk16;when others => null;end case;3.计数器模块的实现:在本设计中总共要设计两个计数器分别用于实现个位(9-0),十位(5-0)的计数。
个位计数器:process(clk1,rst,load)beginif(rst='0')thencount10<="0000";elsif(load='1')thencount10<=counts10;elsif( clk1'event and clk1 ='1') thenif( count10 <"1001" ) thencount10<=count10+1;elsecount10<="0000";end if;end if;end process;十位计数器:process(count10(3),rst,load)beginif(rst='0')thencount5<="0000";elsif(load='1')thencount5<=counts5;elsif( count10(3)'event and count10(3)='0') then if( count5<"0101" ) thencount5<=count5+1;elsecount5<="0000";end if;end if;end process;四、仿真结果及分析:1.资源使用情况结果分析:由图可以看出所用资源较少。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、实训任务目的1.根据单片机课程所学内容,结合其他相关课程知识,设计电子秒表,以加深对单片机知识的理解,锻炼实践动手能力,为以后的毕业设计和工作打下坚实基础;2.熟悉汇编语言或C语言的程序设计方法,熟悉51系列单片机的使用;3.掌握单片机的内部功能模块的应用,如定时器/计数器、中断、I/O口、串行口通讯等功能;4.掌握单片机应用系统的软硬件设计过程、方法及实现。
2、设计方案2.1系统总体设计方案使用STC89C52单片机作为核心控制部件,采用12M晶体振荡器及30PF微小电容构成振荡电路;用1个四位一体共阴极数码显示管作为显示部分,构成数字式秒表的主体结构,配合独立式键盘和复位电路完成此秒表的计时、清零、停止、增减初始时间等各项功能。
2.2 系统总体整体框图图2.2 系统设计框图3、电路设计3.1 硬件部分系统设计3.1.1电路原理图图3.1.秒表计时器电路图1. 时钟电路在XTAL1、XTAL2 的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡。
在本设计中采用的12M 的石英晶振。
和晶振并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。
当采用石英晶振时,电容可以在20 ~ 40pF 之间选择。
2.复位电路复位操作通常有两种基本形式:上电自动复位和开关复位。
上电瞬间,电容两端电压不能突变,此时电容的负极和RESET 相连,电压全部加在了电阻上,RESET 的输入为高,芯片被复位。
随之+5V电源给电容充电,电阻上的电压逐渐减小,最后约等于0,芯片正常工作。
并联在电容的两端为复位按键,当复位按键没有被按下的时候电路实现上电复位,在芯片正常工作后,通过按下按键使RST管脚出现高电平达到手动复位的效果。
3. EA/VPP(31 脚)的功能和接法51 单片机的EA/VPP(31 脚)是内部和外部程序存储器的选择管脚。
当EA 保持高电平时,单片机访问内部程序存储器;对于现今的绝大部分单片机来说,其内部的程序存储器(一般为flash)容量都很大,因此基本上不需要外接程序存储器,而是直接使用内部的存储器。
4.P0 口外接上拉电阻51 单片机的P0 端口为开漏输出,内部无上拉电阻。
所以在当做普通I/O 输出数据时,由于V2截止,输出级是漏极开路电路,要使“1”信号(即高电平)正常输出,必须外接上拉电阻。
3.1.2 数码管显示模块设计显示部分采用动态显示。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的共阴极增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的位选通端,就使各个数码管轮流受控显示,这就是动态驱动。
动态显示是利用人眼视觉暂留特性来实现显示的。
事实上,显示器上任何时刻只有一个数码管有显示。
由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。
为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。
3.1.3 焊接过程的问题和解决办法因为对焊接技术的不熟练,所以在焊接的过程中也出现了一些问题。
例如出现虚焊的问题。
所谓虚焊,是指焊点处只有少量锡焊住,造成接触不良,时通时断。
焊接时,应保证每个焊点焊接牢固、接触良好,锡点应光亮、圆滑无毛刺,锡量适中。
锡和被焊物熔合牢固,不应有虚焊。
为避免虚焊,应注意以下几点:(1)保证金属表面清洁:若焊件和焊点表面带有锈渍、污垢或氧化物,应在焊接之前用刀刮或砂纸磨,直至露出光亮金属,才能给焊件或焊点表面镀上锡。
(2)掌握温度:为了使温度适当,应根据元器件大小选用功率合适的电烙铁,并注意掌握加热时间。
若用功率小的电烙铁去焊接大型元器件或在金属底板上焊接地线,易形成虚焊。
(3)上锡适量:根据所需焊点的大小来决定烙铁蘸取的锡量,使焊锡足够包裹住被焊物,形成一个大小合适且圆滑的焊点。
若一次上锡不够,可再补上,但须待前次上的锡一同被熔化后再移开电烙铁。
(4)选用合适的助焊剂:助焊剂的作用是提高焊料的流动性,防止焊接面氧化,起到助焊和保护作用。
焊接电子元器件时,应尽量避免使用焊锡膏。
比较好的助焊剂是松香酒精溶液,焊接时,在被焊处滴上一点即可。
3.2 软件部分控制系统设计由P1口作为独立摁键信号的输入端控制时钟的加1s、减1s、复位60.0s等操作。
用外部中断0作为秒表计时器的开启和暂停的操作。
且所有摁键均为低电平有效。
其中部分摁键为单刀双掷开关用于控制增计时或减计时以及限60.0s计时和60.0s外计时。
3.2.1 程序流程图图3.23.2.2 程序设计秒表程序:#include <reg52.h>//#include "I2C_AT24C02.h"#define uchar unsigned char#define uint unsigned int#define N 50000sbit keyInc = P3^2; //按键+sbit keyDec = P3^3; //按键-sbit keyClear = P3^4; //按键清零sbit keyPause = P3^5; //按键自增uchar Tab1[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码表uchar Tab2[ ]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //个位段码表uchar cntDeci; //cntDeci为中断计数值uint deciSec; //deciSec=10*秒数值,显示的数值//=======函数声明=======void delay1ms(uint);void Timer_Init();void Display(uint);void KeyScan();//=======主函数=======void main(){Timer_Init();deciSec=0;cntDeci=0;TR0=1; //开启定时器0while(1){Display(deciSec);KeyScan();}}/***************************延时1ms基准******************************************/void delay1ms(uint i){uint a,b,c;while(i--){for(c=0;c<1;c++) //1ms基准延时程序12MHZ晶振for(b=0;b<142;b++)for(a=0;a<2;a++){;}}}/******************************************************************** ******************************数码管显示程序***********************************************/void Display(uint x){P0=Tab1[x%1000/100]; //显示十位P2=0xfd; //P2.1引脚输出低电平,1111 1101delay1ms(1);P2=0xff;P0=Tab2[x%100/10]; //显示个位P2=0xfb; //P2.2引脚输出低电平,1111 1011delay1ms(1);P2=0xff;P0=Tab1[x%10]; //显示0.1位P2=0xf7; //P2.3引脚输出低电平,1111 0111delay1ms(1);P2=0xff;}//=======定时器初始化函数=======void Timer_Init(){TMOD=0x01; //设置定时器0为工作方式1 0000 TH0=(65536-N)/256; //装初值50ms一次中断TL0=(65536-N)%256;EA=1; //开总中断ET0=1; //开定时器0中断TF0=0; //溢出标志位清零TR0=0; //先不开启定时器0}//=======定时器中断服务函数=======void Timer_Serv() interrupt 1{TH0=(65536-N)/256; //50ms中断一次TL0=(65536-N)%256;cntDeci++;if(cntDeci==2){cntDeci=0;deciSec=deciSec+1; //秒表加0.1sif(deciSec==599){deciSec=0;}}TF0=0;}//=======键盘扫描函数=======void KeyScan(){if(keyInc==0&TR0==0){delay1ms(1);if(keyInc==0){deciSec+=10;if(deciSec>599) //当到60s时重新归0deciSec=0;while(!keyInc); //等待按键释放}}if(keyDec==0&TR0==0){delay1ms(1);if(keyDec==0){deciSec-=10;if(deciSec<0) //当到0时重新归60sdeciSec=599;while(!keyDec);}}if(keyClear==0&TR0==0){delay1ms(1);if(keyClear==0){deciSec=0; //清0while(!keyClear);}}if(keyPause==0){delay1ms(1);if(keyPause==0){TR0=~TR0; //启动或停止定时器0while(!keyPause);}}}60秒倒计时#include <reg52.h>//#include "I2C_AT24C02.h"#define uchar unsigned char#define uint unsigned int#define N 5000sbit keyInc = P3^2; //按键+sbit keyDec = P3^3; //按键-sbit keyClear = P3^4; //按键清零sbit keyPause = P3^5; //按键自增uchar Tab1[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码表uchar Tab2[ ]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //个位段码表uchar cntDeci; //cntDeci为中断计数值uint deciSec; //deciSec=10*秒数值,显示的数值//=======函数声明=======void delay1ms(uint);void Timer_Init();void Display(uint);void KeyScan();//=======主函数=======void main(){Timer_Init();deciSec=6000;cntDeci=0;TR0=1; //开启定时器0while(1){Display(deciSec);KeyScan();}}/***************************延时1ms基准******************************************/void delay1ms(uint i){uint a,b,c;while(i--){for(c=0;c<1;c++) //1ms基准延时程序12MHZ晶振for(b=0;b<142;b++)for(a=0;a<2;a++){;}}}/******************************************************************** ******************************数码管显示程序***********************************************/void Display(uint x){P0=Tab1[x%10000/1000]; //显示十位P2=0xfe; //P2.1引脚输出低电平,1111 1101delay1ms(1);P2=0xff;P0=Tab2[x%1000/100]; //显示十位P2=0xfd; //P2.1引脚输出低电平,1111 1101delay1ms(1);P2=0xff;P0=Tab1[x%100/10]; //显示个位P2=0xfb; //P2.2引脚输出低电平,1111 1011delay1ms(1);P2=0xff;P0=Tab1[x%10]; //显示0.1位P2=0xf7; //P2.3引脚输出低电平,1111 0111delay1ms(1);P2=0xff;}//=======定时器初始化函数=======void Timer_Init(){TMOD=0x01; //设置定时器0为工作方式1 0000 TH0=(65536-N)/256; //装初值50ms一次中断TL0=(65536-N)%256;EA=1; //开总中断ET0=1; //开定时器0中断TF0=0; //溢出标志位清零TR0=0; //先不开启定时器0}//=======定时器中断服务函数=======void Timer_Serv() interrupt 1{TH0=(65536-N)/256; //50ms中断一次TL0=(65536-N)%256;cntDeci++;if(cntDeci==2){cntDeci=0;deciSec=deciSec-1; //秒表加0.1sif(deciSec==0){deciSec=6000;}}TF0=0;}//=======键盘扫描函数=======void KeyScan(){if(keyInc==0&TR0==0){delay1ms(1);if(keyInc==0){deciSec+=100;if(deciSec>6000) //当到60s时重新归0 deciSec=6000;while(!keyInc); //等待按键释放}}if(keyDec==0&TR0==0){delay1ms(1);if(keyDec==0){deciSec-=100;if(deciSec<0) //当到0时重新归60sdeciSec=0;while(!keyDec);}}if(keyClear==0&TR0==0){delay1ms(1);if(keyClear==0){deciSec=6000; //清0while(!keyClear);}}if(keyPause==0){delay1ms(1);if(keyPause==0){TR0=~TR0; //启动或停止定时器0while(!keyPause);}}}4、制作及调试过程4.1 电路的制作(1) 分析各单元电路图,并分析其各部分的功能;(2) 用仿真软件仿真电路的功能,并检查是否有错,无误后进行下步工作;(3) 查找有关文献了解各元件的功能及引脚和有关的资料;(4) 分别焊接单片机最小系统、数码管显示电路和摁键控制电路,与此同时检查各元器件是否可用,并分辨其引脚;(5) 对照事先设计好的原理图仔细检查在实物中是否有接错的地方(主要检查集成电路的引脚与导线是否出错接错和是否出现了短路),若发现有,就立即改正。