单片机时钟显示 温度显示

合集下载

基于单片机的多功能数字时钟设计

基于单片机的多功能数字时钟设计

技术平台采用碱性电解液电沉积活性锌粉,选取电解液浓度1.25g/cm3,电流密度150mA/cm2,电解槽温度只需控制在室温,锌粉洗涤后真空干燥,所制得的锌粉比表面积大于0.8m2/g,具有较高的电化学活性,能满足锌银电池生产需要,生产效率也达到批量生产要求。

参考文献:[1]侯新刚,王胜,王玉棉.超细活性锌粉的制备与表征[J].粉末冶金工业,2004,14(1):10-13.[2]李永祥,黄孟阳,任锐.电解法制备树枝状锌粉工艺研究[J].四川有色金属,2011,(3):45-50.[3]胡会利,李宁,程瑾宁,等.电解法制备超细锌粉的工艺研究[J].粉末冶金工业,2007,17(1):24-29.基于单片机的多功能数字时钟设计刘晓萌(安徽职业技术学院铁道学院/合肥铁路工程学校,安徽 合肥 230011)摘 要:常见的数字钟有时间、闹钟等功能。

本文基于单片机、温度传感器、液晶显示屏、时钟芯片等硬件设计了多功能数字时钟,软件部分采用C语言编程实现。

该多功能数字时钟包含万年历、节日、节气、温度信息显示等功能,并且在断电的情况下也能正常工作。

关键词:单片机;多功能数字时钟;C语言编程0 引言人类对于时间的需求从古到今始终存在。

古代有浑天仪、日晷,近代出现了机械时钟。

如今,传统的计时工具,甚至是电子钟都已经满足不了人们多元化的时间需求。

数字时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的应用空间[1]。

使用数字时钟,用户可以获取精确到秒的时间信息,或是对时钟进行自定义的操作,为现代社会提供了极大的方便[2]。

然而,传统的数字时钟只包含时间显示、闹钟等功能,存在一定的局限性。

本文基于单片机、温度传感器、液晶显示屏、时钟芯片、键盘模块、闹铃模块和电力支持模块等硬件,设计了一款多功能的数字时钟。

1 系统硬件组成数字时钟的硬件由七个模块组成,包括:STC89C52单片机主控芯片、DS1302时钟芯片、DS18B20温度芯片、LCD1602液晶显示模块、闹铃模块、键盘模块和电源。

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。

本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。

51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。

本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。

本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。

接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。

将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。

软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。

本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。

通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。

2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。

它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。

51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。

51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。

其存储器分为程序存储器(ROM)和数据存储器(RAM)。

程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。

51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。

51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。

基于单片机的带温度显示的数字钟设计(c51语言编程)【开题报告】

基于单片机的带温度显示的数字钟设计(c51语言编程)【开题报告】

开题报告电气工程及其自动化基于单片机的带温度显示的数字钟设计(c51语言编程)一、课题研究意义及现状1980年因特尔公司推出了MCS-51单片机,近30年来,其衍生系列不断出现,从Atmel加入FLASH ROM,到philips加入各种外设,再到后来的Cygnal推出C8051F,使得以8051为核心的单片机在各个发展阶段的低端产品应用中始终扮演着一个重要的角色,其地位不断升高,资源越来越丰富,历经30年仍在生机勃勃地发展,甚至在SoC时代仍占有重要的一席之地。

单片机具有体积小、功能强、低功耗、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域智能仪表、机电一体化、实时控制、国防工业普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。

C语言已经成为当前举世公认的高效简洁而又贴近硬件的编程语言之一。

将C语言向单片机8051上移植十余20世纪80年代的中后期,经过几十年的努力,C语言已成为专业化单片机上的实用高级语言。

C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。

此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。

与汇编语言相比,C51在功能、结构、可读性、可维护性上有明显的优势,因而易学易用。

另外C51可以缩短开发周期,降低成本,可靠性,可移植性好。

因此,使用C语言进行程序设计已成为软件开发的一个主流,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。

随着人们生活水平的提高,对物质需求也越来越高,人们已不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如环境温度显示、日历的显示、重要日期倒计时、显示跑表功能等,用以带来更大的方便。

而所有这些,又都是以数字化的电子时钟为基础的,不仅应用了数字电路技术,而且还加入了需要模拟电路技术和单片机技术。

多功能电子钟毕业设计

多功能电子钟毕业设计

多功能电子钟毕业设计本文主要介绍了一款多功能电子钟的设计方案,其中包括时钟、定时器、闹钟、日历、温度显示等多种功能。

通过硬件和软件的相结合,实现了这种多功能的电子钟,具有易操作、准确显示、功能多样等特点。

本设计可用于家庭、实验室、工作室等多种场合。

一、设计目标随着现代科技的发展,电子钟成为人们生活中不可缺少的一部分。

因此,本文设计了一款多功能电子钟,集时钟、定时器、闹钟、日历、温度显示等多种功能于一身,方便人们的日常生活。

二、设计原理该电子钟的各项功能均用单片机控制实现。

电子钟的控制部分是基于51单片机进行设计。

时钟的原理是通过一个晶振来控制芯片的工作频率,从而达到时钟的准确显示。

使用DS1302进行存储和控制时间。

定时器的原理是通过定时器中断进行实现,通过设定定时器的计数值即可实现定时器的功能。

闹钟的原理是通过设定一个“警报时间”来实现,当时间到达“警报时间”时,闹钟就会开始响铃。

日历的原理是通过读取DS1302中存储的日期信息进行实现。

温度显示的原理是通过使用DS18B20传感器实现对温度的检测。

三、硬件设计本设计的硬件主要由以下部分组成:显示部分、按键部分、计时器部分、DS1302时钟芯片、DS18B20温度传感器、单片机及其外设(如LCD12864液晶屏等)。

1.显示部分本设计采用LCD12864液晶屏进行显示。

2.按键部分本设计采用4个按键T1~T4,T1键用于切换时间制式;T2键用于设定时间和日期等;T3键用于设定闹钟;T4键用于定时器的设定。

3.计时器部分本设计采用计时器555进行固定时间的计时。

4. DS1302时钟芯片DS1302时钟芯片是一种用于实现实时时钟的芯片,本设计将其用于控制电子钟的时间。

5. DS18B20温度传感器DS18B20温度传感器是一种用于测量温度的芯片,本设计将其用于温度显示功能。

6. 单片机及其外设本设计采用AT89C52单片机进行控制,其外设包括LCD12864液晶屏、DS1302时钟芯片、DS18B20温度传感器等。

