单片机完整电子时钟设计报告
- 格式:doc
- 大小:240.75 KB
- 文档页数:22
目一.作品介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 2 二.片机系原理及工作原理描述⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 2 三.程中碰到的及解决方法⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4 四.数据及差分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4 五.⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 5 六.程序模框⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 5 七.程序清⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯7单片机的个性化电子钟设计报告一.作品简介该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控, 4 位 LED 数码显示,分别显示“小时:分钟”。
该作品主要用于24 小时计时显示,能整时报时 ,能作为秒表使用,能定时闹铃 1 分钟。
使用方法 :开机后显示日期,学号,时钟在00:00:00 起开始计时。
(1)长按进入调分状态 :分单元闪烁 ,按加 1,按减 1.再长按进入时调整状态 ,时单元闪烁 ,加减调整同调分 .按长按退出调整状态。
(2)按进入设定闹时状态: 12:00: ,可进行分设定,按分加 1,再按为时调整 ,按时加 1,按调闹钟结束.在闹铃时可按停闹,不按闹铃 1 分钟。
(3)按下进入秒表状态:再按秒表又启动,按暂停 ,再按秒表清零 ,按退出秒表回到时钟状态。
二.单片机系统原理图及工作原理描述(1)总原理图如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块组成。
(2)各个模块说明1.单片机最小系统AT89S52 是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051 ,8031 的指令系统,他的运行速度要比8051 快最高支持达33MHz 的晶体震荡器,在此系统中使用12MHz 的晶振。
AT89S52 具有以下标准功能:8k 字节 Flash, 256字节 RAM,32 位 I/O口线,看门狗定时器, 2 个数据指针,三个16 位定时器 / 计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。
目录一.作品简介 (2)二.单片机系统原理图及工作原理描述 (2)三.设计过程中碰到的问题及解决方法 (4)四.测试数据及误差分析 (4)五.总结 (5)六.程序模块框图 (5)七.程序清单 (7)单片机的个性化电子钟设计报告一.作品简介该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控,4位LED数码显示,分别显示“小时:分钟”。
该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能定时闹铃1分钟。
使用方法:开机后显示日期,学号,时钟在00:00:00起开始计时。
(1)长按P3.2进入调分状态:分单元闪烁,按P3.2加1,按P3.3减1.再长按P3.2进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。
(2)按P3.3进入设定闹时状态: 12:00: ,可进行分设定,按P3.4分加1,再按P3.2为时调整,按P3.4时加1,按P3.3调闹钟结束.在闹铃时可按P3.2停闹,不按闹铃1分钟。
(3)按下P3.4进入秒表状态:再按P3.4秒表又启动,按P3.4暂停,再按P3.4秒表清零,按 P3.4退出秒表回到时钟状态。
二.单片机系统原理图及工作原理描述(1)总原理图如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块组成。
(2)各个模块说明1.单片机最小系统AT89S52是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz 的晶体震荡器,在此系统中使用12MHz 的晶振。
AT89S52具有以下标准功能: 8k 字节Flash ,256字节RAM ,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口、中断继续工作。
目录单片机的个性化电子钟设计报告作者:黄淀钧吴耿彬 09电信3班一、设计背景----------------------------------------------2二、作品简介----------------------------------------------2三、设计目的与意义----------------------------------------3四、设计要求----------------------------------------------3五、总体方案设计------------------------------------------35.1 硬件设计------------------------------------------35.1.1 总原理图----------------------------------------35.1.2 各模块设计--------------------------------------45.1.3 器件清单----------------------------------------75.2 软件设计----------------------------------------75.2.1 硬件框图----------------------------------------85.2.2 程序流程图--------------------------------------95.2.3 源程序代码--------------------------------------10六、遇到的困难和解决办法----------------------------------18七、参考文献----------------------------------------------18八、附录--------------------------------------------------18一、设计背景电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
单片机电子时钟设计报告一、设计任务本次课程设计的电子时钟电路,是基于单片机STC89C52、时钟芯片和液晶显示,运用C语言编程实现。
电子时钟可以显示日期的年、月、日和时间的时、分、秒,具有复位功能。
二、系统硬件设备及芯片简介数字电子钟系统设计已经成熟,但是目前系统设计时基本都是采用LED作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。
字符型液晶显示模块是一类专门用于显示字母、数字、符号等点阵式液晶显示模块。
本系统设计采用字符型液品显示模块LCD1602 作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。
1 LCD1602简介字符型液晶显示模块LCD1602已经是单片机应用设计中最常用的信息显示器件。
LCD1602可以显示两行,每行16个字符,采用+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。
2 LCD1602功能介绍2.1 引脚功能LCD1602采用标准14脚(无背光)或16脚(带背光)接口,各引脚功能见表1。
表1 引脚功能2.2 LCD1602读写指令LCD1602读写指令较多且较复杂,具体使用可以查相关资料,下面仅列出最常用的的一些命令:①写指令38H:显示模式设置;②写指令08H:显示关闭;③写指令01H:显示清屏;④写指令06H:显示光标移动设置;⑤写指令0CH:显示开及光标设置。
2.3 LCD1602 读写操作时序LCD1602 读写操作时序总体上来说是比较简单的,掌握其有两种方法:一种是只看时序图,另外一种方法是直接记忆和总结读写时电平高低和变化。
很显然第二种更简单和直接,下面就列出典型读写的时序要求,以方便编写程序。
(1)读状态:输入:RS=L,RW=H,E=H。
输出:D0-D7=状态字。
(2)写指令:输入:RS=L,RW=L,D0-D7=指令码,E=上升沿。
单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
单片机电子时钟课程设计报告一、设计目的。
本课程设计旨在通过单片机技术的应用,设计并制作一个简单的电子时钟。
通过这一设计,学生将能够掌握单片机的基本原理和应用,培养学生的动手能力和创新意识,提高学生的实际操作能力。
二、设计原理。
本电子时钟采用单片机作为控制核心,通过晶振产生的时钟信号来实现时间的计时和显示。
利用数码管来显示小时和分钟,通过按键来调整时间。
同时,通过蜂鸣器发出报时信号,实现基本的闹钟功能。
三、设计方案。
1. 硬件设计。
(1)单片机选择,本设计选用常见的51单片机作为控制核心,具有成本低、易于编程的特点。
(2)时钟电路,采用晶振作为时钟信号源,通过单片机的定时器来实现时间的计时。
(3)显示模块,采用数码管来显示小时和分钟,通过数码管的扫描显示来实现时间的动态显示。
(4)按键输入,设计按键来调整时间,包括调整小时和分钟。
(5)报时功能,通过蜂鸣器来实现基本的报时功能,可以设置闹钟时间。
2. 软件设计。
(1)时钟控制,通过单片机的定时器来实现时间的计时和更新。
(2)显示控制,设计数码管的扫描显示程序,实现时间的动态显示。
(3)按键处理,设计按键扫描程序,实现对时间的调整。
(4)报时功能,设计蜂鸣器的报时程序,实现基本的闹钟功能。
四、设计实现。
1. 硬件实现。
根据上述设计方案,完成了电子时钟的硬件连接和布线,保证各个模块之间的正常通讯和工作。
2. 软件实现。
编写了单片机的程序,实现了时钟的计时、显示和控制功能,保证了电子时钟的正常运行。
五、实验结果。
经过调试,电子时钟能够准确显示当前的时间,并能够通过按键调整时间和设置闹钟功能,报时功能也能够正常工作。
六、总结与展望。
通过本课程设计,学生掌握了单片机的基本原理和应用,培养了动手能力和创新意识。
在今后的学习和工作中,学生将能够更好地应用单片机技术,设计和制作更加复杂的电子产品。
同时,也为学生今后的科研和创新工作奠定了良好的基础。
实验四 电子钟(定时器、中断综合实验)一、实验目的熟悉MCS51类CPU 的定时器、中断系统编程方法, 了解定时器的应用、实时程序的设计和调试技巧。
二、实验内容编写一个时钟程序, 产生一个50ms 的定时中断, 对定时中断计数, 将时、分、秒显示在数码管上。
三、程序框图主程序中断处理电子钟程序框图四、实验步骤 1.连线说明: E5 区A0 ←→ A3 区A0 E5 区CS ←→ A3 区CS5 E5 区CLK ←→ B2 区2MHzE5 区A.B.C.D ←→ G5 区A.B.C.D (排线每个8 位, 注意高低位一致) 2.时间显示在数码管上五、程序清单 ms50 DATA 31H ;存放多少个50ms sec DATA 32H ;秒 min DATA 33H ;分hour DATA 34H ;时buffer DATA 35H ;显示缓冲区EXTRN CODE(Display8)ORG 0000HLJMP STARORG 000BH ;定时器T0中断处理入口地址LJMP INT_Timer0ORG 0100HSTAR: MOV SP,#60H ;堆栈MOV ms50,A ;清零ms50MOV hour,#12 ;设定初值: 12:59:50MOV min,#59MOV sec,#50MOV TH0,#60 ;定时中断计数器初值MOV TL0,#176 ;定时50msMOV TMOD,#1 ;定时器0: 方式一MOV IE,#82H ;允许定时器0中断SETB TR0 ;开定时器T0STAR1: LCALL Display ;调用显示JNB F0,$CLR F0SJMP STAR1 ;需要重新显示时间;中断服务程序INT_Timer0: MOV TL0,#176-5MOV TH0,#60PUSH 01HMOV R1,#ms50INC @R1 ;50ms单元加1CJNE @R1,#20,ExitIntMOV @R1,#0 ;恢复初值INC R1INC @R1 ;秒加1CJNE @R1,#60,ExitInt1MOV @R1,#0INC R1INC @R1 ;分加1CJNE @R1,#60,ExitInt1MOV @R1,#0INC R1INC @R1 ;时加1CJNE @R1,#24,ExitInt1MOV @R1,#0ExitInt1: SETB F0ExitInt: POP 01HRETIHexToBCD: MOV B,#10DIV ABMOV @R0,BINC R0MOV @R0,AINC R0RETDisplay: MOV R0,#bufferMOV A,secACALL HexToBCDMOV @R0,#10H ;第三位不显示INC R0MOV A,minACALL HexToBCDMOV @R0,#10H ;第六位不显示INC R0MOV A,hourACALL HexToBCDMOV R0,#bufferLCALL Display8RETENDEXTRN CODE (Display8)BUFFER DA TA 60HORG 0000HAJMP MAINORG 000BHAJMP IT0PMAIN: MOV TMOD,#01HMOV 20H,#20HCLR AMOV 52H,A ;计数和显示MOV 51H,A ;空间清零MOV 50H,#50HMOV 40H,AMOV 41H,AMOV 43H,AMOV 44H,AMOV 46H,AMOV 47H,ASETB ET0SETB EAMOV TH0,#9EH ;计数器赋初值MOV TL0,#58HSETB TR0MOV 45H,#11HMOV 42H,#11HMOV R0,#BUFFERLCALL Display8HERE: AJMP HEREIT0P: PUSH PSWPUSH ACCMOV TH0,#9EH ;重新转入计数值MOV TL0,#58HDJNZ 20H,RETURN ;计数不满20返回MOV 20H,#20H ;重置中断次数MOV A,#01H ;秒加1ADD A,50HDA A ;秒单元十进制调制PUSH ACCCJNE A,#60H,SWS ;是否到60秒, 否则返回MOV A,#00HSWS: MOV R5,ASW AP AANL A,#0FHMOV 41H,AMOV A,R5ANL A,#0FHMOV 40H,A ;满60秒, 秒单元清零LCALL AAAPOP ACCMOV 50H,ACJNE A,#60H,RETURNMOV 50H,#00HMOV A,#01H ;分单元加1ADD A,51H ;分单元十进制调整DA APUSH ACCCJNE A,#60H,SWS1;是否到60分, 否则返回MOV A,#00HSWS1: MOV R5,A·SW AP AANL A,#0FHMOV 44H,AMOV A,R5ANL A,#0FHMOV 43H,ALCALL AAAPOP ACCMOV 51H,ACJNE A,#60H,RETURNMOV 51H,#00H ;满60分, 分单元清零MOV A,#01H ;时单元加1ADD A,52HDA APUSH ACCCJNE A,#24H,SWS2 ;是否到24小时, 否则返回MOV A,#00HSWS2: MOV R5,ASW AP AANL A,#0FHMOV 47H,AMOV A,R5ANL A,#0FHMOV 46H,ALCALL AAAPOP ACCMOV 52H,ACJNE A,#24H,RETURNMOV 52H,#00H ;满24小时, 时单元清零RETURN:POP PSWPOP ACCRETIAAA: MOV R0,#40H ;计数器的值赋MOV R1,#60H ;给显示空间MOV R5,#08HABC: MOV A,@R0MOV @R1,AINC R1INC R0DJNZ R5,ABCMOV R0,#BUFFERLCALL Display8RETEND六、思考题1.电子钟走时精度与哪些有关系?中断程序中给TL0赋值为什么与初始化程序中不一样?2、使用定时器方式二, 重新编写程序。
一、总设计思路电子时钟是我们日常生活中最常见的一种钟表,由于它结构简单、功耗低、时间精度比较准、等优点,使得广泛应用,在未来肯定有很大的市场。
这次课程设计我的目的就是尝试着做一个电子时钟。
1、系统功能显示时间、声音提示、调整时间、设置闹钟的功能。
2、功能硬件实现方案时间显示:时间的显示我选用的是六位七段数码管,由于数码管控制简单,而且显示效果好,所以选用它。
由于静态显示方式比较占资源,而且电路比较复杂,所以我们选择了动态显示方式,电路简单,效果挺好。
时间调整和闹钟设置:是通过外部两个按键触发单片机中断进而控制时间的调整。
其中一个按键是模式选择按键通过触发外部中断0来选择功能,功能主要是选择要调时、调分、调秒、闹钟调时、闹钟调分、闹钟调秒六种模式。
第二个按键通过触发外部中断1来在相应的模式下对时间的大小做调整。
声音提示:通过利用蜂鸣器来作为发生装置,有整点提示功能和闹铃功能。
时间发生:利用单片机自带定时器0做定时,通过软件控制来产生时、分、秒。
3、功能软件实现方案由于单片机C语言已经全面普及,它的程序容易理解、简单易写、可移植性好,所以我们选择用单片机C语言来写。
4、开发环境操作系统:window 7旗舰版64位程序编辑编译软件:KEIL μVision V4.60.6.10仿真软件;Proteus V ersion 7.85.、总设计原理框图STC89C52RC6位七段数码管显示时、分、秒蜂鸣器发声装置时钟复位电路按键调时模块一、硬件设计定时和程序执行及控制模块:我们选择的是宏晶科技生产的STC89C52RC芯片,它在很多硬件资源上比8051提升了不少,所以在后期我们可以做更多扩展和维护。
时间显示模块::采用六个七段带小数点的共阴极数码管。
声音提示模块:采用简单蜂鸣器做声音提示。
调时模块:通过两个简单按键来触发中断调时。
时钟复位模块:采用11.0592MHz的晶振,提供单片机工作频率。
二、设计原理图三、芯片解说STC89C52:是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。
单片机电子时钟课程设计报告一、引言。
随着科技的不断发展,电子产品已经渗透到我们生活的方方面面。
其中,电子时钟作为一种常见的电子产品,被广泛应用于各个领域。
本课程设计旨在通过单片机技术,设计并实现一个功能强大、稳定可靠的电子时钟,以满足人们对精准时间的需求。
二、设计方案。
1. 硬件设计。
本课程设计选用了51单片机作为核心处理器,配合数码管显示模块、时钟芯片等外围器件,构成了电子时钟的硬件平台。
通过对硬件电路的设计和布线,实现了对时间的精准显示和控制。
2. 软件设计。
在软件设计方面,本课程设计采用了C语言作为编程语言,利用单片机的定时器、中断等功能模块,编写了精确的时钟控制程序。
通过对时钟的分、秒、小时的精准控制,实现了电子时钟的正常运行和显示。
三、功能实现。
1. 时间显示。
经过精心设计的软件程序,实现了对时间的精准显示。
时钟的显示界面清晰明了,数字显示稳定可靠,能够满足人们对时间的基本需求。
2. 时间调整。
通过设置按键,可以对时钟进行时间的调整。
用户可以根据实际需求,随时对时钟的时间进行调整,保证时钟的准确性。
3. 闹铃功能。
本课程设计还实现了闹铃功能,用户可以通过设置闹铃时间,让时钟在设定的时间点发出提示音,提醒用户重要事件的发生。
四、实验结果。
经过实际测试,本课程设计的电子时钟能够稳定可靠地运行,显示精准,功能完善。
时钟的硬件和软件设计均达到了预期的要求,符合设计的初衷和要求。
五、总结与展望。
本课程设计通过对单片机电子时钟的硬件和软件设计,成功实现了一个功能强大、稳定可靠的电子时钟。
但是,仍有一些功能可以进一步完善和优化,比如增加温湿度显示功能、实现无线时间校准等。
未来,我们将继续努力,不断完善电子时钟的功能,为人们的生活带来更多的便利。
六、参考文献。
[1] 《单片机原理与接口技术》,XXX,XXX出版社,2008。
[2] 《C语言程序设计》,XXX,XXX出版社,2010。
七、致谢。
感谢所有为本课程设计提供帮助和支持的老师和同学们,在他们的帮助下,本课程设计得以顺利完成。
目录一.作品简介 (2)二.单片机系统原理图及工作原理描述 (2)三.设计过程中碰到的问题及解决方法 (4)四.测试数据及误差分析 (4)五.总结 (5)六.程序模块框图 (5)七.程序清单 (7)单片机的个性化电子钟设计报告一.作品简介该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控,4位LED数码显示,分别显示“小时:分钟”。
该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能定时闹铃1分钟。
使用方法:开机后显示日期,学号,时钟在00:00:00起开始计时。
(1)长按P3.2进入调分状态:分单元闪烁,按P3.2加1,按P3.3减1.再长按P3.2进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。
(2)按P3.3进入设定闹时状态: 12:00: ,可进行分设定,按P3.4分加1,再按P3.2为时调整,按P3.4时加1,按P3.3调闹钟结束.在闹铃时可按P3.2停闹,不按闹铃1分钟。
(3)按下P3.4进入秒表状态:再按P3.4秒表又启动,按P3.4暂停,再按P3.4秒表清零,按 P3.4退出秒表回到时钟状态。
二.单片机系统原理图及工作原理描述(1)总原理图如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块组成。
(2)各个模块说明 1.单片机最小系统AT89S52是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz 的晶体震荡器,在此系统中使用12MHz 的晶振。
AT89S52具有以下标准功能: 8k 字节Flash ,256字节RAM ,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2、显示模块在实际应用中,用户很少直接设计LCD 显示器驱动接口,一般是直接使用专用的LCD 显示驱动器和LCD 显示模块。
其中,LCD 显示模块LCM (Liquid Crystal Display Module )是把LCD 显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部件使用,具有功能较强、易于控制、接口简单等优点,在单片机系统中应用较多。
其内部结构如图2-8所示。
LCD 显示模块只留一个接口与外部通信。
显示模块通过这个接口接收显示命令和数据,并按指令和数据的要求进行显示。
外部电路通过这个接口读出显示模块的工作状态和显示数据。
LCD 显示模块一般带有内部显示RAM 和字符发生器,只要输入ASCII 码就可以进行显示。
LCD 显示模块按功能显示可分为:LCD 段式显示模块、LCD 字符型显示模块、LCD 图形显示块三类。
本系统利用4位LED 数码管显示时间,共阳极结构。
LED 数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应的引脚送入低电平。
3.按键模式本设计中主要有三个控制按键,按键功能为: P3.2为调时间模式,长按P3.2进入调分状态:分单元闪烁,按P3.2加1,按P3.3减1.再长按P3.2进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。
按P3.3进入设定闹时状态: 12:00: ,可进行分设定,按P3.4分加1,再按P3.2为时调整,按P3.4时加1,按P3.3调闹钟结束.在闹铃时可按P3.2停闹,不按闹铃1分钟。
(3)按下P3.4进入秒表状态:再按P3.4秒表又启动,按P3.4暂停,再按P3.4秒表清零,按P3.4退出秒表回到时钟状态。
图1.AT98S52正面图 图3.按键引脚图4.元件器材元器件型号/大小单片机AT89S52译码器74LS164七段数码显示管一位共阳极LED发光二极管蜂鸣器二极管1N4007、1N4148电阻1K、10K、排阻电容10uF、30pF、100uF、220uF晶振12M开关按键USB口其它芯片底槽、导线三.设计过程中碰到的问题及解决方法硬件方面:(1)焊接三极管时,由于三个引脚间的距离太近,自己过于急躁,弄了很多锡在上面,造成短路;最后用吸锡器弄干净,重新焊接,有些锡粘在板上,必须用小刀把两引脚间的锡削掉。
这里花费了大量时间。
(2)LED显示器有一排显示不出来,查明是接口虚焊问题。
重新补焊接显示器接口。
软件方面:(1)程序编写开始有点混乱,最后重新构思,确定各个按键功能,再根据各个功能编写,这样一步步来,思路比较清晰。
(2)程序编写时感觉最难的是按键切换,开始感觉无法下手。
最后找了一些按键方面的程序,慢慢看,慢慢了解;然后根据自己设计的特点编写程序。
(3)调试时感觉按键声太吵,影响到宿舍其他人,觉得作用不大,就去掉。
四.测试数据及误差分析(1)测试数据如下:实际时间显示时间校准前12:17:00 12:17:00校准后20:52:53 20:52:50测试总时间长度是8:35:53,设计的时钟误差比实际时间慢3秒。
(2)误差分析误差由元件的精确度和焊接导致的连接不稳定,以及软件算法上的缺陷而产生。
要消除这些误差,首先必须提高焊接电工技术,其次可以通过了解各元器件的特点,针对这些特点编写程序,用软件算法来克服这些误差。
本次设计时钟测试时比实际时间慢3秒,可以通过降低T0对机器周期计数时间来提高它的准确率。
五.总结数字电子钟所有功能都以实现,可以通过按键进行模式切换,并对其数值进行调节。
在这基础上还添加了省电模式,开机显示时间和学号,还有秒表,闹铃功能。
存在不足是设计的电子钟存在一定的误差,不能在实际中运用。
通过本次课程设计,对单片机AT89S52有更深入的了解,同时在对单片机进行软件编程的过程中,学会了单片机编程的流程控制,熟悉了单片机显示按键系统的编程实现。
六.程序模块框图硬件框图:时钟调整模式:AT89S52 蜂鸣器LDE 显示器 DOWNLOAD Y NN N Y Y 开始 系统初始化是否按下设置键时间调整模式 是否退出调整模式是否跟闹钟时间一致 启动闹铃显示时间秒表模式:Y Y Y YNNNN开始是否按功能切换键系统初始化是否按秒表暂停键是否按秒表启动键是否按秒表清零键切换秒表秒表计时暂停秒表显示时间整点报时模式:七.程序清单;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AT89S52时钟程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;****************************************************************************** ;定时器T0、T1溢出周期为50MS ,T0为秒计数用, T1为调整时闪烁及秒表定时用,;P3.2、P3.3、P3.4为调整按钮,P0口为字符输出口,P2为扫描口,P1.2为蜂呜器口,采 ;用共阳显示管。
;50H-55H 为闹钟定时单元,60H-65H 为秒表计时单元,72H-75H 为显示时间单元,76H-79H ;为分时计时单元。
;03H 标志=0时钟闪烁,=1秒表, 05H=0,不闹铃,=1要闹铃. 07H 每秒改变一次, ;用作间隔呜叫.;****************************************************************************** DISPFIRST EQU 30H ;显示首址存放单元 BELL EQU P1.2CONBS EQU 2FH ;存放报时次数 CLOCK EQU 2DH ;;**************************************** ;; 中断入口程序 ;;Y YNN开始显示时间分钟是否为00蜂鸣器响一次K=0?退出;****************************************;ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行ORG 0003H ;外中断0中断程序入口RETI ;外中断0中断返回ORG 000BH ;定时器T0中断程序入口 LJMP INTT0 ;跳至INTTO执行ORG 0013H ;外中断1中断程序入口RETI ;外中断1中断返回ORG 001BH ;定时器T1中断程序入口LJMP INTT1 ;跳至INTT1执行ORG 0023H ;串行中断程序入口地址RETI ;串行中断程序返回;;****************************************;; 以下程序开始 ;;;****************************************;整点报时用QQQQ: MOV A,#10HMOV B,79HMUL ABADD A,78HMOV CONBS,ABSLOOP: LCALL DS21MSLCALL DL1SLCALL DL1SLCALL DL1SDJNZ CONBS,BSLOOPCLR 08H ;清整点报时标志AJMP START1;;****************************************;; 主程序开始 ;;;****************************************;START: LCALL ST ;上电显示年月日及班级学号 MOV R0,#00H ;清00H-7FH内存单元MOV R7,#80H ;CLEARDISP: MOV @R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清20H(标志用)MOV 55H,#1MOV 54H,#2MOV 7AH,#0AH ;放入"熄灭符"数据MOV TMOD,#11H ;设T0、T1为16位定时器MOV TL0,#0B0H ;50MS定时初值(T0计时用)MOV TH0,#3CH ;50MS定时初值MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)MOV TH1,#3CH ;50MS定时初值SETB EA ;总中断开放SETB ET0 ;允许T0中断SETB TR0 ;开启T0定时器MOV R4,#14H ;1秒定时用计数值(50MS×20)MOV DISPFIRST,#72H ;显示单元为72-75H;以下主程序循环START1: LCALL DISPLAY ;调用显示子程序JNB P3.2,SETMM1 ;P3.2口为0时转时间调整程序JNB P3.3,TSFUN ;定时闹铃设定JNB P3.4,FUNPT ;秒表功能(STOP,RUN,CLR)JB 08H, QQQQAJMP START1 ;P3.2口为1时跳回START1FUNPT: LJMP FUNPTTSTART12: LJMP START1;以下闹铃时间设定程序,按P3.3进入设定TSFUN: LCALL DS20MSJB P3.3,START1 ;WAIT113: JNB P3.3,WAIT113 ;等待键释放JB 05H,CLOSESP ;闹铃已开的话,关闹铃MOV DISPFIRST,#52H ;进入闹铃设定程序,显示52-55H闹钟定时单元;DSWAIT: SETB EALCALL DISPLAYJNB P3.4,DSFINC ;分加1JNB P3.2,DSDEC ;分减1JNB P3.3,DSSFU ;进入时调整AJMP DSWAIT;CLOSESP: CLR 05H ;关闹铃标志CLR BELLAJMP START1DSSFU: LCALL DS20MS ;消抖JB P3.3, DSWAITLJMP DSSFUNN ;进入时调整;SETMM1: LJMP SETMM ;转到时间调整程序SETMM;DSFINC : LCALL DS20MS ;消抖JB P3.4, DSWAITDSWAIT12: LCALL DISPLAY ;等键释放JNB P3.4, DSWAIT12CLR EAMOV R0,#53H ;LCALL ADD1 ;闹铃设定分加1MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH22 ;ADDHH22: JC DSWAIT ;小于60分时返回ACALL CLR0 ;大于或等于60分时分计时单元清0AJMP DSWAITDSDEC : LCALL DS20MS ;消抖JB P3.2, DSWAITDSWAITEE: LCALL DISPLAY ;等键释放JNB P3.2, DSWAITEECLR EAMOV R0,#53H ;LCALL sub1 ;闹铃设定分减1LJMP DSWAIT;以下秒表暂停\清零功能程序;按下P3.4切换秒表功能,再按开始计时,暂停或清0,最后按P3.4退出秒表回到时钟计时 FUNPTT: LCALL DS20MSJB P3.4,START12WAIT22: JNB P3.4,WAIT21CPL 03HJNB 03H,TIMFUNMOV DISPFIRST,#60H ;显示秒表数据单元MOV 60H,#00HMOV 61H,#00HMOV 62H,#00HMOV 63H,#00HMOV 64H,#00HMOV 65H,#00HMOV TL1,#0F0H ;10MS定时初值MOV TH1,#0D8H ;10MS定时初值WAIT88:LCALL DS20MSJB P3.4,WAIT81WAIT99:JNB P3.4,WAIT99SETB TR1 ;T1运行控制软件SETB ET1 ;T1溢出中断允许WAIT33: LCALL DS20MSJB P3.4,WAIT31WAIT44: JNB P3.4,WAIT41CLR ET1CLR TR1WAIT55: LCALL DS20MSJB P3.4,WAIT51WAIT66: JNB P3.4,WAIT61MOV 60H,#00HMOV 61H,#00HMOV 62H,#00HMOV 63H,#00HMOV 64H,#00HMOV 65H,#00HTIMFUN:MOV DISPFIRST,#72H ;显示时钟数据单元 CLR ET1CLR TR1AJMP FUNSS11FUNSS11: AJMP START1;以下键等待释放时显示不会熄灭用WAIT21: LCALL DISPLAYAJMP WAIT22WAIT31: LCALL DISPLAYAJMP WAIT33WAIT41: LCALL DISPLAYAJMP WAIT44WAIT51: LCALL DISPLAYAJMP WAIT55WAIT61: LCALL DISPLAYAJMP WAIT66WAIT81: LCALL DISPLAYAJMP WAIT88WAIT91: LCALL DISPLAYAJMP WAIT99 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1秒计时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T0中断服务程序INTT0: PUSH ACC ;累加器入栈保护PUSH PSW ;状态字入栈保护CLR ET0 ;关T0中断允许CLR TR0 ;关闭定时器T0MOV A,#0B7H ;中断响应时间同步修正ADD A,TL0 ;低8位初值修正MOV TL0,A ;重装初值(低8位修正值)MOV A,#3CH ;高8位初值修正ADDC A,TH0 ;MOV TH0,A ;重装初值(高8位修正值)SETB TR0 ;开启定时器T0DJNZ R4, OUTT0 ;20次中断未到中断退出ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值CPL 07H ;闹铃时间隔呜叫用MOV R0,#71H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加1程序(加1秒操作)MOV A,R3 ;秒数据放入A(R3为2位十进制数组合) CLR C ;清进位标志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于60秒时中断退出ACALL CLR0 ;大于或等于60秒时对秒计时单元清0MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分时中断退出ACALL CLR0 ;大于或等于60分时分计时单元清0LCALL DS20MS ;正点报时SETB 08HMOV R0,#79H ;指向小时计时单元(78H-79H)ACALL ADD1 ;小时计时单元加1小时MOV A,R3 ;时数据放入ACLR C ;清进位标志CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小时中断退出ACALL CLR0 ;大于或等于24小时小时计时单元清0OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;LCALL BAOJPOP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器SETB ET0 ;开放T0中断RETI ;中断返回;****************************************;; 闪动调时程序\秒表功能程序 ;;;****************************************;T1中断服务程序,用作时间调整时调整单元闪烁指示或秒表计时INTT1: PUSH ACC ;中断现场保护PUSH PSW ;JB 03H, MMFUN ;=1时秒表MOV TL1, #0B0H ;装定时器T1定时初值MOV TH1, #3CH ;DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次) MOV R2,#06H ;重装0.3秒定时用初值CPL 02H ;0.3秒定时到对闪烁标志取反JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"MOV 72H,76H ;02H位为0时正常显示MOV 73H,77H ;MOV 74H,78H ;MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场POP ACC ;RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据MOV 74H,78H ;MOV 75H,79H ;AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示MOV 74H,7AH ;MOV 75H,7AH ;AJMP INTT1OUT ;转中断退出;MMFUN : CLR TR1MOV A,#0F7H ;中断响应时间同步修正,重装初值(10ms) ADD A,TL1 ;低8位初值修正MOV TL1,A ;重装初值(低8位修正值)MOV A,#0D8H ;高8位初值修正ADDC A,TH1 ;MOV TH1,A ;重装初值(高8位修正值)SETB TR1 ;开启定时器T1MOV R0,#61H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加1程序(加1秒操作)CLR C ;MOV A,R3 ;JZ FSS1 ;加1后为00,C=0AJMP OUTT01 ;加1后不为00,C=1FSS1: ACALL CLR0 ;大于或等于60秒时对秒计时单元清0 MOV R0,#63H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH1 ;ADDHH1: JC OUTT01 ;小于60分时中断退出LCALL CLR0 ;大于或等于60分时分计时单元清0 MOV R0,#65H ;指向小时计时单元(78H-79H)ACALL ADD1 ;小时计时单元加1小时OUTT01:POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器RETI ;中断返回 ;;****************************************;; 加1子程序 ;;;****************************************ADD1: MOV A,@R0 ;取当前计时单元数据到ADEC R0 ;指向前一地址SWAP A ;A中数据高四位与低四位交换ORL A,@R0 ;前一地址中数据放入A中低四位ADD A,#01H ;A加1操作DA A ;十进制调整MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位变0MOV @R0,A ;放回前一地址单元MOV A,R3 ;取回R3中暂存数据INC R0 ;指向当前地址单元SWAP A ;A中数据高四位与低四位交换ANL A,#0FH ;高四位变0MOV @R0,A ;数据放入当削地址单元中RET ;子程序返回;****************************************;; 分减1子程序 ;;;****************************************;SUB1: MOV A,@R0 ;取当前计时单元数据到ADEC R0 ;指向前一地址SWAP A ;A中数据高四位与低四位交换ORL A,@R0 ;前一地址中数据放入A中低四位DEC A ;A减1操作SUB111: MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位变0CLR C ;清进位标志SUBB A,#0AHSUB1111: JC SUB1110MOV @R0,#09H ;大于等于0AH,为9SUB110: MOV A,R3 ;取回R3中暂存数据INC R0 ;指向当前地址单元SWAP A ;A中数据高四位与低四位交换ANL A,#0FH ;高四位变0MOV @R0,A ;数据放入当削地址单元中RET ;子程序返回;SUB11: MOV A,#59HAJMP SUB111SUB1110:MOV A,R3 ;移入R3寄存器ANL A,#0FH ;高四位变0MOV @R0,AAJMP SUB110;****************************************;; 时减1子程序 ;;;****************************************SUBB1:MOV A,@R0 ;取当前计时单元数据到ADEC R0 ;指向前一地址SWAP A ;A中数据高四位与低四位交换ORL A,@R0 ;前一地址中数据放入A中低四位 JZ SUBB11 ;00减1为23(小时)DEC A ;A减1操作SUBB111:MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位变0CLR C ;清进位标志SUBB A,#0AH ;时个位大于9为9SUBB1111: JC SUBB1110 ;MOV @R0,#09H ;大于等于0AH,为9SUBB110: MOV A,R3 ;取回R3中暂存数据INC R0 ;指向当前地址单元SWAP A ;A中数据高四位与低四位交换ANL A,#0FH ;高四位变0MOV @R0,A ;时十位数数据放入RET ;子程序返回;SUBB11: MOV A,#23HSUBB1110:MOV A,R3 ;时个位小于0A不处理ANL A,#0FH ;高四位变0MOV @R0,A ;个位移入AJMP SUBB110;****************************************;; 清零程序 ;;;****************************************;对计时单元复零用CLR0: CLR A ;清累加器MOV @R0,A ;清当前地址单元DEC R0 ;指向前一地址MOV @R0,A ;前一地址单元清0RET ;子程序返回;;****************************************;; 时钟时间调整程序 ;;;****************************************;当调时按键按下时进入此程序SETMM: cLR ET0 ;关定时器T0中断CLR TR0 ;关闭定时器T0LCALL DL1S ;调用1秒延时程序LCALL DS20MS ;消抖JB P3.2,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电) MOV R2,#06H ;进入调时状态,赋闪烁定时初值MOV 70H,#00H ;调时时秒单元为00 秒MOV 71H,#00HSETB ET1 ;允许T1中断SETB TR1 ;开启定时器T1SET2: JNB P3.2,SET1 ;P3.2口为0(键未释放),等待SETB 00H ;键释放,分调整闪烁标志置1SET4: JB P3.2,SET3 ;等待键按下LCALL DL05S ;有键按下,延时0.5秒LCALL DS20MS ;消抖JNB P3.2,SETHH ;按下时间大于0.5秒转调小时状态MOV R0,#77H ;按下时间小于0.5秒加1分钟操作LCALL ADD1 ;调用加1子程序MOV A,R3 ;取调整单元数据CLR C ;清进位标志CJNE A,#60H,HHH ;调整单元数据与60比较HHH: JC SET4 ;调整单元数据小于60转SET4循环LCALL CLR0 ;调整单元数据大于或等于60时清0CLR C ;清进位标志AJMP SET4 ;跳转到SET4循环CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。