本科毕业设计-单片机课程设计简易电子时钟
单片机课程设--电子钟设计

单片机MCS-51数钟课程设计系别:专业:班级:姓名及学号:日期:目录单片机MCS-51数钟 (1)课程设计 (1)一、课程设计的目的 (3)二、课程设计任务 (3)三、硬件结构概述 (4)(一)复位电路 (4)(二)晶振电路 (4)(三)按键电路 (4)(四)显示部分 (5)四、软件结构概述 (5)(一)代码说明 (5)(二)按键处理思路 (10)(三)秒表设计思路 (11)五、调试过程 (12)(一)系统仿真 (12)(二)仿真过程中出现的问题及解决方案 (12)六、心得体会 (13)七、参考文献 (14)一、课程设计的目的(1)巩固、加深和扩大单片机应用的知识面, 提高综合及灵活运用所学知识解决工业控制的能力;二、(2)培养针对课题需要, 选择和查阅有关手册、图表及文献资料的自学能力, 提高组成系统、编程、调试的动手能力;三、(3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程, 软硬件设计的方法、内容及步骤。
四、课程设计任务(1)在ZY15MCU12BD型综合单片机实验箱的硬件结构上编写软件完成设计。
也可以在其它MCS—51单片机硬件板上完成, 或自行设计硬件并制做完成。
(2)程序的首地址应使目标机可以直接运行, 即从0000H开始。
在主程序的开始部分必须设置一个合适的栈底。
程序放置的地址须连续且靠前, 不要在中间留下大量的空闲地址, 以使目标机可以使用较少的硬件资源。
(3)6位LED数码管从左到右分别显示时、分、秒(各占用2位), 采用24小时标准计时制。
开始计时时为000000, 到235959后又变成000000。
(4)在键盘上选定3个键分别作为小时、分、秒的调校键。
每按一次键, 对应的显示值便加1。
分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。
在调校时均不向上一单位进位 (例如分加到59后变为00, 但小时不发生改变)。
(5) 软件设计必须使用MCS-51片内定时器, 采用定时中断结构, 不得使用软件延时法。
毕业设计论文_单片机电子时钟的设计

毕业设计论文_单片机电子时钟的设计摘要:电子时钟作为一种常见的时间显示装置,在现代社会中应用广泛。
本文设计了一款基于单片机的电子时钟,使用DS1307实时时钟芯片来获取系统时间,并通过数码管进行显示。
设计过程中,通过对单片机的编程和电路的连接,实现了时间的显示与调节功能,具有较高的准确性和稳定性。
该设计方案简单、实用,可用于各种场合。
关键词:单片机;电子时钟;DS1307;数码管1.引言电子时钟是一种利用电子技术构造的显示时间的装置,具有时间准确、使用简单、显示清晰等特点,广泛应用于生活和工作中。
本文以单片机为核心,设计了一款实时准确的电子时钟,提高了时间的准确度和稳定性。
2.设计原理该设计的核心是通过单片机与DS1307实时时钟芯片的连接,使得单片机可以获取到准确的系统时间,并通过数码管进行显示。
DS1307芯片通过I2C总线与单片机连接,通过读取芯片中的时间寄存器,单片机可以获得当前的时间信息。
3.硬件设计本设计中使用了AT89S52单片机作为主控芯片,通过引脚与DS1307芯片相连。
单片机的P0口接到数码管的段选信号,P1口接到数码管的位选信号,通过控制这两个口的输出状态,可实现对数码管上显示的数字进行控制。
同时,为了使时钟可以正常运行,需外接一个晶振电路为单片机提供时钟信号。
4.软件设计通过对单片机的编程,实现了以下功能:(1)初始化DS1307芯片,设置初始时间;(2)每隔一秒读取一次DS1307芯片的时间寄存器,将时间信息保存到单片机的RAM中;(3)根据当前时间信息,在数码管上显示对应的小时和分钟。
5.调试与测试经过硬件的连接以及软件的编写,进行了调试与测试。
将初始时间设置为08:30,观察数码管上的显示是否正确,以及时间是否准确。
同时,通过手动调节DS1307芯片中的时间,检查单片机是否能正确获取时间,并进行显示。
6.总结与展望本文设计了一款基于单片机的电子时钟,通过单片机与DS1307芯片的连接和编程,实现了准确的时间显示功能。
单片机课程设计电子时钟

单片机课程设计电子时钟一、课程目标知识目标:1. 让学生理解单片机的基本原理和编程方法,掌握单片机在电子时钟设计中的应用。
2. 使学生掌握电子时钟的组成和工作原理,包括时、分、秒的显示与计时功能。
3. 帮助学生了解电子时钟设计中涉及的硬件知识,如晶振、计数器、显示器件等。
技能目标:1. 培养学生运用单片机编程实现电子时钟功能的能力,提高学生的动手实践能力。
2. 培养学生分析问题、解决问题的能力,能够针对电子时钟设计过程中遇到的问题进行调试和优化。
3. 培养学生团队协作能力,通过分组合作完成课程设计任务。
情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,培养学生主动学习的积极性。
2. 培养学生严谨的科学态度,注重实验数据的真实性,养成良好的实验习惯。
3. 增强学生的创新意识,鼓励学生在课程设计中发挥想象力和创造力,提高学生的创新能力。
课程性质:本课程为实践性课程,注重培养学生的动手能力和实际应用能力。
学生特点:学生已具备一定的单片机基础知识和编程技能,对电子制作有较高的兴趣。
教学要求:结合课本内容,注重理论与实践相结合,通过课程设计提高学生的综合应用能力。
将课程目标分解为具体的学习成果,以便在教学设计和评估过程中有针对性地指导学生。
二、教学内容1. 理论知识:- 单片机原理与编程:复习课本第三章内容,重点掌握单片机的内部结构、工作原理、指令系统及编程方法。
- 电子时钟原理:学习课本第四章关于时钟电路的设计,了解时、分、秒的计数原理及显示技术。
2. 实践操作:- 硬件设计:根据课本第五章内容,选用51单片机及相关元器件,设计电子时钟的硬件电路,包括晶振、计数器、显示器件等。
- 软件编程:运用C语言或汇编语言,编写电子时钟的程序代码,实现时、分、秒的显示与计时功能。
3. 教学大纲:- 第一周:复习单片机基础知识,讲解电子时钟原理,分配课程设计任务。
- 第二周:进行硬件电路设计,学习并选用合适的元器件,绘制原理图。
单片机课程设计报告--电子时钟(2021整理)

一、设计内容该课程设计是利用MCS-51单片机内部的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。
设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。
二、电子时钟设计思想:用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为XXYY〔自己计算〕。
形成定时时间为50ms。
用片内RAM的7BH单元对50ms 计数,计20次产生秒计数器78H单元加1,秒计数器加到60那么分计数器79H单元加1,分计数器加到60那么时计数器7AH单元加1,时计数器加到24那么时计数器清0。
然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。
显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。
在处理过程中加上了按键判断程序,能对按键处理。
三、MCS-51单片机系统简介单片机应用系统由硬件系统和软件系统两局部组成。
硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。
软件系统包括监控程序和各种应用程序。
在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。
与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。
在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。
在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。
配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED 指示灯就可以进行处理了。
在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。
显示器可以是LED指示灯,也可以是LED数码管,也可以是LCD显示器,还可以使用CRT显示器。
论文_单片机电子时钟 毕业设计论文

单片机电子时钟的设计摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。
由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。
这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。
关键词:单片机 AT89S51 电子时钟数码管Design of the singlechip electronics clockAbstractSingle slice machine from published in 70's for 20 centuries, is compare with its very high function price, is value by people and pay attention to, apply very widely, develop very quickly. Single slice the machine physical volume is small,the weight is light,the anti- interference ability is strong,the environment haven't high request,the price is cheap,the credibility is high,vivid good,develop more easy. In order to having an above-mentioned advantage, at the our country, single slice the machine is broadly applied already to turn an equipment at industrial automation control,automatic examination,intelligence instrument appearance,home appliances,electric power electronics,the machine electricity integral whole etc. each aspect, but 51 machines is is a typical model most and have a representative most in each machine of a kind. This graduation design passes to its study and application, Take the AT89S51 chips as core, assist with the electric circuit of the necessity, design a simple electronics clock, it from the 4.5 V direct current power supply power supply, pass the figures tube can accurate manifestation time, adjust time。
基于51单片机的简易电子钟设计

基于51单片机的简易电子钟设计一、设计目的现代社会对于时间的要求越来越精确,电子钟成为家庭和办公场所不可缺少的设备之一、本设计基于51单片机,旨在实现一个简易的电子钟,可以显示当前的时间,并且能够通过按键进行时间的调整和设置闹钟。
二、设计原理本设计主要涉及到51单片机的IO口、定时器、中断、LCD显示技术等方面知识。
1.时钟模块时钟模块采用定时器0的中断进行时间的累加和更新。
以1秒为一个时间单位,每当定时器0中断发生,就将时间加1,并判断是否需要更新小时、分钟和秒的显示。
同时,根据用户按键的操作,可以调整时间的设定。
2.显示模块显示模块采用16x2字符LCD显示屏,通过51单片机的IO口与LCD连接。
可以显示当前时间和设置的闹钟时间。
初次上电或者重置后,LCD显示时间为00:00:00,通过定时器中断和键盘操作,实现时间的更新和设定闹钟功能。
3.键盘模块键盘模块采用矩阵键盘连接到51单片机的IO口上,用于用户进行时间的调整和设置闹钟。
通过查询键盘的按键状态,根据按键的不同操作,实现时间的调整和闹钟设定功能。
4.中断模块中断模块采用定时器0的中断,用于1秒的定时更新时间。
同时可以添加外部中断用于响应用户按键操作。
三、主要功能和实现步骤1.系统初始化。
2.设置定时器,每1秒产生一次中断。
3.初始化LCD显示屏,显示初始时间00:00:00。
4.查询键盘状态,判断是否有按键按下。
5.如果按键被按下,根据不同按键的功能进行相应的操作:-功能键:设置、调整、确认。
-数字键:根据键入的数字进行时间的调整和闹钟设定。
6.根据定时器的中断,更新时间的显示。
7.判断当前时间是否与闹钟设定时间相同,如果相同,则触发闹钟,进行提示。
8.循环执行步骤4-7,实现连续的时间显示和按键操作。
四、系统总结和改进使用51单片机设计的简易电子钟可以显示当前时间,并且实现时间的调整和闹钟设定功能。
但是由于硬件资源有限,只能实现基本的功能,不能进行其他高级功能的扩展,例如闹铃的音乐播放、温度、湿度的显示等。
单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(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. 软件实现。
编写了单片机的程序,实现了时钟的计时、显示和控制功能,保证了电子时钟的正常运行。
五、实验结果。
经过调试,电子时钟能够准确显示当前的时间,并能够通过按键调整时间和设置闹钟功能,报时功能也能够正常工作。
六、总结与展望。
通过本课程设计,学生掌握了单片机的基本原理和应用,培养了动手能力和创新意识。
在今后的学习和工作中,学生将能够更好地应用单片机技术,设计和制作更加复杂的电子产品。
同时,也为学生今后的科研和创新工作奠定了良好的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计报告题目:简易电子时钟专业:自动化班级:12 级自动化1班日期:2014年3月、设计目的随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。
它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。
对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。
该电路采用STC89C51单片机作为核心,功耗小,能在5V的低压工作,电压可选用3~5V电压供电。
综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
本电路为实现电子万年历的功能,采用单片机STC89C51,辅助以必要的外围电路,用C语言编写程序,并进行模块化设计而成的电子万年历系统•它通过LCD能正确显示阳历星期和时分秒,温度等,可以进行整点提醒,具有功能稳定,精确度高和可调的特点。
1、通过《单片机原理及应用》教程了解单片微型计算机的发展;2、根据课程设计的要求,学会设计程序的过程,学会应用程序设计调试软件、学会根据要求运用PCB设计电路板硬件部分;3、通过调试程序设计模块,掌握单片微型计算机的结构原理,了解程序设计的编程思想;4、通过软件调试熟悉使用单片机指令系统,掌握C语言程序设计方法及编程技巧,掌握子程序的设计与使用,熟悉定时器中断服务程序的设计及调用过程。
5、综合课程设计更全方面了解单片机的硬件和软件知识。
、设计要求和方案选择设计要求:1、显示出基本时间:时、分、秒;(基础部分)2、显示年、月、日、周具体时间(拓展部分)3、断电保护时间功能(拓展部分)4、环境温度感应功能显示(拓展部分)5、整点报时功能(拓展部分)方案选择:根据题目基本要求以及外拓展功能,本次单片机课程设计打算以AT89S52单片机系统为基础实现以上的设计要求,并在此分为软硬件模块结合实现所要求的功能,各重要模块如下:1、AT89S52单片机最小系统最小系统包括晶体振荡电路、复位开关和电源部分。
图2为STC89C52RC 单片机的最小系统。
ATX9C51LED22 LED3 345678 RJSSliT 9 RXI) 10 TXD 1】1213 P34 14 P疔15 P3616 P37 17 XTAL2 18 XTALl 19o 1 _2 3 4 5 6 7 T_!■'*L- L _! -L-MH1* 11 11 11 11 11 11 11 £ i. PPPPPPPPR Vec PO.O POJ PO.2 PO3 PO4 PO.5 P0.6PO740P3.0(RXD) EA/VppP3.1(TXBJ.E/PROGP3.2(JNTO) PSENP3.3(INT1) P2.7P3.4(T0) P2+6P3.5(T1) P2.5P3,6(WR) P2.4P3.7(RD) P23XTAL2 P2.2XTALl P2JGND P2,039 FOO)8 POT~37 PO厂36 Pk35 F04 「34 PQj 「33 M632 P073130 _____________第I.丽27 Ki厂曲孰h2524 A5JJ1AN423 ANjfXKl?22 __ _A\J1AN221 1tvccA FX9C5 ]RESETvcc|——复位模块RESETC610UF轻触按键10KGND晶振模块C4 7HI 二30PFXTAL2 JZ2I2MXTALl2、DS1302时钟芯片模块30PFLIQ1 120时钟模块采用DS1302芯片,DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线:RST复位、I/O数据线、SCLK串行时钟。
时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。
DS1302时钟模块VCCGNDGND3、18B20温度感应芯片模块温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器, 测温范围为-55C ~125C,可编程为9位~12位A/D转换精度,测温分辨率达到0.0625C,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信, 占用CPU 口线少,可节省大量引线和逻辑电路。
1 温模块-DS18B20o oJ o N A 二 Ddvcc|~ —也GZD |32.768DSI302VCC2VCC1XI SCLKX2I/OGND CEBATTERY234g7 P366 P345 P351044、LCD1602液晶显示器模块LCD液晶显示模块采用LCD1602型号,具有很低的功耗,正常工作时电流仅2.0mA/5.0V。
通过编程实现自动关闭屏幕能够更有效的降低功耗。
LCD1602分两行显示,每行可显示多达16个字符。
LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制,并且还能利用空余的空间自定义字符。
1602BGGND BGVCCDB7DB6DB5DB4DB3DB2DB1DBOENRWRSVOVCCGND 161514 P0713 P0612 P0511 P0410 P039 P028 P017 POO6 LCDE5 WR4 RDd2V((1602i C2 o-~It_-104(iNDKTDIANZU32104对调电阻5、蜂鸣器模块GND-||BEEP vccGNDBEEP1 雷2 I b®100 -----------------器QIR4 勺CZI_-100蜂鸣器模块__ B8550 \cc三、软件设计当硬件做出来的时候下一步就是在软件上实现所要求的功能,各个芯片最好都应该有各自的基本C文件程序,然后再在主函数上用函数的调用的方法最后实现功能。
以下是本次课程设计的全部代码:#in clude<reg51.h>#i nclude"DS18B20_3.H"#defi ne uint un sig ned int#defi ne uchar un sig ned charuchar a,miao,shi,fe n,ri,yue ,nian, week,flag,key1 n,temp;//flag用于读取头文件中的温度值,和显示温度值#define yh 0x80 //LCD 第一行的初始位置,因为LCD1602 字符地址首位D7恒定为1 (100000000=80)#define er 0x80+0x40 //LCD 第二行初始位置(因为第二行第一个字符位置地址是0x40)II液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0 口)sbit rs=P2A0;sbit en=卩2人2;sbit rw=P2A1; //如果硬件上rw接地,就不用写这句和后面的rw=0 了sbit led=P2A6; //LCD 背光开关//DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P1A1;sbit SCLK=P"0;sbit RST=P1A2;sbit ACC0=ACCA0;sbit ACC7=ACCA7;/************************************************************ACC累加器=AACC.0=E0HACC.0就是ACC的第0位。
Acc可以位寻址。
累加器ACC是一个8位的存储单元,是用来放数据的。
但是,这个存储单元有其特殊的地位,是单片机中一个非常关键的单元,很多运算都要通过ACC来进行。
以后在学习指令时,常用A来表示累加器。
但有一些地方例外,比如在PUSH指令中,就必须用ACC这样的名字。
一般的说法,A代表了累加器中的内容、而ACC代表的是累加器的地址。
***************************************************************///校时按键与C51的引脚连接定义sbit key1=P1A5; //设置键sbit key2=P"6; // 加键sbit key3=P"7; // 减键sbit buzzer=P1A3;〃蜂鸣器,通过三极管9012驱动,端口低电平响**********************************************************uchar code tab1[]={"20 - - "}; // 年显示的固定字符uchar code tab2[]={" : : "};//时间显示的固定字符//延时函数,后面经常调用void delay(uint xms)〃延时函数,有参函数{ui nt x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}/******** 液晶写入指令函数与写入数据函数,以后可调用**************//*在这个程序中,液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面*/ write_1602com(uchar com)//**** 液晶写入指令函数**** {rs=0;//数据/指令选择置为指令rw=0; //读写选择置为写P0=com;〃送入数据delay(1);en=1;//拉高使能端,为制造有效的下降沿做准备delay(1);en=0;//en由高变低,产生下降沿,液晶执行命令} write_1602dat(uchar dat)//*** 液晶写入数据函数**** {rs=1;//数据/指令选择置为数据rw=0; //读写选择置为写PO=dat;〃送入数据delay(1);en=1; 〃en置高电平,为制造下降沿做准备delay(1);en=0; 〃en由高变低,产生下降沿,液晶执行命令} lcd」nit()//***液晶初始化函数****{write_1602com(0x38);〃设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);〃开显示不显示光标write_1602com(0x06);〃整屏不移动,光标自动右移write_1602com(0x01);〃清显示write_1602com(yh+1);〃日历显示固定符号从第一行第1个位置之后开始显示for(a=0;a<14;a++){write_1602dat(tab1[a]);〃向液晶屏写日历显示的固定符号部分//delay(3);}write_1602com(er+2);//时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<8;a++){write_1602dat(tab2[a]);〃写显示时间固定符号,两个冒号//delay(3);}}/***************DS1302 -有^子函^数********************void write_byte(uchar dat)// 写一个字节{ACC=dat;RST=1;for(a=8;a>0;a__){IO=ACCO;SCLK=0;SCLK=1;ACC=ACC>>1;}uchar read_byte()〃读一个字节{RST=1;for(a=8;a>0;a__){ACC7=IO;SCLK=1;SCLK=O;ACC=ACC>>1;}return (ACC);}// -------------------------------------void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据{RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;}uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址{uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);}uchar BCD_Decimal(uchar bcd)//BCD 码转十进制函数,输入BCD,返回十进制{uchar Decimal;Decimal=bcd>>4;return(Decimal=Decimal*10+(bcd&=0x0F));}// -------------------------------------void ds1302_init() 〃1302 芯片初始化子函数 (2010-01-07,12:00:00,week4) { RST=0; SCLK=0;write_1302(0x8e,0x80); // 打开写保护// ---------------------------------- //温度显示子函数void write_temp(uchar add,uchar dat)//向LCD 写温度数据,并指定显示位置 {uchar gw,sw;gw=dat%10;〃取得个位数字 sw=dat/10;//取得十位数字write_1602com(er+add);//er 是头文件规定的值 0x80+0x40 write_1602dat(0x30+sw);〃 数字 +30 得到该数字的 LCD1602 显示码 write_1602dat(0x30+gw);〃 数字 +30 得到该数字的 LCD1602 显示码write_1602dat(0xdf);//显示温度的小圆圈符号, 0xdf 是液晶屏字符库的该符号地址码write_1602dat(0x43);〃显示"C"符号,0x43是液晶屏字符库里大写C 的地址码}// ---------------------------------- //时分秒显示子函数void write_sfm(uchar add,uchar dat)//向LCD 写时分秒,有显示位置加、现示数据,两个参数 {uchar gw,sw;gw=dat%10;//取得个位数字 sw=dat/10;//取得十位数字write_1602com(er+add);//er 是头文件规定的值 0x80+0x40 write_1602dat(0x30+sw);〃 数字 +30 得到该数字的 LCD1602 显示码 write_1602dat(0x30+gw);〃 数字 +30 得到该数字的 LCD1602 显示码write_1302(0x8e,0x00); // 允许写,禁止写保护 〃write_1302(0x80,0x00); // 〃write_1302(0x82,0x00);〃 〃write_1302(0x84,0x12);〃 〃write_1302(0x8a,0x04);〃 〃write_1302(0x86,0x07);〃 〃write_1302(0x88,0x01);〃 〃write_1302(0x8c,0x10);〃向DS1302内写秒寄存器80H 写入初始秒数据00 向DS1302内写分寄存器82H 写入初始分数据 00 向DS1302内写小时寄存器84H 写入初始小时数据 向DS1302内写周寄存器8aH 写入初始周数据4 向DS1302内写日期寄存器 向DS1302内写月份寄存器 向DS1302内写年份寄存器 86H 写入初始日期数据88H 写入初始月份数据 8cH 写入初始年份数据1207 01 10// -----------------------------------〃年月日显示子函数void write_nyr(uchar add,uchar dat)〃向LCD写年月日,有显示位置加数、显示数据,两个参数{uchar gw,sw;gw=dat%10;〃取得个位数字sw=dat/10;〃取得十位数字write_1602com(yh+add);〃设定显示位置为第一个位置+addwrite_1602dat(0x30+sw);〃数字+30 得到该数字的LCD1602 显示码write_1602dat(0x30+gw);〃数字+30 得到该数字的LCD1602 显示码}// -----------------------------------------void write_week(uchar week)// 写星期函数{write_1602com(yh+0x0c);〃星期字符的显示位置switch(week){case 1:write_1602dat('M');〃星期数为1 时,显示write_1602dat('O');write_1602dat('N');break;case 2:write_1602dat(T);〃星期数据为2 时显示write_1602dat('U');write_1602dat('E');break;case 3:write_1602dat('W);〃星期数据为3 时显示write_1602dat('E');write_1602dat('D');break;case 4:write_1602dat(T);〃星期数据为4 是显示write_1602dat('H');write_1602dat('U');break;case 5:write_1602dat('F');〃星期数据为5 时显示write_1602dat('R');write_1602dat(T);break;case 6:write_1602dat('S');〃星期数据为6 时显示write_1602dat(T);write_1602dat('A');break;case 7:write_1602dat('S');〃星期数据为7 时显示write_1602dat('U');write_1602dat('N');break;}//******************* ^主函^数〃***************************************************void mai n(){lcd」n it();ds1302_i nit(); ini t();led=0; 〃调用液晶屏初始化子函数〃调用DS1302时钟的初始化子函数//调用定时计数器的设置子函数//打开LCD的背光电源buzzer=0;〃蜂鸣器长响一次delay(80);buzzer=1;while(1) //无限循环下面的语句:{keysca n(); 〃调用键盘扫描子函数void timer0() in terrupt 1 //取得并显示日历和时间{//Init_DS18B20();〃温度传感器DS18b2初始化子函数,在头文件中flag=ReadTemperature();〃将18b2头文件运行返回的函数结果送到变量FLAG中,用于显II 读取秒时分周日月年七个数据( DS1302的读寄存器与写寄存器不一样)miao = BCD_Decimal(read_1302(0x81)); fen = BCD_Decimal(read_1302(0x83)); shi = BCD_Decimal(read_1302(0x85)); ri = BCD_Decimal(read_1302(0x87)); yue = BCD_Decimal(read_1302(0x89));n ia n=BCD_Decimal(read_1302(0x8d)); week=BCD_Decimal(read_1302(0x8b)); 〃显示温度、秒、时、分数据:write_temp(12,flag);〃显示温度,从第二行第12个字符后开始显示write_sfm(8,miao);〃秒,从第二行第 8个字后开始显示(调用时分秒显示子函数)write_sfm(5,fen);〃分,从第二行第 5个字符后开始显示 write_sfm(2,shi);〃小时,从第二行第 2个字符后开始显示 〃显示日、月、年数据:write_nyr(9,ri);〃 日期,从第二行第 write_nyr(6,yue);〃 月份,从第二行第write_nyr(3,nian);// 年,从第二行第 write_week(week);四、硬件部分要做出来一个实物出来必须事先构造好各个模块,设计所需要的芯片以及了 解各个芯片的工作原理和实现功能的构造部分、芯片之间该如何连接起来、准备 好各元器件以便焊接等,首先在Altium Designer 软件的原理图中画出各个模块, 本次课程设计的原理图和 PCB 图如下:9个字符后开始显示 6个字符后开始显示 3个字符后开始显示14T1'P r.讣ru*W LJPI h:PIJ.PIS Hl*Fl*PI t pi烬皈材r AV-TM-TKM F HhJl.WT・MTtF.“DTM FITNxwn PH N“ni隊i ?CtM2PIS XtJU-:K]仙31 K*L»ihi K hATTfrV Bo&yfl.T|rLED惶坨•EDI roz ILn五、调试及运行结果r仙i根据书本的内容和上课时老师所讲授的知识,同时翻阅相关的芯片资料等,然后一步一步的写程序,写出了程序之后发现不能按要求实现功能,其中有1602 显示出乱码决,完成一个功现所需要的效果,以下是本次课程设、时炎件调试,一个问题一个问题地去解最后简易时钟能够实六、总结(感想和心得等)经过大家多天的努力,终于完成了第一次任务,设计出了汇集外观精美、方便实用、功能强大于一体的数字电子钟。