单片机和数码管设计的电子时钟

单片机和数码管设计的电子时钟

单片机和数码管设计的电子时钟电子时钟是一种用电子技术实现时间显示的设备,它能够精确地显示时间,并通过单片机控制数码管进行数字显示。

在本文中,将介绍单片机和数码管设计的电子时钟的原理、设计过程和实现方法。

一、电子时钟原理电子时钟的原理主要包括时钟信号源、计数器、数码管显示和时钟控制等部分。

时钟信号源提供一个恒定的频率信号,一般使用晶振产生。

计数器用于计数时钟信号的脉冲数,通过累加到一定的脉冲数后,完成对秒、分、时等单位的计数。

数码管显示用于将计数器的计数值转化为数字进行显示。

时钟控制部分通过单片机对时钟模块进行控制,完成时钟的设置、调整和显示等功能。

二、电子时钟设计过程1.确定需求:首先确定电子时钟的功能和要求,包括时间显示、闹钟功能、调节功能等。

根据需求确定显示部分所需的数码管数量和接口方式。

2.选择单片机:根据需求选择一款适合的单片机,考虑其处理能力、接口数量和扩展性等因素。

3.设计时钟源:选择合适的晶振作为时钟源,并将时钟信号输入到单片机的计时部分,生成一个恒定频率的脉冲信号。

4.编程设计:根据单片机类型选择相应的开发工具,编写程序实现时钟的计数、显示和控制功能。

其中,需要实现时钟的秒、分、时等单位的计数和显示、时钟调节和设置等功能。

5.数码管接口设计:根据数码管的数量和接口方式,进行接口设计。

常用的接口方式有共阳和共阴两种方式。

通过连接适当的电阻和引脚控制,实现对数码管进行数字显示。

6.硬件设计:根据实际需求和电路原理进行电路设计,包括电源电路、晶振电路和数码管显示电路。

注意电源的稳定性以及数码管的驱动电流和电压等参数。

7.调试和测试:完成硬件设计后,进行电子时钟的调试和测试工作。

通过对时钟进行时间设置和调整,验证时钟的计时和显示功能是否正常。

8.最终优化:对电子时钟的功能和性能进行评估,并进行必要的优化。

可以考虑添加闹钟功能、温度显示等扩展功能。

三、实现方法电子时钟的实现方法主要有两种,一种是基于单片机开发板实现,另一种是自己设计和制作。

基于STC89C52单片机时钟的设计与实现

基于STC89C52单片机时钟的设计与实现

基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。

该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。

系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。

用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。

本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。

2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。

系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。

系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。

还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。

用户界面应简洁直观,便于用户快速理解和操作。

时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。

同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。

在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。

系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。

鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。

设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。

在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。

这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。

通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。

单片机原理与应用实验报告——温度测量显示及设定

单片机原理与应用实验报告——温度测量显示及设定

《单片机原理与应用》课程实验报告院系:班级:学生:学号:指导教师:设计时间:哈尔滨工业大学1 实验的目的、内容和设备1.1 实验的目的单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。

1.2 实验内容实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开关,并在LCD上显示实时温度值,设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。

通过该实验学习和掌握以下的内容:1)MPLAB开发环境的使用,程序编写和排错及软件仿真2)利用MPLAB和ICD2对程序进行在线仿真和调试3)使用万用表和示波器等仪器对硬件系统进行测量和调试4)PIC18F452单片机的I/O和PWM驱动及编程方法5)PIC18F452单片机LCD和键盘接口及编程方法6)PIC18F452单片机的USART编程及与PC机的通讯方法7)利用Timer1外接32.768kHz的晶振产生RTC1.3 实验设备1)运行MPLAB的PC机2)示波器、万用表3)直流电源4)ICD2仿真器5)APP001多功能实验板2 总体设计2.1 硬件总体设计系统组成方案图1系统框图2.2 软件总体设计图2主程序框图图3 中断程序框图3 硬件设计1)散热风扇开发输出控制:实验中我们利用一个LED来模拟风扇状态,当散热风扇开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。

开发板上的指示灯D11由RB2,低电平亮,高电平灭。

带有温度显示和液晶显示器的实时时钟设计

带有温度显示和液晶显示器的实时时钟设计
sbit jtod=P1^4;//矩阵按键转独立按键,该脚置0
sbit T_CLK = P1^6; /*实时时钟时钟线引脚*/
sbit T_IO = P3^5; /*实时时钟数据线引脚*/
sbit T_RST = P1^7; /*实时时钟复位线引脚*/
sbit E=P2^7;//1602使能引脚
sbit RW=P2^6;//1602读写引脚
3、proteus是一个非常好用的仿真软件,其具有强大的电路原理图绘制功能,且可以实现模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、键盘、LCD系统仿真等多种功能;和keil联合使用时可以检测所编写的程序的正确与否。将keil和proteus联合起来使用是实现电子设计制作的初步阶段,可避免在实际的硬件操作中因为电路原理图或向单片机烧录的程序有误而造成的难以修改的为题。
3、掌握了Proteus的使用方法,从实际操作中认识到Proteus在仿真方面的优越性,激发了自己学习Proteus的兴趣;
4、因为自己要修改程序,所以单单花费在程序分析的时间就很多,为了更好的理解程序,我把每句主要程序的后面都注释了该语句的意思,详情可以见程序清单,发现注释语义的工作量也是非常大的。写实验报告时,每个模块的流程图都是自己画的,用WORD文档画图真的很麻烦,而且不是很美观。因为时间比较仓促,流程图写的条理性不够,不过相信以后多多练习,就可以做得更好。
2、按键处理模块
2.1按键连线图
从左到右依次是:进位键,数字加,数字减,退出
Mode模式键
2.2按键扫描子程序流程图:
否否否否
是是是是是


是是
2.3加减键处理子程序流程图



基于单片机的电子时钟的设计

基于单片机的电子时钟的设计

基于单片机的电子时钟的设计基于单片机的电子时钟是一种采用单片机作为主控芯片的数字显示时钟。

它能够准确显示时间,并可以通过编程实现其他功能,如闹钟、倒计时、温湿度显示等。

本文将介绍基于单片机的电子时钟的设计原理、硬件电路和软件编程等内容。

1.设计原理基于单片机的电子时钟的设计原理是通过单片机的计时器和定时器模块来实现时间的计数和显示。

单片机的计时器可以通过设定一个固定的时钟频率进行计数,而定时器可以设定一个固定的计数值,当计数到达设定值时,会触发一个中断,通过中断服务程序可以实现时间的更新和显示。

