倒计时秒表 单片机
单片机设计24秒倒计时
单片机设计24秒倒计时1.引言倒计时器是一种常见的电子设备,被广泛应用于体育比赛、倒计时游戏、厨房计时等场景中。
本文介绍了使用单片机设计一个24秒倒计时器的方法和过程。
2.设计原理本设计使用的单片机为51系列单片机,采用倒计时的方式进行计时,显示剩余时间,并发出声音提示时间结束。
具体实现主要包括以下几个步骤:-初始化单片机的定时器和功能引脚;-设置定时器的工作模式和计时时间;-编写程序控制定时器开始计时;-显示剩余时间并发出声音提示;-定时器到达设定时间后,停止计时并显示时间结束。
3.硬件设计硬件设计主要包括51系列单片机、LED数码管和蜂鸣器。
-单片机需要通过引脚连接LED数码管,用于显示剩余时间;-单片机通过一个GPIO引脚连接蜂鸣器,用于发出时间结束的提示声音。
4.软件设计软件设计主要包括初始化、计时、显示和提示等功能。
-初始化函数主要用于设置单片机的定时器和GPIO引脚;-计时函数用于设定倒计时的时间,并开始计时;-显示函数用于将剩余时间显示在LED数码管上;-提示函数用于判断是否到达设定时间,如果是则停止计时并发出提示声音。
5.实验结果经过调试和测试,实验结果表明该24秒倒计时器可以正常工作。
在开始计时后,数码管上会显示剩余时间,同时蜂鸣器会发出定时器结束的提示音。
6.结论本文介绍了使用单片机设计24秒倒计时器的方法和过程。
该设计通过初始化、计时、显示和提示等功能,实现了24秒倒计时的功能要求。
同时,该设计可以在实际中进行必要的优化和改进,以满足具体的应用需求。
7.致谢感谢本文参考的相关文献和资料,以及为本文提供实验设备和技术支持的相关人员。
[1]《51单片机原理与应用》[2]《C语言微机原理与接口技术》总结:本文主要介绍了使用单片机设计24秒倒计时器的方法和过程。
通过初始化、计时、显示和提示等功能,实现了24秒倒计时的功能要求。
同时,该设计可以在实际中进行必要的优化和改进,以满足具体的应用需求。
单片机倒计时秒表111
单片机控制系统设计与调试实训指导说明书单片机倒计时秒表系、部:机电工程学院学生姓名:指导教师:职称专业:班级:完成时间:摘要本文通过倒计时秒表的设计,阐述了单片机最小系统的概念与设计,对单片机的定时、中断等功能模块的应用有进一步的理解;本文还阐述了单片机编程的一些方法。
关键字:单片机、电子秒表、定时、中断目录一、设计课题1.1课程设计题目 (4)1.2课程设计任务 (4)1.2课程涉及研究内容 (4)二、硬件分析设计 (4)2.1单片机的选择 (4)2.2 LED显示器 (5)2.2.1 LED显示器结构及分类 (5)2.2.2 LED显示原理 (5)2.3键盘输入 (6)三、关键技术 (6)3.1定时器的使用 (6)3.1.1 作用 (6)3.1.2技术方案 (6)3.1.3具体程序实现 (7)3.2 显示与键盘 (8)3.2.1显示 (8)3.2.2键盘 (9)3.2.3利用定时中断实现显示与查键 (11)四、电路 (13)4.1复位电路 (14)4.2电路元件 (14)4.3 I/O口线连接 (15)五、程序设计 (16)5.1程序功能 (16)5.2主要变量说明 (16)5.3程序流程图 (16)5.4程序源代码 (16)六、设计总结 (26)七、参考文献 (26)一、设计课题1.1课程设计题目本课程设计的课题是单片机倒计时秒表的设计1.2课程设计任务本课题的电子秒表系统需要实现以下的功能:1.用开关控制两种计时模式的选择。
分别是单计时模式和连续计8个的计时模式。
2.用开关控制电子秒表的启动/停止/复位,七段数码管的高2位显示秒表的秒值,低2位显示秒表的百分秒值。
3.可实现设定初值的倒计时功能。
其中设计了三种初值调整方式,分别是增1(减1)、连续增(连续减)和快速增(快速减)。
上述功能主要是为了讲述单片机定时器、键盘和LED显示器的使用方法。
1.3课题涉及研究内容:1.定时器的使用:本实例通过秒表的计时详细说明了定时器的使用方法,可以使读者对单片机定时器的使用有比较深刻的理解。
单片机课程设计倒计时秒表
太原理工大学现代科技学院单片机原理及接口技术课程设计设计名称倒计时秒表专业班级学号姓名指导教师一、设计目的此次设计是我们更进一步了解基本电路的设计流程,通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,提做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
掌握单片机应用系统的软硬件设计过程、方法及实现,强化单片机应用电路的设计与分析能力。
用所学的知识和自身课外的拓展学习加深对专业课的理解和学习;锻炼综合运用电路设计及相关电子仪器、单片机软硬件结合的理论,结合生产实际分析和解决工作工程实际问题的能力,加固、加深和扩展有关电子类,汇编语言,相关电子电路和仿真软件方面的知识和能力。
并加强培养如下能力:1.加强自身独立的动手能力和思考解决问题的能力,提高创造能力;2.学会使用软件Proteus画原理图和仿真调试。
3.学会基本焊接电路板的技能通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
二、设计要求1、可以以实现正常秒表的所有功能,包括启动、暂停、复位等;2、可以自由设定倒计时时间(10s、20s、30s···),并进行倒计时;3、显示方式自选;4、任选一款51单片机;5、扩展功能:在秒表的基础上增加时钟功能,倒计时完成时加入报警单元,如声音、灯光等。
三、总体设计3.1总体框图本硬件设计总共包括五部分电路:显示电路、振荡电路、复位电路、报警电路、按键电路。
除了单片机工作必须的振荡电路,复位电路外,该设计增加了报警电路用来提示倒计时完成,显示电路用来显示倒计时,按键电路用来设定倒计时间以及控制开始暂停。
总体设计框图如图3.1所示。
单片机60分钟倒计时秒表
60分钟倒计时秒表功能:1.带有启动键Start,暂停键Pause,停止键Stop,复位键Reset;2.4位数码管显示分(两位)秒(两位);3.按启动键启动从60分开始倒计时,按暂停键暂停,显示保持原来计时时间,再次按启动键继续计时,按停止键停止计时,复位键复位,到零停止计时.4.按停止键后,可按中间的4个键,分别对应分的十位(2键),个位(4键),和秒的十位(5键),个位(9键),按动一下,相应的位增1,并保证时间的正确值,再按一次停止键,保存设置值,按其它键则放弃设置时间值,恢复原来的时间.电路图:计时器工作模式:编码(54H单元) 当前工作模式00H Reset01H Start02H Pause03H Stop主程序流程:主程序代码段:ORG 0000HLJMP MAINORG 000BHLJMP TIMER0ORG 1000HMAIN: ACALL INIT ;初始化定时器SETB EA ;开总中断SETB ET0 ;开定时器0中断MOV A, #03H ;设置8155的工作模式, PA, PB输出, PC输入.MOV DPTR, #7F00HMOVX @DPTR, ABEGIN: ACALL DISACALL CLEARACALL CCSCANJNZ INK1AJMP BEGININK1: ACALL DISACALL CLEARACALL CCSCANJNZ INK2AJMP BEGININK2: MOV R2, #7FH ;从最左边列开始扫描MOV R4, #00HCOLUM: MOV DPTR, #7F02HMOV A, R2MOVX @DPTR, AINC DPTRMOVX A, @DPTRJB ACC.2, LONEMOV A, #00HAJMP KCODELONE: JB ACC.1, NEXTMOV A, #04HKCODE: ADD A, R4ACALL PUTBUFKON: ACALL DISACALL CLEARACALL CCSCANJNZ KONNEXT: INC R4MOV A, R2JNB ACC.4, KERRRR AMOV R2, AAJMP COLUMKERR: AJMP BEGINCCSCAN: MOV DPTR, #7F02HMOV A, #00HMOVX @DPTR, AINC DPTRMOVX A, @DPTRCPL AANL A, #03HRETCLEAR: MOV DPTR, #7F01HMOV A, #00HMOVX @DPTR, ARETINIT: MOV 53H, #06H ;分十位MOV 52H, #00H ;分个位MOV 51H, #00H ;秒十位MOV 50H, #00H ;秒个位MOV 54H, #00H ;存放当前工作模式, 00:Reset, 01 Start, 02 Pause, 03 StopMOV 55H, #0AH ;定时计数用, 定时器每次中断0.1s, 计数10次, 定时1sCLR TR0MOV TMOD, 01H ;定时器工作在方式1, 16位定时器MOV TH0, #3CHMOV TL0, #0B0HRETDIS: PUSH ACCPUSH 00HPUSH 03HMOV A, #03HMOV DPTR, #7F00HMOVX @DPTR, AMOV R0, #50HMOV R3, #0EFHMOV A, 54HCJNE A, #03H, DIS0MOV R0, #60HDIS0: MOV A, R3AGAIN: MOV DPTR, #7F02HMOVX @DPTR, AMOV A, @R0MOV DTPR, DAT ASMOVC A, @A+DPTRMOV DPTR, #7F01HMOVX @DPTR, AACALL DL1MSINC R0MOV A, R3JNB ACC.0, OUTRL AMOV R3, AAJMP AGAINOUT: POP 03HPOP 00HPOP ACCRETDAT AS: DB 03FH, 06H, 05BH, 04FH, 066H, 06DH, 07DH DB 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71HDL1MS: MOV R7, #01HDL0: MOV R6, #0FFHDL1: DJNZ R6, DL1DJNZ R7, DL0RETPUTBUF: MOV R1, AJNZ CHKSTAR TACALL RESETFUNCSJMP GOBACKCHKSTAR T: CJNE R1, #03H, CHKPAUSEACALL STAR TFUNCSJMP GOBACKCHKPAUSE: CJNE R1, #04H, CHKSTOPACALL PAUSEFUNCSJMP GOBACKCHKSTOP: CJNE R1, #07H, CHKOTHERACALL STOPFUNCSJMP GOBACKCHKOTHER: ACALL OTHERFUNCGOBACK: RETRESETFUNC: MOV R0, 54HCJNE R0, #00H, RESET0RETCJNE R0, #01H, RESET0RETRESET0: ACALL INITMOV 54H, #00HRETSTAR TFUNC: MOV R0, 54HCJNE R0, #01H, STAR T0RETSTAR T0: MOV 54H, #00HSETB TR0RETPAUSEFUNC: MOV R0, 54HCJNE R0, #01H, PAUSE0CLR TR0MOV 54H, #02HSJMP PAUSE1PAUSE0: CJNE R0, #02H, PAUSE1SETB TR0MOV 54H, #01HPAUSE1: RETSTOPFUNC: MOV R0, 54HCJNE R0, #03H, STOP0MOV 54H, #02HMOV R0, #50HMOV R1, #60HSTOP1: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R0, #54H, STOP1RETSTOP0: CLR TR0MOV 54H, #03HMOV R0, #60HMOV R1, #50HSTOP2: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R1, #54H, STOP2RETOTHERFUNC: MOV R0, 54HCJNE R0, #03H, OTHER0CJNE R1, #01H, OTHER1MOV R0, #63HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER1: CJNE R1, #02H, OTHER2MOV R0, #62HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER2: CJNE R1, #05H, OTHER3MOV R0, #61HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER3: CJNE R1, #06H, OTHER0MOV R0, #60HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER0: RET;使用定时器0, 工作模式1, 定时0.1s, 晶振频率为6MHz;定时器初值X = 65536 –50000 = 15536 = 3CB0HTIMER0: MOV TH0, #3CHMOV TL0, #0B0HDJNZ 55H, EXIT0 ;判断是否已定时中断10, 即1秒MOV 55H, #0AHMOV R0, #50HGOON0: DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #05HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0 ; 倒计时结束, 停止计时, 显示全”0”ACALL INITMOV 53H, #00HMOV 54H, #03HEXIT0: RET。
单片机设计秒表
单片机设计秒表
单片机设计秒表是一种常见的嵌入式系统应用。
秒表是一种简单但非常实用的设备,用于计时各种活动的时间,比如运动比赛、实验室实验、厨房烹饪等。
在单片机设计秒表中,可以使用一块微控制器(MCU)作为核心芯片,例如常见的基于8051系列的单片机。
此外,还需要一块显示器模块用于显示计时结果,以及一些按钮用于控制计时功能。
设计秒表的关键是编程。
通过使用单片机的GPIO(通用输入输出)口,可以连接按钮和显示器。
在编程方面,需要使用计时器功能来实现精确的计时。
可以使用定时器中断来控制计时的开始、暂停和停止。
此外,还可以使用按键中断来实现按钮的功能,比如开始、暂停、复位等。
在拓展设计中,可以增加更多的功能。
例如,可以添加一个倒计时功能,允许用户设置特定的时间,并在达到所设置的时间时触发警报。
还可以添加计圈功能,允许用户记录每一圈的时间,并显示圈速、平均速度等信息。
此外,还可以将秒表设计为可连接到计算机或其他设备的外部接口,以便将计时结果传输到其他设备进行分析或存储。
在实际应用中,秒表可以广泛用于运动场馆、体育比赛、科学实验室等。
它的简单性和准确性使其成为各种计时需求的理想选择。
总之,单片机设计秒表是一项有趣且实用的嵌入式系统应用。
通过合理的硬件设计和编程实现,可以设计出功能丰富、易于操作的秒表,满足各种计时需求。
[中学]单片机设计60秒倒计时正计时Proteus仿真
60秒倒计时设计一:1.目的课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。
2.要求单片机控制的60s倒计时00000(1)用单片机AT89C51的定时器实现60s倒计时。
00000(2)用PROTEUS设计,仿真基于AT89c51单片机的60s倒计时实验。
3. 目标通过课程设计,使自己深刻理解并掌握基本概念,掌握单片机的基本应用程序设计及综合应用程序设计的方法。
2:方案选择图2.1:60秒倒计时总体电路设计本设计由硬件设计和软件设计两部分组成,总电路框图如图2.1所示。
具体设计:通过AT89C51型号单片机,由P1和P2两组I/O引脚分别控制两个7SEG–COM –ANODE型号数码管,分十位控制和个位控制,达到显示60秒倒计时的目的。
通过复位电路,在仿真过程中点击开关实现60复位3.1 AT89C51外形及引脚排列如图3.1所示图3.1:89C51的核心电路框图主要特性·与MCS-51 兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路管脚说明(1)电源及时钟引脚(4个)Vcc: 电源接入引脚Vss:接地引脚XTAL1:晶振震荡器接入的一个引脚(采用外部振荡器时,此引脚接地);XTAL2:晶体振荡器的另一个引脚(采用外部振荡器时,此引脚作为外部振荡器信号的输入端)。
(2)控制线引脚(4个)RST/Vpd:复位信号输入引脚/备用电源输入引脚;ALE:地址锁存允许信号输出引脚/编程脉冲输入引脚:EA:内外存储器选择引脚/片外EPROM编程电压输入引脚;PSEN:外部程序存储器选通信号输出引脚。
课程设计 单片机 60秒秒表
1任务及要求1.1设计任务学会用已经学过的单片机原理与应用的知识, 来设计一个实用性的结构简单化的小型电子产品。
编写一个程序, 实现秒计时器从00—59计时的基本功能。
利用Proteus工具来演示秒计时器的计时。
1.2设计要求利用MCS-51系列单片机作为秒表的主控制器芯片, 在单片机的P0端口和P2端口分别接两个共阴数码管, P0口驱动显示秒时间的十位, P2口驱动显示秒时间的个位。
要求做到性能稳定, 结构简单通俗易懂, 结构模块化, 从而做到节约成本。
(1)熟悉电路, 了解P0和P1口的作用。
(2)熟悉W A VE编译环境。
(3)熟练掌握汇编语言, 调用延时程序。
2设计思想2.1硬件设计将单片机设计成控制器, 在AT89C51的P0口和P2口都接7SEG-COM-CATHODE, P0口接上拉电阻, 分别显示十位和个位数字。
2.2软件设计通过单片机实现控制00-59的计数, 根据设计的要求, 将0到59的数据除以10, 分别取商和余数。
并且当一秒钟到来时, 计数单元加1, 到达60时, 则自动返回到0, 从新秒计数。
同时在计数过程中调用延时程序。
3电路原理与电路图3.1电路原理编写程序对80C51芯片进行初始化, 在编程过程中主要使用延迟程序来实现秒计时器的计时功能。
用Proteus软件来实现秒计时器的仿真, 其中将P0口和P1口分别作为高低位输出端口。
3.2电路原理图图3.1电路原理图4流程图与算法描述4.1函数流程图4.1.1实验系统流程图图4.1.1 实验系统流程示意图4.1.2延时程序流程图图4.1.2 延时程序流程图4.2 算法描述根据设计的要求, 利用单片机控制, 实现秒计数并显示, 具体设计如下:(1)将0到59的数据通过对10整除和对10求余, 将数据的个位和十位分开。
DIV AB(2)加1计数INC @R0(3)延时程序DELAY: MOV R5,#100DELAY2: MOV R6,#20DELAY1: MOV R7,#248DJNZ R7,$DJNZ R6,DELAY1DJNZ R5,DELAY25仿真分析程序采用汇编语言编写, 并用protues软件编译。
单片机倒计时秒表课程设计报告书
课程设计说明书课程名称:单片机技术设计题目:倒计时数字秒表设计院系:学生:三学号: *********专业班级: ***********指导教师:四年月日课程设计任务书倒计时秒表摘要:本次课程设计以AT89S52单片机为核心设计一个倒计时数字秒表,计数初值为59并开始每秒自动减1,当按键1按下时记录当前时间值,当按键2按下时显示当前记录值,显示过之后再次按下按键1时秒表复位为59。
本设计硬件部分包括电源电路、复位电路、按键电路、振荡电路、数码管显示电路五部分电路,软件程序部分有定时中断程序、外部中断程序、显示子程序和延时子程序等。
软件Proteus画出原理图并进行仿真,依照仿真成功的原理图接线,在万能版上把个个器件焊接好从而实现预期的功能。
关键词:倒计时 AT89S52 74LS47 数码管目录1.设计背景 (5)1.1、设计课题的提出 (5)1.2、设计作用与意义 (5)2.设计方案 (6)2.1、可行方案选择 (6)2.2、可行方案比较 (6)3.方案实施 (7)3.1、硬件电路的实施 (7)3.2、软件程序的实施 (11)4.结果与结论 (13)4.1、Proteus仿真运行结果 (13)4.2、结论 (14)5.收获与致 (14)6.参考文献 (14)7.附件 (15)7.1、附件一(整体电路图) (15)7.1、附件二(元件清单图) (16)7.1、附件三(程序) (17)7.1、附件四(运行实物图) (22)1.1设计课题的提出计时器日常生活中随处可见,我们手上的电子表,手机上的时间显示等,这些利用数字电路实现的装置,与机械时钟相比具有更高的准确性与直观性,且无机械装置,具有更长的使用寿命。
其中重要的组成部分就是计数器模块,是单片机中常见的模块,以计时器为基础还可以设计更多对日常生活密切相关的设备,诸如定时报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、甚至各种定时电器的自动启用等,都是以计时器为基础的。
单片机设计倒计时器
单片机设计倒计时器在我们的日常生活中,倒计时器有着广泛的应用,比如体育比赛、烹饪、考试等等。
通过单片机来设计倒计时器,不仅能够实现精准的计时功能,还能根据不同的需求进行灵活的定制和扩展。
接下来,让我们一起深入了解一下如何用单片机设计一个实用的倒计时器。
首先,我们需要明确倒计时器的基本功能和要求。
一般来说,倒计时器应该具备以下几个主要功能:1、设定倒计时的时间,时间范围可以根据实际需求进行调整,比如从几分钟到几小时。
2、能够清晰地显示剩余的时间。
3、具有启动、暂停和复位等操作按钮。
4、在倒计时结束时,能够发出提示信号,比如声音或者灯光提示。
为了实现这些功能,我们选择合适的单片机作为核心控制单元。
常见的单片机如 51 系列、STM32 系列等都可以满足需求。
以 51 单片机为例,它具有价格低廉、编程简单、资源丰富等优点。
在硬件设计方面,我们需要以下几个主要的组件:1、单片机最小系统:包括单片机芯片、晶振电路、复位电路等,为单片机的正常运行提供必要的条件。
2、显示模块:可以选择数码管或者液晶显示屏(LCD)来显示倒计时的时间。
数码管显示简单直观,适用于对显示效果要求不高的场合;LCD 显示屏则能够提供更丰富的信息显示,比如同时显示时间、日期等。
3、按键模块:用于输入操作指令,如设置时间、启动、暂停、复位等。
4、报警模块:可以使用蜂鸣器或者发光二极管(LED)在倒计时结束时发出提示信号。
下面我们来详细介绍一下各个模块的设计和实现。
单片机最小系统的设计是整个硬件系统的基础。
晶振电路为单片机提供时钟信号,保证其正常运行的时序。
复位电路则在系统出现异常时,能够将单片机恢复到初始状态。
对于显示模块,如果选择数码管,需要通过驱动芯片(如74HC595)来控制数码管的显示。
如果选择 LCD 显示屏,则需要根据显示屏的接口类型(如并行接口或串行接口)来进行相应的连接和编程。
按键模块可以采用独立按键或者矩阵按键的方式。
51单片机秒表程序设计
51单片机秒表程序设计1. 简介秒表是一种用于测量时间间隔的计时器,常见于体育比赛、实验室实验等场合。
本文将介绍如何使用51单片机设计一个简单的秒表程序。
2. 硬件准备•51单片机开发板•LCD液晶显示屏•按键开关•连接线3. 程序流程3.1 初始化设置1.设置LCD液晶显示屏为8位数据总线模式。
2.初始化LCD液晶显示屏。
3.设置按键开关为输入模式。
3.2 主程序循环1.显示初始界面,包括“00:00:00”表示计时器初始值。
2.等待用户按下开始/暂停按钮。
3.如果用户按下开始按钮,则开始计时,进入计时状态。
4.如果用户按下暂停按钮,则暂停计时,进入暂停状态。
5.在计时状态下,每隔1毫秒更新计时器的数值,并在LCD液晶显示屏上显示出来。
6.在暂停状态下,不更新计时器的数值,并保持显示当前数值。
3.3 计时器控制1.定义一个变量time用于存储当前的计时器数值,单位为毫秒。
2.定义一个变量running用于标记计时器的状态,0表示暂停,1表示运行。
3.定义一个变量start_time用于存储计时器开始的时间点。
4.定义一个变量pause_time用于存储计时器暂停的时间点。
5.在计时状态下,每隔1毫秒更新time的值为当前时间与start_time的差值,并将其转换为小时、分钟、秒的表示形式。
6.在暂停状态下,保持time的值不变。
3.4 按键检测1.检测按键开关是否被按下。
2.如果按键被按下,判断是开始/暂停按钮还是复位按钮。
3.如果是开始/暂停按钮,并且当前处于计时状态,则将计时状态设置为暂停状态,并记录暂停时间点为pause_time;如果当前处于暂停状态,则将计时状态设置为运行状态,并记录开始时间点为当前时间减去暂停时间的差值。
4.如果是复位按钮,则将计时器数值重置为0,并将计时状态设置为暂停。
4. 程序代码示例#include <reg51.h>// 定义LCD控制端口和数据端口sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_EN = P1^2;sbit LCD_D4 = P1^3;sbit LCD_D5 = P1^4;sbit LCD_D6 = P1^5;sbit LCD_D7 = P1^6;// 定义按键开关端口sbit START_PAUSE_BTN = P2^0;sbit RESET_BTN = P2^1;// 定义全局变量unsigned int time = 0; // 计时器数值,单位为毫秒bit running = 0; // 计时器状态,0表示暂停,1表示运行unsigned long start_time = 0; // 开始时间点unsigned long pause_time = 0; // 暂停时间点// 函数声明void delay(unsigned int ms);void lcd_init();void lcd_command(unsigned char cmd);void lcd_data(unsigned char dat);void lcd_string(unsigned char *str);void lcd_clear();void lcd_gotoxy(unsigned char x, unsigned char y);// 主函数void main() {// 初始化设置lcd_init();while (1) {// 显示初始界面lcd_clear();lcd_gotoxy(0, 0);lcd_string("00:00:00");// 等待用户按下开始/暂停按钮while (!START_PAUSE_BTN && !RESET_BTN);// 判断按钮类型并处理计时器状态if (START_PAUSE_BTN) {if (running) { // 当前处于计时状态,按下按钮将进入暂停状态 running = 0;pause_time = time;} else { // 当前处于暂停状态,按下按钮将进入计时状态running = 1;start_time = get_current_time() - pause_time;}} else if (RESET_BTN) { // 复位按钮按下,重置计时器time = 0;running = 0;}}}// 毫秒级延时函数void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--) {for (j = 110; j > 0; j--);}}// LCD初始化函数void lcd_init() {lcd_command(0x38); // 设置8位数据总线模式lcd_command(0x0C); // 显示开,光标关闭lcd_command(0x06); // 光标右移,不移动显示器lcd_command(0x01); // 清屏}// 向LCD发送指令函数void lcd_command(unsigned char cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;LCD_D4 = cmd >> 4 & 1;LCD_D5 = cmd >> 5 & 1;LCD_D6 = cmd >> 6 & 1;LCD_D7 = cmd >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = cmd >> 0 & 1;LCD_D5 = cmd >> 1 & 1;LCD_D6 = cmd >> 2 & 1;LCD_D7 = cmd >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送数据函数void lcd_data(unsigned char dat) { LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;LCD_D4 = dat >> 4 & 1;LCD_D5 = dat >> 5 & 1;LCD_D6 = dat >> 6 & 1;LCD_D7 = dat >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = dat >> 0 & 1;LCD_D5 = dat >> 1 & 1;LCD_D6 = dat >> 2 & 1;LCD_D7 = dat >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送字符串函数void lcd_string(unsigned char *str) {while (*str) {lcd_data(*str++);delay(5);}}// 清屏函数void lcd_clear() {lcd_command(0x01);}// 设置光标位置函数void lcd_gotoxy(unsigned char x, unsigned char y) {unsigned char addr;if (y == 0)addr = x | (0x80 + y);else if (y == 1)addr = x | (0xC0 + y);lcd_command(addr);}5. 总结本文介绍了使用51单片机设计一个简单的秒表程序。
单片机课程设计秒倒计时
单片机课程设计秒倒计时概述在单片机课程设计中,秒倒计时是一个常见的实践项目。
本文将介绍如何使用单片机设计一个简单的秒倒计时电路,并使用Markdown文本格式进行说明。
硬件设备•单片机(例如STC89C52)•七段数码管•按钮•电阻、电容等基础元器件功能设计本文设计的秒倒计时电路具有以下功能: 1. 系统上电后,自动开始倒计时; 2. 使用按钮控制启动/暂停倒计时; 3. 使用按钮控制归零操作; 4. 显示倒计时的秒数。
硬件连接七段数码管将7个IO口分别连接到七段数码管的对应引脚,使用共阳极数码管时,将数码管的共阳极引脚连接到VCC,使用共阴极数码管时,将数码管的共阴极引脚连接到GND。
按钮使用一个按钮作为启动/暂停倒计时的按键,使用另一个按钮作为归零操作的按键。
将按钮引脚连接到单片机的GPIO口,并通过上拉电阻将按钮引脚连接到VCC。
软件设计引脚定义首先,需要定义单片机的输入输出引脚。
根据硬件连接,假设七段数码管的引脚分别连接到P0口,启动/暂停按钮连接到P1.0口,归零按钮连接到P1.1口。
可以使用以下代码进行引脚定义:// 引脚定义sbit LED = P0; // 七段数码管连接到P0口sbit KEY1 = P1^0; // 启动/暂停按钮连接到P1.0口sbit KEY2 = P1^1; // 归零按钮连接到P1.1口然后,需要设计倒计时的逻辑。
在每个时钟周期,需要判断是否需要启动/暂停倒计时,以及是否需要进行归零操作。
具体的倒计时逻辑可以使用以下代码实现:// 秒倒计时逻辑void countdown() {static unsigned int seconds = 60; // 倒计时的秒数,默认为60秒static bit running = 0; // 表示倒计时是否运行中,默认为停止状态if (running) {if (seconds > 0) {seconds--;} else {running = 0;}}if (KEY1 == 0) { // 按下启动/暂停按钮running = !running;delay(10); // 延时去抖动}if (KEY2 == 0) { // 按下归零按钮seconds = 60;running = 0;delay(10); // 延时去抖动}}最后,需要设计显示倒计时的逻辑。
单片机课程设计心得倒计时秒表【模版】
此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
掌握单片机应用系统的软硬件设计过程、方法及实现,强化单片机应用电路的设计与分析能力。
提高学生在单片机应用方面的实践技能和科学作风;培育学生综合运用理论知识解决问题的能力,实现理论结合实际,学以至用的原则。
用所学的知识和自身课外的拓展学习加深对专业课的理解和学习;锻炼综合运用电路设计及相关电子仪器、单片机软硬件结合的理论,结合生产实际分析和解决工作工程实际问题的能力,加固、加深和扩展有关电子类,汇编语言,相关电子电路和仿真软件方面的知识和能力。
通过本次课程设计,应加强培养如下能力:(1)加强自身独立的动手能力和思考解决问题的能力,提高创造能力;(2)学会使用软件Proteus画原理图和仿真调试。
(3)学会基本焊接电路板的技能通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
二、设计要求1、可以以实现正常秒表的所有功能,包括启动、暂停、复位等;2、可以自由设定倒计时时间(10s、20s、30s···),并进行倒计时;3、显示方式自选;4、任选一款51单片机;5、扩展功能:在秒表的基础上增加时钟功能,倒计时完成时加入报警单元,如声音、灯光等。
单片机秒表的设计程序
秒表的设计程序用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。
能用按键选择以上两功能之一。
三、程序代码:A_BIT EQU 20H ;数码管个位数存放内存位置B_BIT EQU 21H ;数码管十位数存放内存位置TEMP EQU 22H ;计数器数值存放内存位置;开机初始化MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入MOV P0,#0FFH;使显示时间数码管熄灭CLR F0CLR F1MOV DPTR,#NUMTAB ;指定查表启始地址;等待按键输入;根据按键的输入判断执行什么功能;按键1按下则执行功能1MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入MOV P0,#0FFH;使显示时间数码管熄灭START:JB P3.6,START1;循环判断开始按钮K1是否按下?ACALL DELAY10;延时10毫秒触点消抖JB P3.6,START;如果是干扰就返回JNB P3.6,$;等待按键松开LJMP GN1;按键2按下则执行功能2START1: JB P3.7,START;循环判断开始按钮K2是否按下?ACALL DELAY10;延时10毫秒触点消抖JB P3.7,START1;如果是干扰就返回JNB P3.7,$LJMP GN2;数码管显示秒表时间的程序GN1: ;先初始化S1:MOV A,#0MOV TEMP,AGOON1: MOV R2,#2JS1: MOV R3,#250TIME1: MOV A,TEMP ;将TEMP中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV ABMOV B_BIT,A ;十位在AMOV A_BIT,B ;个位在BLCALL DPLOP1;插入一段判断定时过程中是否有按键输入的程序段C1: JB P3.6,B1ACALL DELAY10;延时10毫秒消抖JB P3.6,C1JNB P3.6,$;等待按键松开CPL F0ZT1: ; MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入 JB P3.6,$;循环判断开始按钮K1是否按下?ACALL DELAY10;延时10毫秒触点消抖JB P3.6,ZT1;如果是干扰就返回JNB P3.6,$;等待按键松开LCALL DPLOP1B1: JB P3.7,LOOP1ACALL DELAY10;延时10毫秒消抖JB P3.7,B1JNB P3.7,$;等待按键松开AJMP OVERLOOP1: DJNZ R3,TIME1 ;2毫秒循环执行250次,时间约0.5秒DJNZ R2,JS1 ;循环执行2次,时间为1 秒钟INC TEMP;满一秒钟对时间加1MOV A,TEMPCLR CSUBB A,#60JNZ GOON1;判断TEMP的数值是否为60?不为60循环ACALL OVERRETGN2: MOV A,#14H ; 设定倒计时的时间20SMOV TEMP,A;数码管显示倒计时时间的程序;初始化MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入MOV P0,#14H;使显示时间为设定的倒计时时间GOON2: MOV R2,#2JS2: MOV R3,#250TIME2: MOV A,TEMP ;将TEMP中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV ABMOV B_BIT,A ;十位在AMOV A_BIT,B ;个位在BMOV DPTR,#NUMTAB ;指定查表启始地址DPLOP2: MOV A,A_BIT ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码MOV P0,A ;送出个位的7段代码CLR P2.5 ;开个位显示ACALL DELY1;显示1毫秒SETB P2.5;关闭个位显示,防止鬼影MOV A,B_BIT ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码MOV P0,A ;送出十位的7段代码CLR P2.6 ;开十位显示ACALL DELY1;显示1毫秒SETB P2.6;关闭十位显示,防止鬼影;插入一段判断定时过程中是否有按键输入的程序段C2: JB P3.6,B2ACALL DELAY10;延时10毫秒消抖JB P3.6,C2JNB P3.6,$;等待按键松开ZT2: MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入 JB P3.6,$;循环判断开始按钮K1是否按下?ACALL DELAY10;延时10毫秒触点消抖JB P3.6,ZT2;如果是干扰就返回JNB P3.6,$;等待按键松开B2: JB P3.7,LOOP2ACALL DELAY10;延时10毫秒消抖JB P3.7,B1JNB P3.7,$;等待按键松开AJMP OVERLOOP2: DJNZ R3,TIME2 ;2毫秒循环执行250次,时间约0.5秒DJNZ R2,JS2 ;循环执行2次,时间为1 秒钟DEC TEMP;满一秒钟对时间减1MOV A,TEMPJNZ GOON2;判断TEMP的数值是否为0?不为0循环ACALL OVERRET;结束定时OVER: AJMP START;退到开机初始化状态;1毫秒延时子程序DELY1: MOV R4,#2D1:MOV R5,#248DJNZ R5,$DJNZ R4,D1RET;10毫秒延时子程序DELAY10: MOV R4,#20D2:MOV R5,#248DJNZ R5,$DJNZ R4,D2RET;实验板上的两位一体的数码管0~9各数字的显示代码NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H DPLOP1: MOV A,A_BIT ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码MOV P0,A ;送出个位的7段代码CLR P2.5 ;开个位显示ACALL DELY1;显示1毫秒SETB P2.5;关闭个位显示,防止鬼影MOV A,B_BIT ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码MOV P0,A ;送出十位的7段代码CLR P2.6 ;开十位显示ACALL DELY1;显示1毫秒SETB P2.6;关闭十位显示,防止鬼影RETEND。
单片机课程设计倒计时秒表
一、设计目的此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
掌握单片机应用系统的软硬件设计过程、方法及实现,强化单片机应用电路的设计与分析能力。
提高学生在单片机应用方面的实践技能和科学作风;培育学生综合运用理论知识解决问题的能力,实现理论结合实际,学以至用的原则。
用所学的知识和自身课外的拓展学习加深对专业课的理解和学习;锻炼综合运用电路设计及相关电子仪器、单片机软硬件结合的理论,结合生产实际分析和解决工作工程实际问题的能力,加固、加深和扩展有关电子类,汇编语言,相关电子电路和仿真软件方面的知识和能力。
通过本次课程设计,应加强培养如下能力:(1)加强自身独立的动手能力和思考解决问题的能力,提高创造能力;(2)学会使用软件Proteus画原理图和仿真调试。
(3)学会基本焊接电路板的技能通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
二、设计要求1、可以以实现正常秒表的所有功能,包括启动、暂停、复位等;2、可以自由设定倒计时时间(10s、20s、30s···),并进行倒计时;3、显示方式自选;4、任选一款51单片机;5、扩展功能:在秒表的基础上增加时钟功能,倒计时完成时加入报警单元,如声音、灯光等。
单片机简易秒表正计时时间可设置倒计时时间可查询
单片机简易秒表正计时时间可设置倒计时时间可查询1.1设计任务用AT89C52设计一个4位的LED数码作为多功能“秒表”。
1.2设计目的1.学习数码管显示的结构与工作流程,实现数码管分组显示数字组合。
2.学习有关单片机的内容,进一步熟悉AT89C52芯片的有关功能。
3.复习C语言的有关知识。
4.培养自学能力与探索解决问题的能力。
1.3设计要求显示时间为00分00秒-59分59秒,每1秒自动加1,另外设计一个“开始/暂停”键、一个“记录/查询”键、一个“清零”键、一个“模式切换”键、一个“时间设置”键、一个“复位”键。
秒表要求正计时时,可记录同时查询10组数据,倒计时时,时间用户可设置,同时时间到时蜂鸣器报警。
1.4设计创新在基本设计基础上添加了正向查询10条记录后蜂鸣器同时报警。
1.5设计意义简易秒表具有读取方便,显示直观,功能多样,电路简洁,成本低廉等诸多优点,符合电子仪器仪表的进展趋势,具有广阔的市场前景。
本次设计将基于单片机的工作原理,设计简易秒表的基本电路,深入的熟悉其工作原理,掌握其基本的工作特点。
同时简易秒表在生活中应用广泛,从实际出发,不断创新。
第二章方案设计与选择2.1技术可行性20世纪以来,微电子,IC集成电路行业进展迅速,其中单片机行业进展最引人注目。
单片机利用大规模集成电路技术把中央处理器与数据存储器(RAM),程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成最小的计算机系统。
如今的单片机进展集成了更多的特殊功能单元,比如A/D,D/A转换器,通信操纵,DMA,PWM操纵输出单元等。
因此,只要外加一些扩展电路及必要的通道接口就能够构成各类计算机应用系统。
单片机除了具备体积小,价格低,速度快,用途广,可靠性高等特点,在硬件结构与指令设置上还有下列特殊之处:1.存储器ROM与RAM是严格分工的。
前者存放程序,常数与数据表格,后者存放临时数据与变量。
2.使用面向操纵的指令系统,构成的应用系统有较大的可靠性。
单片机多功能秒表
.单片机综合实验报告题目: 多功能数字时钟班级:姓名:学号:一、实验内容:设计一个单片机控制的秒表系统。
利用单片机的定时器的原理,结合显示电路、LED 数码管以及按键来设计计时器,使系统能够正确地进行加、减(倒)计时,数码管能够正确地显示时间。
目的要求1)两位LED显示,显示时间为00~99秒。
2)每秒自动加1。
3)一个开始按键、一个复位按键和一个暂停按钮。
4)翻页按钮查看四个不同的计时值。
5)添加倒计时初始值设置功能6)不同功能通过功能键Setup实现切换。
二、实验电路及功能说明本实验以51单片机为核心,应用其中断来定时,通过按键来控制时间和日期的调整,通过1602LCD来数字显示时钟,做成一个简易的数字时钟。
本实验要求能定时,还要能设置闹铃,由于对C51程序代码的写法不是很熟,没能实现闹铃功能。
所以,最后该实验能实现的功能为时间和日期的调整。
其原理图如下图所示:三、实验程序流程图:主程序:主程序流程图子流程图(按键功能设置)四、实验结果分析经过proteus仿真可知:该方案可行,能够对时间进行精确的调整,也能对日期进行更正,基本上能实现上述功能。
五、心得体会通过该试验我对51的了解更加深入了一层,特别是对C51的写法更加了解,还对1602的基本操作有了一定的了解。
同时,也发现C语言的重要性,以后要多加强对C语言的学习.六、程序清单#include <REG52.H>#include <INTRINS.H> //库函数头文件,代码中引用了_nop_()函数// 定义控制信号端口sbit RS=P2^4; //P2.4sbit RW=P2^5; //P2.5sbit E=P2^6; //P2.6sbit set=P1^4; //设置键sbit add1=P1^5; //加1键sbit sub1=P1^6; //减1键sbit enter=P1^7; //确认键bit k=0,f=0;//k为0表示运行状态,k为1表示设置状态;f为0表示第一行显示,f为1表示第二行显示char sec,n,m;unsigned char count,key;unsigned char lcdd[]="0123456789";/*声明调用函数*/void dispd(); //日期显示函数void dispt(); //时间显示函数unsigned char keys();//按键扫描函数void lcd_w_cmd(unsigned char ); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数.void delay1(); //软件实现延时函数,5个机器周期/*主函数*/void main(){TMOD=0x01; //设置为定时器模式1TH0=(65536-50000)/256; //晶振6MHz,定时时间100msTL0=(65536-50000)%256;IE=0x82; //开全局中断和定时中断TR0=1; //启动定时器sec=0; //秒count=0; //中断次数清0n=-3; //设置键按下次数,第一行日期m=-3; //设置键按下次数,第二行时间P0=0xff; // 送全1到P0口int1(); // 初始化LCDdelay(255);while(1){key=keys(); //读取按键switch(key){case 0xe0: //按下设置键{TR0=0;k=1;if(f==0){n=n+3;if(n==9){n=0;m=0;f=1;}}else{m=m+3;if(m==12){m=0;n=0;f=0;}}if(f==0){lcd_w_cmd(0x0d);lcd_w_cmd(0x86+n);}else{lcd_w_cmd(0x0d);lcd_w_cmd(0xc4+m);}} break;case 0x70: //按下确认键{k=0;TR0=1;n=-3;m=-3;f=0;} break;case 0xd0: //按下加1键{if(k==1){if(f==0){(m==6){sec++;if(sec==100) sec=0;} dispt(); //调用第二行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;case 0xb0: //按下减1键{if(k==1){if(f==0){if(m==6){sec--;if(sec<0) sec=99;}dispt(); //调用第二行显示函数.lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;}if(k==0) {dispd();dispt();} //调用LCD显示函数}}/*延时函数*/void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<20;j++);}/*延时函数1*/void delay1(){_nop_();_nop_();_nop_();}/*LCD初始化函数*/void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0c); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}/*LCD读状态函数*///返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsigned char lcd_r_start(){unsigned char s;RW=1; //RW=1,RS=0,读LCD状态delay1();RS=0;delay1();E=1; //E端时序delay1();s=P0; //从LCD的数据口读状态delay1();E=0;delay1();RW=0;delay1();return(s); //返回读取的LCD状态字}/*LCD写命令函数*/void lcd_w_cmd(unsigned char ){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=0; // RW=0,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();P0=; //将中的命令字写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*LCD写数据函数*/void lcd_w_dat(unsigned char dat){unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=1; // RW=1,RS=0,写LCD数据delay1();E=1; // E端时序delay1();.P0=dat; // 将dat中的显示数据写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*****定时中断函数*****/void timer0() interrupt 1{TH0=(65536-50000)/256; //晶振6MHz,定时时间100msTL0=(65536-50000)%256;count++;if(count==20){count=0;sec++;if(sec==99){sec=0;} /*按键扫描函数*/unsigned char keys(){unsigned char cod,del;P1=0xf0;cod=P1&0xf0; //读入P3口键值if(cod!=0xf0) //先检测有无按键按下{delay(100); //去抖if(cod!=0xf0){cod=P1&0xf0; //读入键值do //等待键释放{P1=0xf0;del=P1&0xf0;}while(del!=0xf0);return(cod);//返回键值}}return(0xf0); //返回该值}void dispt(){lcd_w_dat(lcdd[sec%10]);delay(2);lcd_w_dat(' ');delay(2);lcd_w_dat('W');delay(2);}。
单片机倒计时系统
单片机倒计时系统单片机倒计时系统可以采用8051单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计。
具体功能包括:1.六位LED显示,从59分59秒99开始倒计时。
2.倒计时精度为0.01秒,能正确地进行倒计时。
3.复位后倒计时重新回到初始状态。
单片机倒计时系统的制作方法包括以下步骤:1.确定系统的基本要求:例如数码管上显示计时的时间,可以通过按键实现1小时内初始时间的设定(以秒为分度),并且完成计时,可随时暂停并且重新设置计时时间等。
2.选择合适的单片机型号:根据需要实现的倒计时功能以及控制要求,选择适合的8051单片机型号,例如AT89C51等。
3.设计电路:根据所选的单片机型号和功能要求,设计外围电路,包括按键电路、复位电路、晶振电路、LED显示电路等。
4.编写程序:使用C语言等编程语言编写程序,实现倒计时的功能。
程序应该包括主程序、中断服务程序等。
在编写程序时需要考虑按键的输入、时间的计算、LED的显示等细节问题。
5.调试程序:通过调试程序可以确保程序的正确性和可靠性。
在调试时需要使用调试工具,例如示波器、逻辑分析仪等,对程序的各个部分进行测试和验证。
6.制作电路板:将设计好的电路制作成电路板,将各个元器件按照设计好的位置和连接方式焊接在电路板上。
7.测试系统:完成电路板的制作后,需要进行系统测试,验证是否实现了预期的倒计时功能。
测试时需要使用测试工具,例如电源、按键、LED显示器等,对系统的各个部分进行测试和验证。
总之,单片机倒计时系统是一个比较复杂的系统,需要设计电路、编写程序、制作电路板和测试系统等多个步骤。
在制作过程中需要注意细节问题,确保系统的正确性和可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一、设计目的 (1)二、设计任务及要求 (2)三、总体方案设计 (2)四、硬件电路设计 (3)1、各部分电路设计 (3)2、整体电路图 (8)五、软件设计 (9)1、程序流程图 (9)2、源程序 (9)六、仿真效果 (9)1、显示部分仿真效果 (9)2、报警装置仿真效果 (10)七、实物调试 (11)八、设计总结 (11)1、设计过程中遇到的问题及解决方法 (11)2、设计体会 (12)3、对设计的建议 (12)参考文献 (13)附录 (14)一、设计目的单片机课程设计中通过查阅资料、接口设计、程序设计、安装调试等环节,完成AT89S-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,是同学们将课堂上学到的理论知识与实际应用结合起来,并能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,增进对单片机的感性认识,加深对单片机理论方面的理解,掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、串行口通信等,强化单片机应用电路的设计与分析能力,提高学生在单片机应用方面的实践技能和科学作风,培育学生综合运用理论知识解决问题的能力,实现理论结合实际,学以至用的原则。
运用所学的知识和自身课外的拓展学习加深对专业课的理解和学习,锻炼综合运用电路设计及相关电子仪器、单片机软硬件结合的理论,结合生产实际分析和解决工作工程实际问题的能力,加固、加深和扩展有关电子类,汇编语言,相关电子电路和仿真软件方面的知识和能力。
通过本次课程设计,应加强培养如下能力:(1)加强自身独立的动手能力和思考解决问题的能力,提高创造能力。
(2)学会使用软件Proteus画原理图和仿真调试。
(3)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课的应用进一步的了解。
(4)掌握定时器、外部中断的设置和编程原理。
(5)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。
(6)该设计通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零功能,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义。
二、设计任务及要求1、可以以实现正常秒表的所有功能,包括启动、暂停、复位等;2、可以自由设定倒计时时间(10s 、20s 、30s ···),并进行倒计时;3、显示方式自选;4、任选一款51单片机;5、扩展功能:在秒表的基础上增加时钟功能,倒计时完成时加入报警单元,如声音、灯光等三、总体方案设计本硬件设计总共包括六部分电路:数码管显示电路、时钟电路、复位电路、电源电路、控制电路、报警装置。
总体设计框图如图1所示。
图1 总体设计方框图S T C 89C 52 P0P2 P2 P1数码管显示 时钟电路复位电路报警装置 电源电路 控制电路四、硬件电路设计1、各部分电路设计(1)单片机STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
因此,本次课程设计选用了容易烧写程序并且有较大内存的STC89C52芯片。
仿真图中的单片机如图2所示。
图2 仿真图中的STC89C52芯片(2)时钟电路时钟是单片机的心脏,单片机的各个功能部件的运行都是以时钟的频率为基准的,有条不紊按部就班的运行工作。
因此时钟频率直接影响单片机的运行速度,时钟电路的质量也直接影响单片机的系统的稳定性。
STC89C52单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2,这两个引脚跨接石英晶体振荡器和微调电容,就构成了一个稳定的自激振荡器。
时钟电路有两种方式:①内部时钟方式:当使用片内振荡器时,XTAL1(19脚)连接外部石英晶体和微调电容,XTAL2(18脚)连接外部石英晶体和微调电容。
②外部时钟方式:当采用外接时钟源时,XTAL1(19脚)接外部时钟振荡器的信号,XTAL2(18脚)悬空。
本次课程设计时钟电路采用的是内部时钟方式,该时钟电路如图3所示。
图3 时钟电路(3)复位电路单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
单片机系统的复位方式有:手动按钮复位和上电复位。
①手动按钮复位:需要人为在复位输入端RST上加入高电平。
一般采用的办法是在RST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,则Vcc的+5V 电平就会直接加到RST端。
②上电复位:只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。
上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。
为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。
上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。
本次课程设计复位电路采用的是手动按钮复位,该复位电路如图4所示。
图4 复位电路(4)数码管显示部分LED数码管在单片机系统中应用非常普遍,LED数码管是由光二极管构成。
常见的LED数码管为“8”字型的,共计八段。
每一段对应一个发光二极管,这种数码管显示器通常有共阳极和共阴极接法。
共阴极LED数码管的发光二极管的阴极连接在一起,通常此公共阴极接地。
当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。
同样,共阳极LED数码管的发光二极管的阳极连接在一起,通常此公共阳极接正电压。
当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。
此次选用的是共阴极的两位一体的LED数码管,数码管显示部分如图5所示。
图5 数码管显示部分(5)控制电路该控制电路有三个控制端分别为:①秒表十位加一;②秒表十位减一;③秒表个位加一;④秒表个位减一;⑤秒表显示清零;⑥开始/暂停该部分控制电路如图6所示图6 秒表控制电路(6)报警装置报警电路是对倒计时秒表完成时的提醒,该报警装置采用蜂鸣器进行。
报警电路用了一个电阻、一个s9013三极管和一个蜂鸣器,该报警电路如图7所示。
图7 报警装置2、整体电路图图8 整体电路图五、软件设计1、程序流程图N图9 程序流程图2、源程序见附录。
六、仿真效果1、显示部分仿真效果图10 显示效果图2、报警装置仿真效果由于报警装置有蜂鸣器组成,当倒计时结束时蜂鸣器会响一秒,在蜂鸣器的两端各加一电压探针测两端电压,由图11可以看出,当倒计时结束时蜂鸣器两端电压相差约5V,故蜂鸣器会响一秒以提示倒计时结束。
报警装置仿真效果图如图11所示。
图11 报警装置仿真效果图七、实物调试图12 实物正面效果图图13 实物反面连线图八、设计总结1、设计过程中遇到的问题及解决方法本次课程设计是第一次接受单片机的课程设计,这也是检验我们这学期以来所学到的关于单片机课程的理解与应用,在设计时,难免会遇到一系列的问题,下面是一些实验中遇到的问题及解决方法:①刚开始应用Proteus仿真的时候由于不会使用,导致无法继续程序以及电路板的焊接等一系列的后续工作,后来通过问同学们和百度一些前辈们的经验,可以正确并熟练的掌握Proteus仿真。
②在焊接电路板上的数码管时,不清楚数码管各个引脚所对应的段选和位选,在网上百度后也找到很多版本,问同学也不清楚,最后解决方法是用万用表的二极管档测量数码管的位选以及段选。
③仿真做好,实物也焊接好之后,实物不能正常工作,先用万用表测试了电源的正极和负极,没有问题又给单片机上电检查各个引脚与负极之间的电压也没什么问题,最后问老师和同学确定是程序的问题。
2、设计体会经过一周的课程设计,完成了倒计时秒表的设计,从开始学习Proteus到实物正常工作付出了许多努力,虽然遇到了很多困难,但在同学们和老师的帮助以及查阅资料的情况下,问题一一得到解决,通过这次课程设计,我认识和了解了基本的单片机设计的开发过程。
期间,我学会了分析课题的要求,查阅资料用怎样的元器件来实现,学会用Protues 软件来绘制原理图,用c语言来编写源程序,最后成功做出实物并能正常工作。
此外,我也学习到了很多以前没有经历过的知识,比如,如何用万用表来测量数码管的各个引脚,同时让我更加清楚了理论知识和实践能力的差别,了解到自己的短处,培养了我的独立思考和解决问题的能力,在此次设计中,也发现了自己的不足之处。
进一步提高了自己在实际设计过程中研究问题、发现问题、解决问题的能力,将我们所学的知识应用于生活实践中,真正的做到了学以致用的效果。
3、对设计的建议本次课程设计由于我和很多同学一起在实验室焊接电路板,期间发现了不少其他问题,我有以下建议:①单片机课程设计中要用的东西很零散,而且大部分器材较便宜,可以多买一些备用,防止有些零件损坏或者丢失之后导致实物不完整。
②建议老师对于AT公司和STC公司生产的单片机做一些说明,告诉同学们两种烧写单片机程序的不同,鉴于同学们买的开发板大多只能烧写STC系列的单片机,建议同学们购买STC的单片机。
参考文献[1]郭天祥.51单片机C语言教程[M]. 北京:电子工业出版社,2009.[2]李广弟.单片机基础[M]. 北京:航空航天大学出版社,2001.[3]迟荣强.单片机原理及接口技术[M] . 北京:高等教育出版社,2004.[4]张毅刚.单片机原理及应用[M]. 北京:高等教育出版社,2008.[5]楼然苗、李光飞. 单片机课程设计指导[M]. 北京:电子工业出版社,2007.[6]吴经国. 单片机应用技术[M]. 北京:中国电力出版社,2000.[7]吴金戌. 8051单片机实践与应用[M] . 北京:清华大学出版社,2004.[8]张毅刚.MCS-51单片机应用设计[M]. 哈尔滨:哈尔滨工业大学出版社,1997.附录:源程序:#include<reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义#define uchar unsigned charsbit BEEP=P1^7; //声明单片机P1口的第八位sbit DULA=P2^0; //两位一体数码管位选sbit WELA=P2^1;sbit key1=P2^2; //定义位变量,声明P2口sbit key2=P2^3;sbit key3=P2^4;sbit key4=P2^5;sbit key5=P2^6;sbit key6=P2^7;uchar code table[]={ //8段LED段码0x3f,0x06,0x5b,0x4f, //0,1,2,30x66,0x6d,0x7d,0x07, //4,5,6,70x7f,0x6f,0x77,0x7c, //8,9,A,b0x39,0x5e,0x79,0x71}; //C,d,E,Fvoid delay(uint); //声明延时函数uchar numt0,num; //定义变量void delay(uint z) //延时函数,z为x,则延时xms {uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uchar numdis) //数码管显示函数{uchar shi,ge; //定义十位和个位的变量shi=numdis/10; //将两位数的十位赋值给shi ge=numdis%10; //将两位数的个位赋值给geDULA=1;WELA=0;P0=table[ge];DULA=0;delay(5); //延时5msDULA=0;WELA=1;P0=table[shi]; //送十位段选数据WELA=0;delay(5);}void init() //初始化函数{TMOD=0x01; //设置工作方式1(0000 0001)TH0=(65536-50000)/256; //设置初值TL0=(65536-50000)%256;EA=1; //开总中断ET0=1; //开定时器0中断}void keyscan() //按键设置函数{if(key1==0){delay(10); //按键消抖if(key1==0) //如果仍未低电平,则表明有按键按下{num=num+10; //十位显示加一if(num==100) //当数加到100时重新归0num=0;while(!key1); //等待按键释放}}if(key2==0){delay(10);if(key2==0){if(num==0) //当数减到0的时候重新从100开始减num=100;num=num-10; //十位显示减一while(!key2);}}if(key3==0){delay(10);if(key3==0){num++; //个位显示加一if(num==100) //当数加到100时重新归0num=0;while(!key3);}}if(key4==0){delay(10);if(key4==0){if(num==0) //当数减到0的时候重新从100开始减num=100;num--; //个位显示减一while(!key4);}}if(key5==0){delay(10);if(key5==0){num=0; //清0while(!key5);}}if(key6==0){delay(10);if(key6==0){while(!key6);TR0=~TR0; //启动或停止定时器0 }}}void main(){BEEP=0; //关闭蜂鸣器init(); //初始化函数while(1){keyscan(); //调用按键函数display(num); //调用显示函数}}void T0_time()interrupt 1{TH0=(65536-50000)/256;//重装初值TL0=(65536-50000)%256;numt0++;if(numt0==20) //如果到了20次,说明1s时间到{numt0=0; //将numt0清0,以待下次计数使用num--;if(num==0) //当数减少至0的时候,蜂鸣器响1s然后倒计时停止,{BEEP=1;delay(1000);BEEP=0;TR0=0; //关定时器0,秒表停止工作}}}。