2.硬件电路基于单片机的电子时钟的硬件电路主要包括单片机、显示模块、按键模块和时钟模块。

其中,单片机作为主控芯片,负责控制整个电子时钟的运行;显示模块一般采用数字管或液晶屏,用于显示时间;按键模块用于设置和调整时间等功能;时钟模块用于提供稳定的时钟信号。

3.软件编程基于单片机的电子时钟的软件编程主要分为初始化和主程序两个部分。

初始化部分主要是对单片机进行相关寄存器的设置,包括计时器和定时器的初始化、中断的使能等;主程序部分是一个循环程序,不断地进行时间的计数和显示。

3.1初始化部分初始化部分首先要设置计时器模块的时钟源和计数模式,一般可以选择内部时钟或外部时钟作为时钟源,并设置计时器的计数模式,如自动重装载模式或单次模式;然后要设置定时器模块的计数值,一般可以通过设定一个固定的计数值和计数频率来计算出定时时间;最后要设置中断使能,使得当定时器计数器达到设定值时触发一个中断。

3.2主程序部分主程序部分主要是一个循环程序,通过不断地读取计时器的计数值,并计算得到对应的时间,然后将时间转换成显示的格式,并显示在显示模块上。

同时,还可以通过按键来实现时间的设置和调整功能,如增加和减少小时和分钟的值,并保存到相应的寄存器中。

4.功能扩展-闹钟功能:设置闹钟时间,并在设定的时间到达时触发报警;-温湿度显示:通过连接温湿度传感器,实时显示当前的温度和湿度数据;-倒计时功能:设置一个倒计时的时间,并在计时到达时触发相应的动作。

用单片机制作温度计

用单片机制作温度计

引言:单片机作为一种集成电路,可以在温度检测和测量方面提供精确的结果。

在本文中,我们将探讨如何使用单片机制作一个温度计,并进一步深入了解其工作原理和应用。

概述:温度计是测量环境温度的一种常用工具。

传统的温度计通常使用热敏电阻、热电偶或半导体传感器等元件来实现温度测量。

而用单片机制作的温度计具有精度高、反应迅速、可编程性强等优点,因此在许多应用领域得到了广泛的应用。

正文内容:一、单片机温度计的工作原理1.1模拟输入信号处理1.1.1温度传感器的选择1.1.2传感器输出电压的测量1.1.3模拟信号滤波和放大1.2数字输入信号处理1.2.1模数转换器的配置1.2.2采样频率的选择1.2.3数字信号处理算法二、单片机温度计的电路设计2.1单片机的选择和配置2.1.1单片机性能参数考虑2.1.2单片机引脚的分配2.1.3单片机与温度传感器的连接2.2电源系统设计2.2.1电源电压选择2.2.2电源过滤和稳压2.2.3低功耗设计2.3外设设计2.3.1显示屏的选择和接口设计2.3.2按键输入和控制电路设计2.3.3声音提示电路设计三、单片机温度计的软件设计3.1系统初始化3.1.1时钟和定时器配置3.1.2IO口初始化3.1.3中断系统配置3.2温度测量算法3.2.1温度传感器信号处理算法3.2.2温度计算方法选择3.2.3温度显示和存储3.3用户界面设计3.3.1温度显示界面设计3.3.2操作界面设计和控制逻辑四、单片机温度计的功能拓展4.1温度报警功能4.1.1温度报警阈值设定4.1.2报警方式选择4.2温度记录和数据存储4.2.1温度数据存储方式4.2.2数据查询和导出4.3多温度传感器接入4.3.1多传感器引脚分配4.3.2数据采集和处理五、单片机温度计应用实例5.1家用温度监测系统5.2工业温度控制系统5.3医疗设备温度监测总结:本文详细介绍了使用单片机制作温度计的方法。

通过对单片机温度计的工作原理、电路设计、软件设计等方面的讲解,读者可以了解到单片机温度计的制作流程和相应的技术要点。

基于DS18b20、DS1302的单片机测温与时钟显示系统

基于DS18b20、DS1302的单片机测温与时钟显示系统
科技信息
o I T论坛o
S IN E&T C I L GYI F MA I CE C Et NO O OR TON N
20 0 9年
第 3 期 1
基于 D 1b 0D 10 S 8 2 、 S 3 2的单片机 测温 与时钟显 示 系统
周诗虎 ( 汉职 业 技术 学院计 算机 系 湖北 武 武汉 40 7 3 0 4)
【 摘 要 】 糸统 采 用AT 9 5 本 8 S2单 片 机 和 DS 8 2 、 10 1b 0DS3 2配合 , 完成 实 时 温度 检 测 和 时 间 日期 显 示 。 并 由 本人 制作 完 成 了样 机 。 系统 中 还有一块 6 4点 阵 L D 显 示屏 , 以 显 示 系统 中所 需 的符 号 和 简单 汉 字 , 能 滚 动 显 英 文 字 幕 。 另 外 系统 中还 装 有 一 个 3 3矩 阵键 盘 , 于 系 E 用 并 * 用
统 操 作 与 控 制 。 并 接 一 个 直 流 蜂 呜 器 和 一 个 交 流 蜂 呜 器 , 以进 行 音 响提 示和 播 放 音 乐 。 用
【 键 词 】 片 机 ; 1b 0 DS 3 2 显 示 屏 ; 呜 器 ; 阵键 盘 关 单 DS8 2 ; 10 ; 蜂 矩
只 * 本 系 统 采 用 A 8 S 2单 片 机 和 D 16 0 D 10 T 95 S 8 2 、 S 3 2配 合 , 完成 实 时 检 测 。温 度 显 示 时 若 想 返 回时 钟 功 能 , 需 按 3 3矩 阵 键 盘 的任 一键 温 度 检 测 和 时 间 日期 显 示 。系 统 配 置 包 括 : 1 一 块 6 () 4点 阵 L D 显 示 或 者 系 统 复 位 键 即 可 。 E 屏 .用 以显 示 系统 中所 需 的符 号 和 简 单 汉 字 ,并 能 滚 动 显 英 文 字 幕 。 2 系统 所 用 主 要 芯 片 介 绍 . ( ) 个 3 3矩 阵 键 盘 , 于 系 统 操 作 与 控 制 。( ) 个 L D 七 段 数 码 2一 * 用 3六 E 系 统 中所 使 用 的 单 片 机 是 美 国 A m l 司生 产 的 A 8 S 2 te公 T 9 5 。它是 显 示 管 . 于显 示 温度 、 间 、 用 时 日期 等 。 4 一 个 直 流 蜂 呜 器 和 一 个 交 流 ()

基于单片机的电子时钟的设计与实现

基于单片机的电子时钟的设计与实现

基于单片机的电子时钟的设计与实现电子时钟是一种使用微处理器或单片机作为主控制器的数字时钟。

它不仅能够显示当前时间,还可以具备其他附加功能,如闹钟、日历、温度显示等。

一、设计目标设计一个基于单片机的电子时钟,实现以下功能:1.显示时间:小时、分钟和秒钟的显示,采用7段LED数码管来显示。

2.闹钟功能:设置闹钟时间,到达设定的时间时会发出提示音。

3.日历功能:显示日期、星期和月份。

4.温度显示:通过温度传感器获取当前环境温度,并显示在LED数码管上。

5.键盘输入和控制:通过外部键盘进行时间、日期、闹钟、温度等参数的设置和调整。

二、硬件设计1.单片机选择:选择一款适合的单片机作为主控制器,应具备足够的输入/输出引脚、中断和定时器等功能,如STC89C522.时钟电路:使用晶振为单片机提供稳定的时钟源。

3.7段LED数码管:选择合适的尺寸和颜色的数码管,用于显示小时、分钟和秒钟。

4.温度传感器:选择一款适合的温度传感器,如DS18B20,用于获取环境温度。

5.喇叭:用于发出闹钟提示音。

6.外部键盘:选择一款适合的键盘,用于设置和调整时间、日期、闹钟等参数。

三、软件设计1.初始化:设置单片机定时器、外部中断和其他必要的配置。

2.时间显示:通过定时器中断,更新时间,并将小时、分钟和秒钟分别显示在相应的LED数码管上。

3.闹钟功能:设置闹钟时间,定时器中断检测当前时间是否与闹钟时间一致,若一致则触发警报。

4.日历功能:使用定时器中断,更新日期、星期和月份,并将其显示在LED数码管上。

5.温度显示:通过定时器中断,读取温度传感器的数据,并将温度显示在LED数码管上。

6.键盘输入和控制:通过外部中断,读取键盘输入,并根据输入进行相应的操作,如设置时间、闹钟、日期等。

7.警报控制:根据设置的闹钟时间,触发警报功能,同时根据用户的设置进行控制。

四、测试与调试完成软件设计后,进行系统测试与调试,包括验证显示时间、日期、温度等功能的准确性,以及闹钟和警报功能的触发与控制。

基于单片机的智能电子时钟的设计及应用

基于单片机的智能电子时钟的设计及应用

基于单片机的智能电子时钟的设计及应用一、引言智能电子时钟是一种应用广泛的电子产品,它不仅能够准确显示时间,还具备了一系列智能化的功能,如闹钟、温湿度显示、定时开关等。

基于单片机的智能电子时钟设计是近年来电子技术领域中备受关注的研究方向。

本文将详细介绍基于单片机的智能电子时钟设计及其应用,并对其进行深入研究。

二、基于单片机的智能电子时钟设计原理1. 选取合适的单片机芯片在设计基于单片机的智能电子时钟之前,首先需要选取合适的单片机芯片。

常见选择包括51系列、AVR系列和ARM系列等。

根据具体需求和功能要求进行选择,并考虑到其性价比、易用性和扩展性。

2. 时钟模块设计在整个系统中,准确显示时间是最基本也是最关键的功能之一。

因此,需要设计一个稳定可靠且精度高的时钟模块。

常见选择包括RTC 芯片和GPS模块等。

3. 显示模块选择与驱动为了实现时间的直观显示,需要选择合适的显示模块。

常见选择包括LED数码管、LCD液晶显示屏和OLED显示屏等。

同时,还需要设计合适的驱动电路,以实现对显示模块的控制。

4. 功能模块设计除了基本的时间显示功能外,智能电子时钟还可以具备一系列智能化功能。

常见功能包括闹钟、温湿度显示、定时开关等。

这些功能需要通过相应的传感器和控制电路来实现。

三、基于单片机的智能电子时钟应用1. 家庭生活基于单片机的智能电子时钟在家庭生活中有着广泛应用。

它可以作为家庭闹钟,准确地唤醒人们起床;同时也可以作为温湿度监测器,在家中监测室内温湿度,并提供相应数据。

2. 办公场所在办公场所中,基于单片机的智能电子时钟可以作为时间提醒器,在工作时间结束时提醒人们休息;同时也可以作为定时开关,在指定时间自动打开或关闭相应设备。

3. 公共场所在公共场所中,基于单片机的智能电子时钟具备更多应用场景。

例如,在火车站、机场等候车室中,它可以作为候车时间显示器,为旅客提供准确的候车时间信息。

四、基于单片机的智能电子时钟设计案例以基于51系列单片机的智能电子时钟设计为例,具体设计方案如下:1. 硬件设计选用51系列单片机作为主控芯片,搭配RTC芯片作为时钟模块。

基于51单片机的温度上下限控制(实时显示时间、温度)

基于51单片机的温度上下限控制(实时显示时间、温度)
{
delay(5);
if(K1==0)
{
th4++;
while(!K1);
if(th4==10)th4=0;
}
}
if(K2==0)
{
delay(5);
if(K2==0)
{
th4--;
while(!K2);
if(th4==-1)th4=9;
}
}
write_cmd(0xcc);
write_dat(th4+0x30);
{
if(K4==0)
{
delay(5);
if(K4==0)
{
while(!K4);
keynum++;
if(keynum==5)keynum=1;
}
}
return keynum;
}
void key_lcd()
{
if(flag1==1&&k==3)
{
if(K3==0)
{
delay(5);
if(K3==0)
#include"STC89C51RC.H"
#include<absacc.h>
#include"ds18b20.h"
#include"lcd1602.h"
#include"ds1302.h"
#include"2402.h"
uchar data datadis[]={0x00,0x00,0x00,0x00,0x00};
}
return dat;
}
/**写一个字节**/
void write_byte(uchar dat)

温度显示的数字时钟设计课程设计报告2260900

温度显示的数字时钟设计课程设计报告2260900

温度显示的数字时钟设计课程设计报告2260900“电子系统设计”课程设计报告设计课题:电子系统课程设计多功能数字时钟一、设计任务与要求设计任务:本项目拟设计基于单片机的数字时钟和数字温度计,并将时间和温度显示在液晶显示器上。

根据主要功能要求,该设计利用51单片机实现了电子时钟、温度的显示以及设置闹铃等功能。

主要功能要求:1.以24h计数方式。

2.时钟要求可以显示时间:年、月、日、时、分、秒。

3.可调整显示日期、时间,具有整点报时功能,具有闹铃设置功能。

4.显示当前屋内温度,温度显示稳定。

二、系统设计方案2.1 设计与论证按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的存储和查询及显示。

按照系统的设计功能要求,初步确定系统由主控单元、时钟模块、测温模块、显示模块、键盘接口模块共五个模块组成。

2.1.1 主控模块选择方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。

用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。

但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。

方案二:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。

AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中。

单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,相较于方案一为更优方案。

故选择此方案。

2.1.2 时钟模块选择方案一:由单片机实现时钟功能。

单片机内部具有定时器,可方便实现定时功能。

通过计算可知,使定时器每25ms产生一次中断,当产生40次中断后秒单元将加一,以此类推,从而实现时、分、秒的走时,并加以显示。

基于单片机的电子钟设计

基于单片机的电子钟设计

基于单片机的电子钟设计摘要:电子钟是一种普遍使用的时钟类型。

通过单片机,可以实现数字时钟的各种功能,例如:时间显示、闹钟功能、温度显示等。

本文介绍了基于单片机的电子钟设计方案,其中包括硬件系统的设计和程序代码的实现。

该电子钟的基本功能包括:时钟模式、闹钟模式、温度显示和日期显示。

设计方案使用的单片机是AT89C52,时钟模块为DS1302。

实验结果表明,该电子钟系统具有稳定性高、精度高、实用性强等特点。

关键词:单片机、电子钟、DS13021. 概述电子钟是目前流行的现代时钟类型之一。

通过单片机,可以实现数字时钟的各种功能,例如:时间显示、闹钟功能、温度显示等。

作为一种普遍应用于家庭以及公共场所的计时工具,电子钟能够提高人们的时效性、管理效率。

本文将介绍基于单片机的电子钟设计方案,其中包括硬件系统的设计和程序代码的实现。

该电子钟的基本功能包括:时钟模式、闹钟模式、温度显示和日期显示。

设计方案使用的单片机是AT89C52,时钟模块为DS1302。

实验结果表明,该电子钟系统具有稳定性高、精度高、实用性强等特点。

2. 硬件设计2.1 系统原理系统的核心是AT89C52单片机,其包括了8051架构下所有标准的特殊功能寄存器以及升级的功能模块。

DS1302是常用的实时时钟模块,它包含一个时钟/日历的B类时钟芯片、一个31个字节的静态RAM 以及一个摆振电路。

通过与AT89C52的串行通信接口,可以实现时钟芯片与单片机的通信。

2.2 电路设计电路设计包括AT89C52单片机、DS1302时钟芯片、4个7段数码管以及相关的外围元件。

其中,输入电源电压为5V直流电压,4个7段数码管均采用共阴极的连接方式。

2.3 电路说明(1) 时钟模块DS1302DS1302是一种时钟模块,其具有许多特性,例如:硬件控制时间的计数、在停电情况下,仍能保持时间记录、考虑到掉电情况、在无外部纪念日的情况下,为计时器提供64字节的RAM等特点。

电子时钟使用说明

电子时钟使用说明

单片机电子时钟使用说明
如图所示从左至右,按键功能分别是:【调时】,【加】,【减】
主要功能包括:时间,闹钟,整点报时,温度
查看方法:
1、查看时间:
打开电源开关,即可看到时间显示
2、查看闹钟:
时间正常运行状态下,按一次【加】键,即可看到此时闹钟的时间,默认为7:00,再按一次【加】键,切换到时间显示。

3、查看温度:
时间正常运行状态下,按一次【减】键,即可看到此时的温度值,温度是实时变化的,再按一次【减】键,切换到时间显示。

调整方法:
1、调时间:
在时间运行状态下,按下【调时】键,此时,时间暂停,同时小时位闪烁显示,此时再按【加】,【减】键可以对小时进行加减调整,再按一下【调时】键,分钟位闪烁显示,
此时再按【加】,【减】键可以对分钟进行加减调整。

2、调闹钟:
在时间运行状态下,按下【加】键,此时,显示切换到闹钟时间,再按一次【调时】键,闹钟小时位闪烁显示,此时按【加】,【减】键可对闹钟小时进行加减调整,再按一次【调时】键,此时闹钟分钟位闪烁显示,此时按【加】,【减】键可对闹钟分钟位时行加减调整。

功能开启与关闭
1、闹钟开启与关闭
按下【调时】+【加】键,可听到蜂鸣器提示音,当蜂鸣器提示一声表示闹钟开启,两声表示闹钟关闭。

注:需要先按下【调时】键,再同时按下【减】键。

2、整点报时开启与关闭
按下【调时】+【减】键,可听到蜂鸣器提示音,当蜂鸣器提示一声表示整点报时开启,两声表示闹钟关闭。

注:需要先按下【调时】键,再同时按下【减】键。

(注:默认闹钟及整点报时都为关闭,需要开启时请按以上方法操作!!!)。

基于单片机的多功能LCD时钟

基于单片机的多功能LCD时钟

基于单片机的多功能LCD时钟
该时钟的设计思路是通过单片机控制液晶显示器,实时更新时间、日期、温度等信息;同时,结合外部输入信号,实现闹钟功能。

首先,该时钟通过单片机内部定时器实现时间的计时。

通过精确定时器,可以实现秒、分、时的显示和更新。

单片机内部具有RTC(Real-
Time Clock)模块,可实现对日期和时间的实时监控。

其次,该时钟通过温度传感器获取环境温度,并通过单片机控制液晶
屏实时显示。

温度传感器可以是热敏电阻、热敏电容等。

另外,该时钟具有闹钟功能,用户可以设置闹钟时间。

当时间到达设
定的闹钟时间时,时钟会发出报警声音,提醒用户。

此外,该时钟还可以显示日历。

通过单片机计算当前日期,并显示在
液晶屏上。

时钟基于单片机的控制,具有灵活性高、功能强大、可靠性较好等优点。

其通过外设接口与用户进行交互,使得用户操作简单、方便。

整个时钟的设计和制作过程分为硬件设计和软件设计两个部分。

其中,硬件设计包括电路原理图设计、PCB布局设计、外设选型等;软件设计则
包括单片机程序设计、液晶显示程序设计、闹钟功能实现等。

总结起来,基于单片机的多功能LCD时钟是一种功能强大的电子时钟,通过单片机控制液晶显示器实现时间、日期和温度的显示和更新,同时结
合闹钟功能,提供给用户全方位的时间与日期信息。

单片机电子时钟显示dsc芯片

单片机电子时钟显示dsc芯片

单片机电子时钟显示dsc芯片单片机电子时钟是一种精度较高,操作简单的电子产品,在现代社会中有着广泛的应用。

DSC芯片作为其中的一种,具有处理能力强、功耗低、响应速度快等优点,被广泛应用于单片机电子时钟的设计和制作中。

一、DSC芯片概述DSC(Digital Signal Controller)芯片是将DSP(数字信号处理器)的运算能力和MCU(微控制器)的控制功能集成在一起的芯片。

它是一种高级的数字信号处理器,可实现数字信号处理和控制计算两种功能,广泛应用于电机控制、汽车电子等领域。

DSC芯片的先进性在于其核心处理器采用高精度流水线结构,可以同时执行多个指令,提高了运算速度;其内部集成了大量的控制器和接口电路,可以实现与其他外部设备之间的数据交换和通信。

二、单片机电子时钟设计需求单片机电子时钟是指基于数字电路和微控制器等电子元件制作的具有时间计量和时间显示功能的电子产品,具有精度高、使用方便的特点,广泛应用于家电、办公设备、车辆等领域。

其主要设计需求包括:1. 精度高:电子时钟对时间的精度要求较高,需要高精度的时钟芯片和稳定的时钟电路。

2. 显示清晰:电子时钟需要具有清晰、明亮的时间显示效果,使用LED数字管或LCD屏幕等显示元件。

3. 操作简单:电子时钟的操作应简单易懂,能够方便地设置时间、闹钟等功能。

4. 功能丰富:电子时钟除了基本的时间计量和显示功能外,还需要具备多种功能,如闹钟、时区调整、温度、湿度显示等。

三、DSC芯片在单片机电子时钟中的应用1. 高精度时钟控制DSC芯片可以将外部高精度时钟芯片连接至其定时器模块中,实现对时钟输出频率和周期的控制,提高了电子时钟的精度和稳定性。

2. 外部设备控制DSC芯片具有多种控制器和通信接口,可以连接多种外部设备,实现对其的控制和数据交换。

例如,可以连接环境传感器,实现温度、湿度等数据的采集和显示。

3. 多功能显示控制DSC芯片可以控制多种显示元件,例如LED数字管、LCD 屏幕等,并可以实现数字的滚动、闪烁等特效显示,增加了电子时钟的视觉体验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南华大学计算机技术综合课程设计报告学院:湘南学院题目:单片机LCD时钟显示和温度测量学生姓名:专业班级:指导老师:教研室主任:2012年6月29日一、概述:本次设计的LCD时钟显示和温度测量系统是由中央控制器、温度检测器、时钟系统、显示器及键盘部分组成。

控制器采用单片机STC89C51RC,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶1602作为显示器,用蜂鸣器构成闹铃模块。

单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器1602显示;键盘是用来调整时间的。

二、方案设计及方案论证1. 时钟显示和温度测量的总体设计思路按照系统的设计功能要求,本时钟显示和温度测量系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的调整及显示。

获得时钟显示和温度测量数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。

2.时钟显示和温度测量系统方案论证时钟系统方案选择方案1:通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;方案2:用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。

虽然用软件实现时钟硬件线路简单,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。

用专用时钟芯片硬件成本相对较高,但它的精度很高,软件编程很简单。

综上所述,选择方案2。

本次设计采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。

它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。

它采用主电源和备用电源双电源供电。

它的工作电压范围~,在时,小于300nA。

它内部含有31个字节的静态RAM,可提供用户访问。

?DS1302可以对年、月、日、周日、时、分、秒进行计时,可以达到我们设计的基本的要求。

内部的寄存器为我们调时,闹钟定时提供了寄存空间。

备用用电源也实现了当系统断电后,时钟仍然可以保持。

而且它是串行接口,与单片机通信所需要的接口少。

显示系统的方案比较方案1:用数码管或LED显示。

方案2:用液晶1602显示。

方案3:用液晶12864显示。

时钟和温度的显示可以用数码管或LED,而且价格便宜。

但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。

有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用12864显示略想复杂,用1602液晶显示可以完全满足本次设计的数据显示要求。

温度系统方案选择方案1:用热敏电阻等测温元件测出电压,再转换成对应的温度。

需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。

方案2:用DS18B20直接测温。

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

经比较,我们选择方案2。

温度实现只能通过外部的温度传感器来实现。

经上网查阅,DS18b20体积小,只有3只脚,电路接法简单。

精度为°C,也符合我们设计的要求。

DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。

键盘控制方案选择方案1:购买集成键盘,采用矩阵形式连接。

方案2:购买单个复位开关做成键盘。

虽然集成键盘美观,与单片机的接口少,但是它的成本比较高。

单片机的IO口对于我们的设计绰绰有余。

通常我们选用价格便宜单个复位开关做成键盘。

3.时钟显示和温度测量系统总体设计初步确定设计系统由单片机主控模块、时钟模块、测温模块、闹铃模块、显示模块、键盘接口模块共6个模块组成,电路系统框图如下图所示。

图1:电路系统框图 三、硬件电路单元设计 1、单片机最小系统设计复位电路:复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。

如下图所示:图2:复位电路晶振电路晶振电路选取条件:晶振12M ,电容20pF 到30pF ,本电路选取20pF 。

晶振电路原理如下图:主 控 器 件STC89C51DS18B20 温度采集系统DS1320 时间采集系统1602 显示系统蜂鸣器 闹铃系统键盘 控制系统图3:晶振电路2、时钟系统设计DS1302时钟电路晶振选用,原理图如下:图4:基于ds1302时钟系统设计电路3、温度系统设计DS18B20温度传感DQ端接单片机口,电路原理图如下:图5:基于DS18b20温度系统设计电路4、液晶显示系统设计1602液晶显示电路由1K电阻和10K的精密电阻组成,控制端接、、口,数据端接P2口,电路图如下:图6:液晶1602显示电路把15脚的10K电阻改成1K电阻5、蜂鸣器系统设计蜂鸣器闹铃电路由蜂鸣器跟1K限流电阻组成,电路图如下:图7:蜂鸣器电路6、电源模块本系统采用USB供电,用发光二极管显示通电状况,电源电源电路如下:图8:电源电路7、时间调节模块本系统采用3个按键调节时间。

S1是菜单键,选择要调节的位;S2按一下表示加一;S3按一下表示减一。

电路如下:图9:时钟调节电路四、软件调试1、程序流程图如下:图10:程序流程图2、程序见附录五、硬件调试1、原理图如下:图11:总原理图2、PCB图如下:图12:PCB图其中红色部分为跳线;3、实物测试板子制作完成后上电测试发现电源灯没有显示,用万用表测量之后发现精密电阻接线错误,导致VCC与GND直接连通。

修正之后发现电源指示灯还是没有亮,测量USB两端电压为,卸掉USB口,插上排针用杜邦线连接单片机的VCC和GND之后,电源灯能够点亮,液晶能够驱动,但是亮度不够。

测量液晶两端的电压发现只有,用导线将液晶背光的VCC直接接上电源VCC后,液晶亮度正常。

将程序下载之后经过几次调试和修改,最终实现了想要达到的效果。

六、总结与体会在开始本次课程设计前花费了十多天的时间认真学习了单片机,通过书本和视频的学习,对单片机有了进一步的掌握并学会C51编程的一些方法。

这对于完成本次课程设计提供了很大的帮助。

从这次的课程设计中,我真真正正的意识到,在写程序时,逻辑思维要清晰,要有耐心。

同时要巧妙的利用C语言的可移植性,这对写程序有很大的帮助。

参考文献:1.郭天祥单片机学习板配套资料2.《51单片机C语言教程》郭天祥主编电子工业出版社3.《C语言程序设计》尹业安,白燕主编国防科技大学出版社4.《单片机原理与应用及C51程序设计》谢维成杨加国主编清华大学出版社程序如下:#include<>#include<>#define uchar unsigned char#define uint unsigned int#define LCDIO P2sbit DQ=P1^3; write_com(0x01); w rite_com(0x80); //设置初始化数据指针,是在读指令的操作里进行的delay(5);write_com(0x80); //初始化显示时间(table table1中的内容)for(num=0;num<15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<15;num++){write_date(table1[num]);delay(5);}}void Write1302(uchar dat) //写8bit数据{uchar i;SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备delay1(2); //稍微等待,使硬件做好准备for(i=0;i<8;i++) //连续写8个二进制位数据{DATA=dat&0x01; //取出dat的第0位数据写入1302delay(2); //稍微等待,使硬件做好准备SCLK=1; //上升沿写入数据delay1(2); //稍微等待,使硬件做好准备SCLK=0; //重新拉低SCLK,形成脉冲dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位}}void WriteSet1302(uchar Cmd,uchar dat) //向cmd相应地址中写入一个字节的数据{RST=0; //禁止数据传递SCLK=0; //确保写数居前SCLK被拉低RST=1; //启动数据传输delay1(2); //稍微等待,使硬件做好准备Write1302(Cmd); //写入命令字Write1302(dat); //写数据SCLK=1; //将时钟电平置于已知状态RST=0; //禁止数据传递}uchar Read1302(void) //读8bit数据{uchar i,dat;delay(2); //稍微等待,使硬件做好准备for(i=0;i<8;i++) //连续读8个二进制位数据{dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA==1) //如果读出的数据是1dat|=0x80; //将1取出,写在dat的最高位SCLK=1; //将SCLK置于高电平,为下降沿读出delay1(2); //稍微等待SCLK=0; //拉低SCLK,形成脉冲下降沿delay1(2); //稍微等待}return dat; //将读出的数据返回}uchar ReadSet1302(uchar Cmd) //从cmd相应地址中读一个字节的数据{uchar dat;RST=0; //拉低RSTSCLK=0; //确保写数居前SCLK被拉低RST=1; //启动数据传输Write1302(Cmd); //写入命令字dat=Read1302(); //读出数据SCLK=1; //将时钟电平置于已知状态RST=0; //禁止数据传递return dat; //将读出的数据返回}void Init_DS1302(void){WriteSet1302(0x8E,0x00); //根据写状态寄存器命令字,写入不保护指令WriteSet1302(0x80,((0/10)<<4|(0%10))); //根据写秒寄存器命令字,写入秒的初始值WriteSet1302(0x82,((45/10)<<4|(45%10))); //根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,((8/10)<<4|(8%10))); //根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,((29/10)<<4|(29%10))); //根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,((6/10)<<4|(6%10))); //根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,((12/10)<<4|(12%10))); // 根据写年寄存器命令字,写入年的初始值WriteSet1302(0x8a,((1/10)<<4|(1%10))); // 根据写星期寄存器命令字,写入星期的初始值}void DisplaySecond(uchar x) //显示秒{uchar i,j;i=x/10;j=x%10;write_com(0xc7);write_date(0x30+i);write_date(0x30+j);}void DisplayMinute(uchar x) //显示分{uchar i,j;i=x/10;j=x%10;write_com(0xc4);write_date(0x30+i);write_date(0x30+j);}void DisplayHour(uchar x) //显示小时{uchar i,j;i=x/10;j=x%10;write_com(0xc1);write_date(0x30+i);write_date(0x30+j);}void DisplayDay(uchar x) //显示日期、天{uchar i,j;i=x/10;j=x%10;write_com(0x89);write_date(0x30+i);write_date(0x30+j);}void DisplayMonth(uchar x) //显示日期、月{uchar i,j;i=x/10;j=x%10;write_com(0x86);write_date(0x30+i);write_date(0x30+j);}void DisplayYear(uchar x) //显示日期、年{uchar i,j;i=x/10;j=x%10;write_com(0x83);write_date(0x30+i);write_date(0x30+j);}void DisplayWeek(uchar x) //显示星期{ uchar i;x=x*3;write_com(0x8c);for(i=0;i<3;i++){write_date(table2[x]);x++;}}void read_date(void){ReadValue = ReadSet1302(0x81);second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取时间秒ReadValue = ReadSet1302(0x83);minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取时间分ReadValue = ReadSet1302(0x85);hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取时间小时ReadValue = ReadSet1302(0x87);day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取日期日ReadValue = ReadSet1302(0x89);month=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取日期月ReadValue = ReadSet1302(0x8d);year=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取日期年ReadValue=ReadSet1302(0x8b);week=ReadValue&0x07; //从DS1302读星期DisplaySecond(second); // 显示秒、分、小时、天、月、年、星期DisplayMinute(minute);DisplayHour(hour);DisplayDay(day);DisplayMonth(month);DisplayYear(year);DisplayWeek(week);}void turn_val(char newval,uchar flag,uchar newaddr,uchar s1num) //刷新时间(将改变的时间显示到LCD上){newval=ReadSet1302(newaddr);//读取当前时间newval=((newval&0x70)>>4)*10+(newval&0x0f); //将bcd码转换成十进制if(flag) //判断是加一还是减一{newval++;switch(s1num){ case 1: if(newval>99) newval=0;DisplayYear(newval);break;case 2: if(newval>12) newval=1;DisplayMonth(newval);break;case 3: if(newval>31) newval=1;DisplayDay(newval);break;case 4: if(newval>6) newval=0;DisplayWeek(newval);break;case 5: if(newval>23) newval=0;DisplayHour(newval);break;case 6: if(newval>59) newval=0;DisplayMinute(newval);break;case 7: if(newval>59) newval=0;DisplaySecond(newval);break;default:break;}}else{newval--;switch(s1num){ case 1: if(newval==0) newval=99;DisplayYear(newval);break;case 2: if(newval==0) newval=12;DisplayMonth(newval);break;case 3: if(newval==0) newval=31;DisplayDay(newval);break;case 4: if(newval<0) newval=6;DisplayWeek(newval);break;case 5: if(newval<0) newval=23;DisplayHour(newval);break;case 6: if(newval<0) newval=59;DisplayMinute(newval);break;case 7: if(newval<0) newval=59;DisplaySecond(newval);break;default:break;}}WriteSet1302((newaddr-1),((newval/10)<<4)|(newval%10)); //将新数据写入寄存器}void key_scan(void) //键盘扫描程序{ uchar miao,s1num=0;if(menu==0){delay(5);if(menu==0){while(!menu);s1num++;while(1){if(menu==0){delay(5);if(menu==0){while(!menu);s1num++;}}rd=0;miao=ReadSet1302(0x81);second=miao;WriteSet1302(0x80,miao|0x80);write_com(0x0f);//光标闪射if(s1num==1){ year=ReadSet1302(0x8d);write_com(0x80+4); //年光标if(add==0){delay(3);if(add==0){ while(!add);turn_val(year,1,0x8d,1);}}if(dec==0){delay(3);if(dec==0){ while(!dec);turn_val(year,0,0x8d,1);}}}if(s1num==2){month=ReadSet1302(0x89);write_com(0x80+7); //月光标if(add==0){delay(3);if(add==0){ while(!add);turn_val(month,1,0x89,2);}}if(dec==0){delay(3);if(dec==0){ while(!dec);turn_val(month,0,0x89,2);}}}if(s1num==3){ day=ReadSet1302(0x87);write_com(0x80+10);//日光标if(add==0){delay(3);if(add==0){ while(!add);turn_val(day,1,0x87,3);}}if(dec==0){delay(3);if(dec==0){ while(!dec);turn_val(day,0,0x87,3); //写入日寄存器}}}if(s1num==4){ week=ReadSet1302(0x8b);write_com(0x80+14); //星期光标if(add==0){delay(3);if(add==0){ while(!add);turn_val(week,1,0x8b,4);}}if(dec==0){delay(3);if(dec==0){ while(!dec);turn_val(week,0,0x8b,4);}}}if(s1num==5){ hour=ReadSet1302(0x85);write_com(0x80+0x40+2); //时光标if(add==0){delay(3);if(add==0){ while(!add);turn_val(hour,1,0x85,5);}}if(dec==0){delay(3);if(dec==0){ while(!dec);turn_val(hour,0,0x85,5);}}}if(s1num==6) //调时间分{ minute=ReadSet1302(0x83);write_com(0x80+0x40+5);if(add==0){delay(5);if(add==0){ while(!add);turn_val(minute,1,0x83,6); //写入分寄存器}}if(dec==0){delay(3);if(dec==0){ while(!dec);turn_val(minute,0,0x83,6); //写入分寄存器}}}if(s1num==7)//调时间秒{ second=ReadSet1302(0x81);write_com(0x80+0x40+8);//秒光标if(add==0){delay(3);if(add==0){ while(!add);if(second==0x60)second=0x00;turn_val(second,1,0x81,7);}}if(dec==0){delay(3);if(dec==0){ while(!dec);turn_val(second,0,0x81,7);}}}if(s1num==8){ miao=ReadSet1302(0x81);second=miao;WriteSet1302(0x80,second&0x7f);s1num=0;//s1num清零write_com(0x0c);//光标不闪烁break;}}}}}void delay_18B20(unsigned int i)//延时1微秒{while(i--);}void ds1820rst() //ds1820复位{ unsigned char x=0;DQ = 1; //DQ复位delay_18B20(4); //延时DQ = 0; //DQ拉低delay_18B20(100); //精确延时大于480usDQ = 1; //拉高delay_18B20(40);}uchar ds1820rd()///读数据{ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){ DQ = 0; //给脉冲信号dat>>=1;DQ = 1; //给脉冲信号if(DQ)dat|=0x80;delay_18B20(10);}return(dat);}void ds1820wr(uchar wdata)//写数据{unsigned char i=0;for (i=8; i>0; i--){ DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata>>=1;}}read_temp()//读取温度值并转换{uchar a,b;ds1820rst();ds1820wr(0xcc);//跳过读序列号ds1820wr(0x44);//启动温度转换ds1820rst();ds1820wr(0xcc);//跳过读序列号ds1820wr(0xbe);//读取温度a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0x0fff)tflag=0;else{tvalue=~tvalue+1;tflag=1;}tvalue=tvalue*;//温度值扩大10倍,精确到1位小数return(tvalue);}void ds1820disp()//温度值显示{ uchar flagdat;disdata[0]=tvalue/1000+0x30;//百位数disdata[1]=tvalue%1000/100+0x30;//十位数disdata[2]=tvalue%100/10+0x30;//个位数disdata[3]=tvalue%10+0x30;//小数位if(tflag==0)flagdat=0x20;//正温度不显示符号elseflagdat=0x2d;//负温度显示负号:-if(disdata[0]==0x30){disdata[0]=0x20;//如果百位为0,不显示if(disdata[1]==0x30){disdata[1]=0x20;//如果百位为0,十位为0也不显示}}write_com(0xc9);write_date(flagdat);//显示符号位write_com(0xca);write_date(disdata[0]);//显示百位write_com(0xcb);write_date(disdata[1]);//显示十位write_com(0xcc);write_date(disdata[2]);//显示个位write_com(0xcd);write_date(0x2e);//显示小数点write_com(0xce);write_date(disdata[3]);//显示小数位write_com(0xcf);write_date('C');}void main(){init(); //初始化显示Init_DS1302(); //将1302初始化read_temp(); //读取温度ds1820disp();//显示while(1){read_date();key_scan();read_temp();//读取温度ds1820disp();//显示}}。

相关文档
最新文档