带温度显示的万年历 数码管显示

合集下载

数码管显示万年历时钟

数码管显示万年历时钟

数码管显示万年历时钟数码管显示万年历时钟功能介绍一、功能说明:1.整体功能达到了市售电子日历效果,显示内容包括年、月、日、星期、时、分、秒、室温;2.实时时钟芯片采用了两种:DS12C887+和DS1302。

可供学习和使用过程中进行选择;3.数码管控制采用了MAX7219专用扫描驱动芯片,可通过PS/2键盘对数码管的显示亮度进行15级调节;4.电路板上留有PS/2键盘接口,用于调节当前时间、数码管显示亮度、闹铃时间。

这一点和变通电子日历用明显区别,以达到一个有点专业的电子钟的要求;5.电路板上安装有继电器,可作为简单的时间控制(定时控制)或温度控制装置;二、待改进之处:1.可在板上合适的位置增加几个独立按键,日常使用调节更方便些;2.显示内容可增加农历和湿度;3.可以用光敏电阻配合串行A/D转换芯片实现显示亮度的自动调节,以适应环境光线的变化,这样子就更加具有专业性了。

三、PS/2键盘调整说明:1.使用PS2键盘F1进入运行时间设定、F2进入数码管显示亮度设定、F3进入闹铃时间设定、F4启动闹铃、F5关闭闹铃2.按下F1然后依次设定年、月、日、星期、时、分、秒时间信息,中途可以按小键盘区的ENTER键,退出设定状态3.按下F2然后选择小键盘区0-9和字符A-F可设定16级显示亮度,按下选择参数自动恢复走时状态4.按下F3然后依次设定时、分、秒三个闹铃时间参数,设定好任一参数可按小键盘区的ENTER键退出设定状态5.按下F4开启闹铃,继电器吸合其下方工作指示LED点亮,按下F5关闭闹铃,继电器释放同时LED熄灭,如蜂鸣器已经开始闹铃,可按F6或复位键6.按下F1或F2或F3但不想设定任何参数,都可按ESC退出相应的设定状态。

带温度显示的万年历_数码管显示(附电路图和源代码)

带温度显示的万年历_数码管显示(附电路图和源代码)

设计报告设计任务:设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。

并能准确计算闰年闰月的显示。

设计要求:通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术所连线路和单片机接口仿真图如图3所示:图3 仿真按键4)温度采集部分:DS18B20温度传感器,测温范围-55℃~+125℃,固有测温分辨率0.5℃。

独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

DS18B20的采集数据通过DQ传入单片机,单片机读取数据后将数据输出!如图所示:程序如下:ReadOneChar(void){unsigned char i=0;// 定义i用于循环unsigned char dat = 0;// 读取的8位数据for (i=8;i>0;i--)//8次循环{DQ = 0;// 拉低DQ总线开始读时序dat>>=1;// dat左移一位DQ = 1; //释放DQ总线if(DQ)// 如果DQ=1,执dat|=0x80;(0x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat>>=1,循环8次结束,dat 即为读取的数据)//DQ=0,就跳过dat|=0x80;Tdelay(4);// 延时以完成此次读时序,之后再读下一数据}return(dat); 返回读取的dat}//写一个字节WriteOneChar(unsigned char dat){unsigned char i=0;//for (i=8; i>0; i--)//{DQ = 0;//DQ = dat&0x01;//Tdelay(5);//延时以完成此次读时序,之后再读下一数据DQ = 1;//dat>>=1;//}}//读取温度ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;//Init_DS18B20();WriteOneChar(0xCC);// 写指令,跳过ROM,WriteOneChar(0x44);// 启动温度转换Init_DS18B20();WriteOneChar(0xCC);// 写指令,跳过ROM,WriteOneChar(0xBE);// 写指令,读暂存存储器a=ReadOneChar();//读低8位b=ReadOneChar();//读高8位t=b;//t<<=8;//t=t|a;//tt=t*0.0625;//t= tt*10+0.5;//return(t); //获得0.01°C 的精度并返回}LED数码管的选择LED数码管分为共阴和共阳两种,以利用STC89C51的P0口作为LED显示的数据部分,以P2口的七个口作为显示部分的位选,通过三八译码器和4-16译码器扩展为17位的位选分别接在一个四位数码管和13个数码管的位选部分。

基于单片机带温度显示的液晶万年历

基于单片机带温度显示的液晶万年历

摘要在寒假期间我用一周时间完成了这个液晶万年历,它可以显示年月日、时分秒、以及温度(可上下限报警),可以对时间进行加一或减一调整,并加入了闰、平年时间调整,方便可行,已经调试成功。

考虑到成本和方便,本作品采用了STC89c52和DS18B20,计时用的是51单片机自带的十六位定时器/计数器T0,尽管对时间进行了误差调整但是还是有一定的误差,考虑到学校后改用DS1302时钟芯片,进一步减小误差。

温度显示精度达到0.1摄氏度。

关键词:单片机 DS18B20 万年历温度1.硬件工作介绍(1)上电自动复位及手动复位电路STC89c52单片机的RST端外部复位有两种操作方式:上电自动复位和按键手动复位。

本设计用上电自动复位以及手动复位下结合的方式外接电路(见附图)。

(2)时钟振荡电路作品中采用12M晶振,其连接方法如图所示,其中电容的值都为22pF。

(3)1602液晶显示接口1602采用标准的16脚接口(见附图),其中:第1脚:GND为地电源第2脚:VCC接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS 和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15脚:VCC第16:GND(4)键盘键盘是通过S3(P3.2),S4(p3.3),S5(p3.4)对时钟进行调整,其S3选择要调整的对象如时,分,日,月等等,并在液晶屏上显示所选的对象。

S4对所选中的对象进行加一调整,而S5对所选对象进行减一调整。

带温度显示可调闹钟万年历论文

带温度显示可调闹钟万年历论文

带温度显示可调闹钟万年历摘要本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。

系统最大的特点是体现了较强的人机交互和独立的模块化程序设计。

温度采集选用DS18B20芯片,数据显示采用1602A液晶显示模块,在第一行显示年月日、星期以及当前的状态,第二行显示温度和时间,合理的利用液晶显示区域。

51主芯片利用定时中断产生时间,控制着液晶的显示更新、温度的实时变化以及按键的读取处理,而对于闹钟,实际上就是时间里的一个嵌套程序。

时间和闹钟的值由按键调整设置,采用通用的二十四小时制。

该电路采用51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

关键字:万年历;温度计;闹钟;液晶显示一、方案设计与论证根据要求,系统分为四个模块进行方案设计:1.数据显示模块方案一:数据采集处理后采用六位数码管动态扫描,循环依次显示年月日(如09.01.01)、当前时间(如12.00.00)和温度星期(如+23.5_1),数码管用74LS164芯片驱动,硬件电路复杂且显示略显混乱,在软件方面,扫描部分由于要显示的数据太多而显的不清晰。

方案二:考虑到要显示的内容颇多,故运用1602A显示实时数据,第一行显示状态以及年月日星期(如S 2009—01—01 THU),第二行显示温度和实时时间(22.0C12:00:00),在处理按键设置时,第二行暂时屏蔽温度的显示而显示设置的内容。

这样虽然在程序方面多了1602A的一些初始化和读写子函数的定义,但程序的模块化却更加的清楚。

而且采用1602A LCM的液晶显示模块后不仅满足了大量数据的显示,,系统的硬件电路变的十分简单清晰明朗。

本设计采用了这种方案。

2 温度采集模块采用常用的温度采集芯片DS18B20单线数字温度传感器进行温度的采集。

具有温度显示的电子实时时钟万年日历系统的设计与制作

具有温度显示的电子实时时钟万年日历系统的设计与制作

毕业设计(论文)《具有温度显示的电子实时时钟/万年日历系统的设计与制作》专业(系)电气工程系铁道通讯信号方向班级铁道通讯091学生姓名陈志军指导老师赵巧妮完成日期2011.11.22摘要本设计以数字集成电路技术为基础,单片机技术为核心。

本文详细的介绍基于AT89S51单片机带有温度和闹钟的万年历控制系统。

利用单片机定时计数器提供秒信号,DS18B20数字式温度传感器进行温度数据传输,经软件处理,在动态扫描后,利用8个共阳数码管交替显示年月日、时分秒、环境温度值。

为了更好的调节和设置,设计了四个按键快速进行时间和闹钟的精准调整。

关键字:单片机;万年历;温度;闹钟;DS18B20AbstractThis design with digital integrated circuit technology as the foundation, microcontroller technology as the core. This paper is introduced in detail based on AT89S51 with temperature and the alarm clock calendar control system. Using single chip computer timing counter offer seconds signal, the temperature sensor DS18B20 digital temperature data transmission, the software processing, in dynamic scan, a total of 8 Yang digital tube alternate show dates, meticulous, environment when the temperature. In order to better regulate and settings, design the four keys of rapid time and alarm the accuracy of adjustment.Key words:Microcomputer; Calendar;Temperature; Alarm clock; DS18B20; Dynamic scanning目录摘要 (I)第1章引言 (1)1.1研究背景 (1)1.2论文研究目标和意义 (1)1.3论文章节安排 (1)第2章任务与要求 (2)2.1课题概述 (2)2.1.1 设计内容 (2)2.1.2 要求 (2)第3章方案论证与设计 (3)3.1 总体设计分析 (3)3.2 方案的选择与设计 (3)3.2.1 显示模块选择方案和论证: (3)3.2.2 时钟芯片的选择方案和论证: (3)3.2.3 温度传感器的选择方案与论证: (4)3.3 方案确定 (4)第4章硬件电路设计 (5)4.1 硬件电路设计框图 (5)4.1.1 系统硬件概述 (5)4.1.2 单片机主控制模块的设计 (5)4.1.3 振荡电路 (6)4.1.4 复位电路 (6)4.1.5 温度采集模块设计 (6)4.1.6 显示模块的设计 (7)4.1.7 蜂鸣器电路 (8)4.1.8 按键电路 (8)第5章系统的软件设计 (10)5.1编程环境及语言: (10)5.2程序流程框图 (10)第6章电路调试 (12)6.1调试的设备 (13)6.2调试步骤 (13)6.2.1 硬件调试 (13)6.2.2 软件调试 (13)第7章使用说明 (17)7.1 使用方法 (17)7.1.1 系统面板介绍 (17)7.1.2 调整方法 (17)7.1.3 调整框图 (18)7.1.3 注意事项 (19)7.2故障分析 (19)7.2.1 LED数码管显示不全、模糊、多出相对较暗的一位 (19)7.2.2 调整时按键过于灵敏 (19)心得体会 (20)参考文献 (21)附件 (22)附件一:总原理图 (22)附件二:PCB版图 (23)附件三:元件清单 (24)附录四:程序代码 (26)引言1.1研究背景当今社会逐渐步入信息化时代,快节奏、高效率成为当今时代的主题。

华伟鑫led数码万年历表说明

华伟鑫led数码万年历表说明

华伟鑫led数码万年历表说明【实用版】目录1.华伟鑫 LED 数码万年历表简介2.华伟鑫 LED 数码万年历表功能特点3.华伟鑫 LED 数码万年历表使用说明4.华伟鑫 LED 数码万年历表的优点与不足正文一、华伟鑫 LED 数码万年历表简介华伟鑫 LED 数码万年历表是一款集时尚与实用于一体的日历产品,它采用高清 LED 显示屏,呈现出清晰的日期、星期和温度等信息,方便用户随时查看。

此款万年历表具有简约的外观设计,适合摆放在办公室或居家环境中,为您的生活带来便利。

二、华伟鑫 LED 数码万年历表功能特点1.显示日期、星期和温度:华伟鑫 LED 数码万年历表通过高清 LED 显示屏,清晰地显示出当前的日期、星期和温度等信息,方便用户快速了解。

2.闹钟功能:该款万年历表具备闹钟功能,可设置多个闹钟时间,为您的日常生活提供便利。

3.台历和挂历模式:华伟鑫 LED 数码万年历表可根据用户需求,切换台历和挂历模式,满足不同场景的使用。

4.节能环保:采用低功耗设计,节能环保,使用寿命长。

三、华伟鑫 LED 数码万年历表使用说明1.开机:按下侧面的开关键,屏幕将显示当前日期、星期和温度等信息。

2.设置闹钟:长按闹钟键,待屏幕出现“闹钟设置”字样时,按上下键设置闹钟时间,再按闹钟键确认。

3.切换台历/挂历模式:按下模式键,可在台历和挂历模式之间切换。

4.关闭:长按侧面的开关键,关闭万年历表。

四、华伟鑫 LED 数码万年历表的优点与不足优点:1.高清 LED 显示屏,显示信息清晰。

2.具备闹钟功能,实用性强。

3.节能环保,使用寿命长。

不足:1.功能相对单一,无其他附加功能。

2.屏幕较小,查看信息时可能需走近。

总之,华伟鑫 LED 数码万年历表凭借其时尚的外观、实用的功能以及节能环保的特点,成为现代家庭和办公场所的理想选择。

然而,功能相对单一以及屏幕较小,可能无法满足部分用户的需求。

单片机课程设计之万年历、闹钟与温度显示设计

单片机课程设计之万年历、闹钟与温度显示设计
根据方案的选择,数码管时钟温度系统由51单片机、时钟芯片DS1302、测温芯片DS1802、数码管显示电路、键盘电路组成,如图3-1所示。
本系统采用C语言编写,控制器采用单片机STC89C52,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用八位数码管作为显示器。单片机通过时钟芯片DS1302获取时间数据;通过温度传感器DS18B20采集温度信号送给单片机处理,并在数码管中显示出来,键盘可以切换界面,调时和温度查询与设置闹钟的功能。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。电路图如图3-4所示。
6、数码管显示电路设计
数码管内部是由7个条形发光二极管与一个小圆点发光二极管组成,根据这八个二极管的亮暗组成不同的字符。本系统采用八位数码管作为显示模块,数码管相对其他LCD类的显示器来说,成本比较低廉,省电。两个四位共阴0.56英寸的数码管作为显示屏。如图3-6所示。
7、按键控制电路设计
本系统采用四个按键作为键盘控制实现界面切换的功能,如图3-7所示。能够实现界面切换、时间校正、闹钟设置等功能。机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图3-8所示。抖动时间的长短与开关的机械特性有关,一般为5-10 ms。故软件编程时需要注意消除抖动。

(汇编)实现数码管显示年,月,日,时,分,秒,星期,温度,按键可调万年历

(汇编)实现数码管显示年,月,日,时,分,秒,星期,温度,按键可调万年历

;///////////////////////////////////////////;本程序源代码由湖南工程职业技术学院提供.;专业单片机培训,让你学习单片机更容易.;程序员:蒋庆桥;QQ:xxxxxxxxx;本程序用汇编实现数码管显示年,月,日,时,分,秒,星期,温度,按键可调万年历,H_ADJ BIT P3.0 ;时/年调整M_ADJ BIT P3.1 ;分/月调整S_ADJ BIT P1.4 ;秒/日调整DT_SET BIT P1.6 ;时间/日期选择STR BIT P1.5;启动走时T_RST BIT P1.0 ;实时时钟复位线引脚T_CLK BIT P1.1 ;实时时钟时钟线引脚T_IO BIT P1.2 ;实时时钟数据线引脚HH_BIT EQU 40H ;时高位HL_BIT EQU 41H ;时低位MH_BIT EQU 42H ;分高位ML_BIT EQU 43H ;分低位SH_BIT EQU 44H ;秒高位SL_BIT EQU 45H ;秒低位TEMPER_L EQU 46HTEMPER_H EQU 47HYH_BIT EQU 48H ;年高位YL_BIT EQU 49H ;年低位MOH_BIT EQU 4aH ;月高位MOL_BIT EQU 4bH ;月低位DH_BIT EQU 4cH ;日高位DL_BIT EQU 4dH ;日低位SEC EQU 30HMIN EQU 31HHOUR EQU 32HDAY EQU 33HMONTH EQU 34HWEEK EQU 35HYEAR EQU 36HTEMPER equ 37hFLAG1 BIT 20h.0 ;DS18B20存在标志位DQ BIT P1.3A_BIT EQU 55HB_BIT EQU 56HDS1302_ADDR EQU 5EHDS1302_DATA EQU 5FHORG 00HLJMP STARTSTART:MOV SP,#60HMOV TMOD,#11HMOV TH0,#3CHMOV TL0,#0B0HMOV R0,#10SETB EASETB ET0SETB TR0MOV R1,37HMOV YEAR,#13H ;上电预置日期、时间MOV WEEK,#03H ;周1 MONMOV MONTH,#07H ;2011 04 25 12:00:00MOV DAY,#05HMOV HOUR,#23HMOV MIN,#00HMOV SEC,#00HMOV 50H,#0/////////////////////////////////////////////////////////////////////// ////MAIN:LCALL KEY//MAIN2:CALL FENLILCALL INIT_18B20LCALL GET_TEMPERcall CHANGEcall dispcall displayAJMP MAINFENLI:MOV A,YEARMOV B,#10HDIV ABMOV YL_BIT,BMOV YH_BIT,AMOV A,MONTHMOV B,#10HDIV ABMOV MOL_BIT,BMOV MOH_BIT,AMOV A,DAYMOV B,#10HDIV ABMOV DL_BIT,BMOV DH_BIT,AMOV A,HOURMOV B,#10HDIV ABMOV HL_BIT,BMOV HH_BIT,AMOV A,MINMOV B,#10HDIV ABMOV ML_BIT,BMOV MH_BIT,AMOV A,SECMOV B,#10HDIV ABMOV SL_BIT,BMOV SH_BIT,ARETKEY: ;按键子程序JB F0,MAIN10 ;F0=1,开始走时。

GC056A万年历操作说明书

GC056A万年历操作说明书

GC056A万年历功能简介及操作说明书主要特点:1.IC驱动能力强,外围电路简单,不要74LS1642.整机功耗低,可采用小功率变压器。

2.超强抗干扰能力。

3.驱动效率高,相同的电流比同类IC数码管亮度增加一倍。

4.IC适应电压范围广,便于数码管选用。

一. 功能简介:1.50年同步显示公历年、月、日、上午、下午、时、分、秒、星期、农历月、日、摄氏温度。

2.12/24小时制转换(24小时制时,上/下午的LED指示灯都不亮)3.四种星期显示方式由硬件选择:越南星期(2~8);7个LED星期(外销用途);国内星期(1~6,8),俄罗斯星期(1~7)。

具有年隐含功能(年显示,表示按原理图的位置正常显示年份;年隐含,表示年的四位数平时不显示出来,只在调整年份时显示在时与分上).4.IC功能选择:由原理图中的C1、C2、C3、R1来决定。

特别注意:C1,C2,C3、R1的参数不要随意改动。

C1、C2、C3、R1都不装:年显示,中国星期;C1装,C2、C3、R1都不装:年显示,越南星期;C2装,C1、C3、R1都不装:年显示,星期1~7;C1,C2都装,C3、R1都不装:年显示,7个LED星期;C1、C2都不装,C3、R1都装:年隐含,中国星期;C2不装,C1、C3、R1都装:年隐含,越南星期;C1不装,C2、C3、R1都装: 年隐含,星期1~7;C1、C2、C3、R1都装:年隐含,7个LED星期;5.内置锂电池,市电停电,LED显示关闭,万年历内部能正常走时,功耗是uA级,一块锂电池,可以连续运行6年以上。

重新来电时万年历不需重新设置。

6.温度测量范围:-9到48度,精度为正负1度。

时间误差一天小于1秒。

7.三个按键 S1:快速退出/即时播报键, S2:设置/移动键,S3:修改/ 闹钟开关键。

另提供一个可以选用的硬件复位键。

8.共4组闹钟,共用1个闹钟指示LED,可以在闹钟设置时单独开启或关闭单个闹钟。

第四组闹钟是学生闹钟,设定开启时只有在周一到周五响闹,周六和周日不响。

带温度显示的万年历 数码管显示

带温度显示的万年历 数码管显示

设计报告万年历时钟的设计班级: 09光电<2>班专业:光电子技术姓名:阮军峰学号: 0906010234 完成日期:2011年06月11日一、设计目的:1、掌握C51程序用于实践并实现相应的功能;2、掌握时钟程序的使用方法;3、掌握时间函数的使用方法;4、掌握键盘的程序使用方法;二、设计任务:设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。

并能准确计算闰年闰月的显示。

三、设计要求:通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。

四、系统方案设计:1、系统总体设计:1) 原理构成框图本设计用STC89C51作为核心控制部分,外接晶振电路和74HC154,74LS138作为位选扩展电路,P3.0、 P3.1 、P3.2接三个个按钮作为时间调整部分,以两个17个数码管作为显示部分,P2口作为位选,P0口作为数据输出部分。

具体框图如图1所示:图1 原理框图2) 主程序的设计系统程序采用C语言按模块化方式进行设计,然后通过KeilC51L 软件开发平台将程序转变成十六进制程序语言,得到HEX文件,接着使用Proteous进行仿真,其次,按照Proteous的仿真电路图,在Protel99SE中完成电路板的逻辑布局及布线。

3) 时间调整电路的设计采用按键设计,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,按下模式可以选择年月日时分秒星期。

按下(+)(-)进行调试,程序如下:while(1){P3_0=1;if(P3_0==0){delay(10);if(P3_0==0)//如果按键被按下{Kdelay();if(P3_0==0)//确定按键按下{while(P3_0==0); // 等待按键放开cursor++;if(cursor>=9){cursor=0;}//如果cursor大于9则cursor=0if(P1_0==0){cursor=0;}} }}P3_1=1;if(P3_1==0){delay(10);if(P3_1==0) //如果按键被按下{Kdelay();if(P3_1==0) //确定按键按下{if(cursor==1){sec++;//如果cursor=1则按键按下秒数加一if(sec==60)sec=0;//如果秒数等于60秒则回到0开始}if(cursor==2){min++;//如果cursor=2则按键按下分数加一if(min==60)min=0; 如果分数等于60分则回到0开始}if(cursor==3){hour++;//如果cursor=3则按键按下时数加一if(hour==24)hour=0; //如果时数等于24时则回到0开始}if(cursor==4){day++;//如果cursor=4则按键按下天数加一if(day==31)day=0; //如果天数等于31天则回到0开始}if(cursor==5){month++;//如果cursor=5则按键按下月数加一if(month==13)month=0; //如果月数等于13月则回到0开始}if(cursor==6){yearl++;//如果cursor=6则按键按下年数低位加一if(yearl==100)yearl=0; //如果年数等于100则回到0开始}if(cursor==7){yearh++;//如果cursor=7则按键按下年数高位加一if(yearh==30)yearh=20; //如果年数大于30则回到0开始}if(cursor==8){week++;//如果cursor=8则按键按下星期数加一if(week==8)week=1; //如果星期数等于8则回到0开始}}while(P3_1==0);}}P3_2=1; //写入时先写1if(P3_2==0){//按键按下delay(10);//延时10个毫秒if(P3_2==0)//确定按键按下{Kdelay();if(P3_2==0){if(cursor==1){sec--;//如果cursor=1则按键按下秒数减一if(sec==0)sec=59; //如果秒数小于0则回到59开始}if(cursor==2){min--;//如果cursor=2则按键按下分数减一if(min==0)min=59; //如果分数小于0则回到59开始}if(cursor==3){hour--;//如果cursor=3则按键按下时数减一if(hour==0)hour=23; //如果时数小于0则回到23开始}if(cursor==4){day--;//如果cursor=4则按键按下天数减一if(day==0)day=31; //如果天数小于0则回到31开始}if(cursor==5){month--;//如果cursor=5则按键按下月数减一if(month==0)month=12; //如果月数小于0则回到12开始}if(cursor==6){yearl--;//如果cursor=6则按键按下年的低位数减一if(yearl==0)yearl=99; //如果年数小于0则回到99开始}if(cursor==7){yearh--;//如果cursor=7则按键按下年的高位数减一if(yearh==20)yearh=30; //如果年数小于0则回到30开始}if(cursor==8){week--;//如果cursor=8则按键按下秒星期减一if(week==0)week=7; //如果星期数小于0则回到7开始}while(P3_2==0);}}}i=ReadTemperature();所连线路和单片机接口仿真图如图3所示:图3 仿真按键4)温度采集部分:DS18B20温度传感器,测温范围-55℃~+125℃,固有测温分辨率0.5℃。

万年历时钟(ds1302)+温度显示(ds18b20)原理图

万年历时钟(ds1302)+温度显示(ds18b20)原理图
A X1 19 18
P3.0 (RXD) P3.1 (TXD) P3.2 (INT0) P3.3 (INT1) P3.4 (T0) P3.5 (T1) X1 X2 IC2 89C51 P27 P26 P25 P24 P23 P22 P21 P20
Байду номын сангаас
28 27 26 25 24 23 22 21
LED2
DIG0_C
DIG4_B
DIG0_B
SD3
DP3
SG3
SD2
DP2
SG2
SD2
DP2
SG2
SD1
DP1
SG1
SD1
DP1
SC3
SC2
SC2
SC1
SC1
SE3
SE2
SE2
SE1
SE1
6
A4
d
h
g
d
h
g
d
h
g
d
h
g
d
h
g
e
c
e
c
e
c
e
c
e
c
R12 1.5k
S7 DP3 S6 SA3 S16 S5:减键,代码05 C S8 S6:加键,代码06 S7:调节时间,代码 07
R12 1.5k C7 104 C7 15P
5V 5V 1 2 3 4 5 CS1 6 CLK1 7 DATA1 8 9 KEY1 10 11 12 13 14 驱动第一排 VDD VDD NC VSS NC CS CLK DATA KEY SG SF SE SD SC HD7279A RESET RC CLKO DIG7 DIG6 DIG5 DIG4 DIG3 DIG2 DIG1 DIG0 DP SA SB 28 27 26 25 24 23 22 21 20 19 18 17 16 15

带温度显示的数字万年历设计

带温度显示的数字万年历设计
1.2万年历的使用现状及设计目的
如今万年历已经在人们生活中广泛的使用,它不仅是记录日期和时间的工具,而且 也成为了一种装饰品。现在的万年历可以说是多种多样,外观精美。放在家里既可以计 时也可作为风景壁画,因此越来越受到大众消费者的喜爱。
本次课程设计通过利用STC89C52单片机和DS1302芯片以及外围的按键和LCD显示器 等部件,设计一个基于单片机的电子时钟。设计的电子时钟通过液晶显示器显示,并能 通过按键对时间以及闹钟进行设置。目的来模拟真实产品中万年历的工作原理,具有很 强的实用性。
2.2方案选择和论证 2.2.1、显示模块选择方案和论证
方案一:
采用点阵式数码管显示。点阵式数码管是由八行八列的发光二极管组成,对于显示文字 比较适合,如采用在显示数字显得太浪费,且难度也相对较高,所以不用此种作为显示。 方案二:
采用LED数码管动态扫描。LED数码管价格便宜,对于显示数字最合适,但功耗较大, 且显示容量不够,所以也不用此种方案。 方案三:
1
方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、 时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V~5.5V范围 内,2.5V时耗电小于300nA.
2.2.4温度Leabharlann 集模块方案选择(宋体四号,加粗)DS18B20数字温度传感器接线方便,独特的单线接口方式,DS18B20在与微处理器连接时 仅需要一条口线即可实现微处理器与DS18B20的双向通讯。封装后的DS18B20可用于电缆 沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测 温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭 小空间设备数字测温和控制领域。因此DS18B20完全满足设计要求。

电子万年历(数码管显示)

电子万年历(数码管显示)

程序#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define jump_ROM 0xCC#define start 0x44#define readdata 0xBEsbit dq=P1^7;sbit w1=P0^6;sbit w2=P0^5;sbit w3=P0^4;sbit w4=P0^7;sbit wela=P0^3;sbit A=P0^0;sbit b=P0^1;sbit C=P0^2;sbit SCLK=P1^0; //DS1302通讯线定义sbit DIO=P1^1;sbit RST=P1^2;sbit k1=P1^6;sbit k2=P1^5;sbit add=P1^4;sbit sub=P1^3;uchar code smgw[]={0,1,2,3,4,5,6,7};uchar code smgd[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//uchar code tab[]={0x077,0x12,0x0c7,0x0d3,0x0b2,0x0f1,0x0f4,0x13,0x0f7,0x0b3,0x00}; uchar temperature[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar code xingqi[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f};uchar tab1[9];uchar tab2[9];uchar nian,yue,ri,zhou,shi,fen,miao,a,shan,tt,shan;uchar knum;uchar q,j,tempp;void display();void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=55;y>0;y--);}void delay1(int useconds){int s;for(s=0;s<useconds;s++);}uchar resetds(void){uchar presencesignal;dq=0;delay1(30);dq=1;delay1(3);presencesignal=dq;delay1(30);return presencesignal;}void writebit(char val){ dq=0;if(val==1)dq=1;elsedq=0;delay1(5);dq=1;}void writebyte(char val) {uchar i;uchar temp;for(i=0;i<8;i++){temp=val>>i;temp&=0x01;writebit(temp);}delay1(5);}uchar readbit(void) {uchar i;dq=0;dq=1;for(i=0;i<3;i++)return dq;}uchar readbyte(void) {uchar i;uchar value=0;for(i=0;i<8;i++) {if(readbit())value|=0x01<<i;delay1(7);}return (value);}void temper(){uchar get[9];uchar k,lsb,msb,n;int m;float t;m=0;resetds();writebyte(jump_ROM);writebyte(start);delay1(5);resetds();writebyte(jump_ROM);writebyte(readdata);display();for(k=0;k<9;k++){get[k]=readbyte();}msb=get[1];lsb=get[0];if((msb&0x80)!=0) // /取补码/ {m=1;msb=~msb;lsb=( ~lsb)+1;if(lsb==0){msb++;}}display();n=lsb;msb=msb<<4;lsb=lsb>>4;tempp=msb|lsb;n=n&0x0f;t=(float )(n);t=t*0.0625;j=(int)(t*100);P2=temperature[j%10];w4=1;w1=0;delay(2);P2= temperature[j/10];w1=1;w2=0;delay(2);P2=temperature[tempp%10]+0x80;w2=1;w3=0;delay(2);P2= temperature[tempp/10];w3=1;w4=0;delay(2);w4=1;}void write(uchar date) //写入DS1302一个字节{uchar temp,i;RST=1;SCLK=0;temp=date;for(i=0;i<8;i++){SCLK=0;if(temp&0x01)DIO=1;elseDIO=0;SCLK=1;temp>>=1;}}uchar read() //读出DS1302一个字节{uchar a,temp;RST=1;for(a=8;a>0;a--){temp>>=1;SCLK=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();SCLK=0;if(DIO){temp=temp|0x80;}else{temp=temp|0x00;}}return (temp);}void write_1302(uchar add,uchar dat) //写DS1302数据{RST=0;SCLK=0;RST=1;write(add);write(dat);SCLK=1;RST=0;}uchar read_1302(uchar add) //读DS1302数据{uchar dat1,dat2;RST=0;SCLK=0;RST=1;write(add);dat1=read();SCLK=1;RST=0;dat2=dat1/16; //数据进制转换dat1=dat1%16;dat1=dat1+dat2*10; //十六进制转十进制return(dat1);}void ds1302_init() //1302初始化{RST=0;SCLK=0;write_1302(0x8e,0x00); //允许写入write_1302(0x80,0x00);//设置初始值SECwrite_1302(0x82,0x59);//设置初始值MINwrite_1302(0x84,0x23);//设置初始值HRwrite_1302(0x86,0x20);//设置初始值DA TEwrite_1302(0x88,0x4);//设置初始值MONTH write_1302(0x8A,0x03);//设置初始值DAYwrite_1302(0x8C,0x12);//设置初始值YEARwrite_1302(0x8e,0x80);}void display(){ P2=temperature[j%10];w4=1;w1=0;delay(2);P2= temperature[j/10];w1=1;w2=0;delay(2);P2=temperature[tempp%10]+0x80;w2=1;w3=0;delay(2);P2= temperature[tempp/10];w3=1;w4=0;delay(2);w4=1;miao=read_1302(0x81); //读秒fen=read_1302(0x83); //读分shi=read_1302(0x85);//&0x3f; //读时ri=read_1302(0x87); //读日yue=read_1302(0x89); //读月nian=read_1302(0x8d); //读年zhou=read_1302(0x8B); //读星期if(knum==7){wela=0; //年A=0;b=1;C=1;P2=0x5b&shan;delay(2);A=1;b=1;C=1;P2=0x3f&shan;delay(2);wela=1;A=0;b=0;C=0;P2=smgd[nian/10]&shan;delay(2);A=1;b=0;C=0;P2=smgd[nian%10]&shan;delay(2);}else{wela=0; //年A=0;b=1;C=1;P2=0x5b;delay(2);A=1;b=1;C=1;P2=0x3f;delay(2);wela=1;A=0;b=0;C=0;P2=smgd[nian/10];delay(2);A=1;b=0;C=0;P2=smgd[nian%10];delay(2);}if(knum==6){ wela=1;A=0;b=1;C=0; // 月P2= smgd [yue/10]&shan;delay(2);A=1;b=1;C=0;P2= smgd [yue%10]&shan;delay(2);}else{ wela=1;A=0;b=1;C=0; // 月P2=smgd [yue/10];delay(2);A=1;b=1;C=0;P2= smgd [yue%10];delay(2);}if(knum==4){ wela=1;A=0;b=1;C=1; // 星期P2=xingqi[zhou%10]&shan;delay(2);}else{A=0;b=1;C=1; // 星期P2=xingqi[zhou%10];delay(2);}if(knum==5){wela=1;A=0;b=0;C=1; // 日P2= smgd [ri/10]&shan;delay(2);A=1;b=0;C=1;P2= smgd [ri%10]&shan;delay(2);}else{ wela=1;A=0;b=0;C=1; // 日P2= smgd [ri/10];delay(2);A=1;b=0;C=1;P2= smgd [ri%10];delay(2);}if(knum==3){ wela=0;A=0;b=0;C=0; // 时P2= smgd [shi/10]&shan;delay(2);A=1;b=0;C=0;P2= smgd [shi%10]&shan;delay(2);}else{ wela=0;A=0;b=0;C=0; // 时P2= smgd [shi/10];delay(2);A=1;b=0;C=0;P2= smgd [shi%10];delay(2);}if(knum==2){ wela=0;A=0;b=1;C=0; // 分P2= smgd [fen/10]&shan;delay(2);A=1;b=1;C=0;P2= smgd [fen%10]&shan;delay(2);}else{ wela=0;A=0;b=1;C=0; // 分P2= smgd [fen/10];delay(2);A=1;b=1;C=0;P2= smgd [fen%10];delay(2);}if(knum==1){ wela=0;A=0;b=0;C=1; // 秒P2= smgd [miao/10]&shan;delay(2);A=1;b=0;C=1;P2= smgd [miao%10]&shan;delay(2);wela=1;A=1;b=1;C=1;}else{ wela=0;A=0;b=0;C=1; //秒P2= smgd [miao/10];delay(2);A=1;b=0;C=1;P2= smgd [miao%10];delay(2);wela=1;A=1;b=1;C=1;}}void key(){uchar temp;display();if(k1==0){delay1(20);if(k1==0){while(!k1);knum++;if(knum==8){knum=1;}}}if(k2==0){delay1(20);if(k2==0){while(!k2);knum--;if(knum==0){knum=7;}}}if(knum!=0){if(add==0){delay1(20);if(add==0){while(!add);switch(knum){case 1: miao++;if(miao==60){miao=0;}temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x80,temp);write_1302(0x8e,0x80); //打开写保护break;case 2:fen++;if(fen==60)fen=0;temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x82,temp);write_1302(0x8e,0x80); //打开写保护}break;case 3: shi++;if(shi==24){shi=0;}temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x84,temp);write_1302(0x8e,0x80); //打开写保护break;case 5:ri++;switch(yue){case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(ri==32)ri=1;break;case 4:case 6:case 9:case 11:if(ri==31)ri=1;break;case 2:if(nian%4==0||nian%400==0){if(ri==30)ri=1;}elseif(ri==29)ri=1;}break;}temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x86,temp);write_1302(0x8e,0x80); //打开写保护break;case 4:zhou++;if(zhou==8)zhou=1;temp=(zhou)/10*16+(zhou)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x8a,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护break;case 6: yue++;if(yue==13)yue=1;temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x88,temp);write_1302(0x8e,0x80); //打开写保护break;case 7:nian=(((nian>>4)&0x0f)*10+(nian&0x0f))+1;if(nian==99)nian=0;//temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x8c,((nian/10)<<4)+((nian%10)&0x0f)); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护break;}}if(sub==0){delay1(20);if(sub==0){while(!sub);switch(knum){case 1: miao--;if(miao==-1)miao=59;temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x80,temp);//write_1302(0x80,((miao/10)<<4)+((miao%10)&0x0f)); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护break;case 2:fen--;if(fen==-1)fen=59;temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x82,temp);//write_1302(0x82,((fen/10)<<4)+((fen%10)&0x0f)); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护}break;case 3:shi--;if(shi==-1)shi=23;temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x84,temp);//write_1302(0x84,((shi/10)<<4)+((fen%10)&0x0f)); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护break;case 5:ri--;switch(yue){case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(ri==0)ri=31;break;case 4:case 6:case 9:case 11:if(ri==0)ri=30;break;case 2:if(nian%4==0||nian%400==0){if(ri==0)ri=29;}else{if(ri==0)ri=28;}break;}temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x86,temp);//write_1302(0x86,((ri/10)<<4)+((ri%10)&0x0f)); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护break;case 4:zhou--;if(zhou==0)zhou=7;temp=(zhou)/10*16+(zhou)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x8a,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护break;case 6: yue--;//yue=(((yue>>4)&0x01)*10+(yue&0x0f))-1;if(yue==0)yue=12;temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x88,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护break;case 7:nian=(((nian>>4)&0x0f)*10+(nian&0x0f))-1;if(nian==-1)nian=99;//temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00); //允许写,禁止写保护write_1302(0x8c,((nian/10)<<4)+((nian%10)&0x0f)); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码write_1302(0x8e,0x80); //打开写保护break;}}}}}void main(){ds1302_init();IT0=1;EX0=1;TMOD=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;shan=0x00;temper();while(1){temper();for(q=0;q<230;q++)key();display();}}void int0() interrupt 0{TR0=~TR0;knum=0;shan=0x0ff;}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;if(tt==9){tt=0;shan=~shan;}}。

带温度显示万历--单片机课程设计

带温度显示万历--单片机课程设计

带温度显示万历–单片机课程设计简介本文主要介绍了一种基于单片机的温度显示器的设计和实现。

该温度显示器可以测量实时环境温度,并将其以数码管的形式显示出来。

本文将详细介绍该温度显示器的硬件设计和软件实现。

硬件设计硬件器材该温度显示器的硬件器材如下:•单片机:STC12C5A60S2•温度传感器:DS18B20•数码管:共阴数码管•其他器材:电位器、电容、电阻、继电器、发光二极管等硬件接口该温度显示器的硬件接口如下:•单片机示波器调试接口•温度传感器数据接口•数码管显示接口•控制继电器接口硬件连接•单片机接口和温度传感器通过单总线进行连接,组成温度传感器网络。

•数码管通过流水形式连接到单片机接口,组成显示器件。

•控制继电器接口将被控电源和功率电源进行连通。

软件实现软件设计软件设计涉及的主要程序如下:•温度采集程序•温度换算程序•温度显示程序•继电器控制程序温度采集程序该温度显示器通过单总线与DS18B20温度传感器进行连接,并通过单片机采集传感器的温度数据。

该温度采集程序可以实现DS18B20的初始化和温度数据采集,并将采集到的温度数据存储在内存中等待下一步处理。

温度换算程序由于STC12C5A60S2单片机与DS18B20温度传感器之间通过单总线进行连接,所以该温度数据被采集后需要进行换算。

该温度换算程序会将DS18B20传感器采集到的温度数据进行换算,并将结果存储在内存中等待下一步处理。

温度显示程序该温度显示程序主要用于将采集到的温度数据通过数码管进行显示。

该程序可以将内存中存储的温度数据进行转化,并通过数码管显示出来。

继电器控制程序由于该温度显示器还需要控制继电器,所以需要编写继电器控制程序。

该程序可以根据温度数据控制继电器的开关,以实现电源控制。

软件结构该温度显示器的软件共分为四部分,分别为温度采集程序、温度换算程序、温度显示程序和继电器控制程序。

这四个程序通过单片机进行交互和控制,最终实现温度的显示和电源的控制。

基于单片机带温度显示的电子万年历设计毕业设计

基于单片机带温度显示的电子万年历设计毕业设计

毕业设计基于单片机带温度显示的电子万年历设计单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC 卡、电子宠物等,这些都离不开单片机。

单片机是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。

本设计着重要描述的就是基于AT89S52的单片机的电子万年历。

本文首先描述系统硬件工作原理,随后说明了本系统所应用的各硬件接口技术(既芯片驱动程序)和各个接口模块的功能及工作过程。

本设计的主导思想是软硬件相结合来进行各功能模块的编写。

电子万年历以硬件C语言为主体进行软件设计,增加了程序的可读性和可移植性。

系统通过LCD液晶输出显示数据,可以显示当前时间、公农历日期、星期、温度,并附有以峰鸣器为提示的闹铃功能。

关键词:单片机电子万年历公农历接口模块C语言MCU rapid development of applied technology, we now live Looking at the various fields, from the missile's navigation devices, to the various instruments on the aircraft control, computer network communications and data transmission, industrial automation to the process of real-time control and data Processing, and we live in the extensive use of the smart IC cards, electronic pets, these are inseparable from the SCM. SCM is set CPU, RAM, ROM, timing, counting on one interface and a variety of microcontrollers.Its small size, low cost, feature strong, smart widely used in industry and industrial automation.This design is going to describing the calendar based on AT89S52. System hardware of main body is described first, Follow the function, principle of work and hardware interface (that means the chip’s drives) are introduced. The design‘s main ideas is that composes soft and hardware to achieve the design.The calendar is designed with hardware C language as the Realization tool, which increased procedure readability and transplanting. The system shows the output by LCD1602, which can demonstrate the current time, the lunar calendar date, the week, the temperature and the system, can alter people with a small sounder.Keywords: MCU Electronic calendar Lunar calendar Interface module C Language.摘要............................................................................................................................................ I I ABSTRACT .. (III)目录 (IV)引言 (1)1 系统方案设计 (2)1.1单片机芯片的选择方案 (2)1.2显示模块选择方案 (3)1.3时钟芯片的选择方案 (3)1.4温度传感器的选择方案 (4)1.5电路设计最终方案 (4)2 系统设计说明 (5)2.1硬件模块图 (5)2.2系统原理 (5)2.3系统的软件流程图 (6)3 系统单元模块设计 (7)3.1主控模块(AT89S52模块) (7)3.2DS1302时钟模块 (9)3.2.1DS1302简介 (9)3.2.2DS1302结构与工作原理 (10)3.2.3控制命令字节与寄存器 (11)3.2.4DS1302电路设计图 (16)3.3公历与农历、星期转换模块 (16)3.3.1概述 (16)3.3.2基本原理 (17)3.3.3程序流程图 (18)3.4DS18B20温度模块 (20)3.4.1概述 (20)3.4.2DS18B20的工作原理 (20)3.4.3DS18B20与单片机的接口设计 (25)3.4.4DS18B20程序设计方案 (26)3.5整点报时模块 (29)3.5.1概述 (29)3.5.2设计原理 (29)3.5.3整点报时电路设计图 (29)3.6时间可调模块 (30)3.6.1键盘扫描原理 (30)3.6.2按键说明 (30)3.6.3软件设计思路 (31)3.7LCD1602显示模块 (31)3.7.1概述 (31)3.7.2结构与工作原理 (31)3.7.3LCD1602电路设计图 (34)3.8电源部分 (35)结束语 (36)参考文献 (37)致谢 (38)附录........................................................................................................................................ - 1 -引言近年来,随着我国科技的不断发展,我国经济发展的支柱产业——电子产业获得长足发展,近年来各种电子产品琳琅满目,随处可见,随着电子产品的更新速度的加快,各种功能强大,款式新颖的电子产品不断问世。

具有温度指示的数字万年历设计方案

具有温度指示的数字万年历设计方案

具有温度指示的数字万年历设计方案1 绪论随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。

由其是单片机技术的应用产品已经走进了千家万户。

其中电子万年历就是一个典型的例子。

而且在万年历的基础上还可以扩展其它的实用功能,比如温度计。

万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。

因此,研究万年历及扩大其应用,有着非常现实的意义。

市场上有许多电子钟的专用芯片如:LM8363 、LM8365 等,但它们功能单一,电路连接复杂,不便于调试制作。

但是考虑到用单片机配合时钟芯片,可制成功能任意的电子钟,而且可以做到硬件简单、成本低廉。

所以本系统采用了以广泛使用的单片机AT89S52 技术为核心,配合时钟芯片DS1302 。

软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LCD 显示电路、键盘电路,使人机交互简便易行,此外结合音乐闹铃电路、看门狗和供电电路。

本方案设计出的数字钟可以显示时间、设置闹铃功能之外。

本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程, 其次,详细阐述了程序的各个模块和实现过程。

本设计以数字集成电路技术为基础,单片机技术为核心。

本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。

本设计中我重点研究实现了单片机+ 时钟芯片这种模式的万年历,从原理上对单片机和时钟芯片有了深一步的认识,这些基本功能完成后,在软件基础上实现时间显示。

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

设计报告万年历时钟的设计班级: 09光电<2>班专业:光电子技术姓名:阮军峰学号: 0906010234 完成日期:2011年06月11日一、设计目的:1、掌握C51程序用于实践并实现相应的功能;2、掌握时钟程序的使用方法;3、掌握时间函数的使用方法;4、掌握键盘的程序使用方法;二、设计任务:设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。

并能准确计算闰年闰月的显示。

三、设计要求:通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。

四、系统方案设计:1、系统总体设计:1) 原理构成框图本设计用STC89C51作为核心控制部分,外接晶振电路和74HC154,74LS138作为位选扩展电路,P3.0、 P3.1 、P3.2接三个个按钮作为时间调整部分,以两个17个数码管作为显示部分,P2口作为位选,P0口作为数据输出部分。

具体框图如图1所示:图1 原理框图2) 主程序的设计系统程序采用C语言按模块化方式进行设计,然后通过KeilC51L 软件开发平台将程序转变成十六进制程序语言,得到HEX文件,接着使用Proteous进行仿真,其次,按照Proteous的仿真电路图,在Protel99SE中完成电路板的逻辑布局及布线。

3) 时间调整电路的设计采用按键设计,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,按下模式可以选择年月日时分秒星期。

按下(+)(-)进行调试,程序如下:while(1){P3_0=1;if(P3_0==0){delay(10);if(P3_0==0)//如果按键被按下{Kdelay();if(P3_0==0)//确定按键按下{while(P3_0==0); // 等待按键放开cursor++;if(cursor>=9){cursor=0;}//如果cursor大于9则cursor=0if(P1_0==0){cursor=0;}} }}P3_1=1;if(P3_1==0){delay(10);if(P3_1==0) //如果按键被按下{Kdelay();if(P3_1==0) //确定按键按下{if(cursor==1){sec++;//如果cursor=1则按键按下秒数加一if(sec==60)sec=0;//如果秒数等于60秒则回到0开始}if(cursor==2){min++;//如果cursor=2则按键按下分数加一if(min==60)min=0; 如果分数等于60分则回到0开始}if(cursor==3){hour++;//如果cursor=3则按键按下时数加一if(hour==24)hour=0; //如果时数等于24时则回到0开始}if(cursor==4){day++;//如果cursor=4则按键按下天数加一if(day==31)day=0; //如果天数等于31天则回到0开始}if(cursor==5){month++;//如果cursor=5则按键按下月数加一if(month==13)month=0; //如果月数等于13月则回到0开始}if(cursor==6){yearl++;//如果cursor=6则按键按下年数低位加一if(yearl==100)yearl=0; //如果年数等于100则回到0开始}if(cursor==7){yearh++;//如果cursor=7则按键按下年数高位加一if(yearh==30)yearh=20; //如果年数大于30则回到0开始}if(cursor==8){week++;//如果cursor=8则按键按下星期数加一if(week==8)week=1; //如果星期数等于8则回到0开始}}while(P3_1==0);}}P3_2=1; //写入时先写1if(P3_2==0){//按键按下delay(10);//延时10个毫秒if(P3_2==0)//确定按键按下{Kdelay();if(P3_2==0){if(cursor==1){sec--;//如果cursor=1则按键按下秒数减一if(sec==0)sec=59; //如果秒数小于0则回到59开始}if(cursor==2){min--;//如果cursor=2则按键按下分数减一if(min==0)min=59; //如果分数小于0则回到59开始}if(cursor==3){hour--;//如果cursor=3则按键按下时数减一if(hour==0)hour=23; //如果时数小于0则回到23开始}if(cursor==4){day--;//如果cursor=4则按键按下天数减一if(day==0)day=31; //如果天数小于0则回到31开始}if(cursor==5){month--;//如果cursor=5则按键按下月数减一if(month==0)month=12; //如果月数小于0则回到12开始}if(cursor==6){yearl--;//如果cursor=6则按键按下年的低位数减一if(yearl==0)yearl=99; //如果年数小于0则回到99开始}if(cursor==7){yearh--;//如果cursor=7则按键按下年的高位数减一if(yearh==20)yearh=30; //如果年数小于0则回到30开始}if(cursor==8){week--;//如果cursor=8则按键按下秒星期减一if(week==0)week=7; //如果星期数小于0则回到7开始}while(P3_2==0);}}}i=ReadTemperature();所连线路和单片机接口仿真图如图3所示:图3 仿真按键4)温度采集部分:DS18B20温度传感器,测温范围-55℃~+125℃,固有测温分辨率0.5℃。

独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

DS18B20的采集数据通过DQ传入单片机,单片机读取数据后将数据输出!如图所示:程序如下:ReadOneChar(void){unsigned char i=0;// 定义i用于循环unsigned char dat = 0;// 读取的8位数据for (i=8;i>0;i--)//8次循环{DQ = 0;// 拉低DQ总线开始读时序dat>>=1;// dat左移一位DQ = 1; //释放DQ总线if(DQ)// 如果DQ=1,执dat|=0x80;(0x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat>>=1,循环8次结束,dat 即为读取的数据)//DQ=0,就跳过dat|=0x80;Tdelay(4);// 延时以完成此次读时序,之后再读下一数据}return(dat); 返回读取的dat}//写一个字节WriteOneChar(unsigned char dat){unsigned char i=0;//for (i=8; i>0; i--)//{DQ = 0;//DQ = dat&0x01;//Tdelay(5);//延时以完成此次读时序,之后再读下一数据DQ = 1;//dat>>=1;//}}//读取温度ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;//Init_DS18B20();WriteOneChar(0xCC);// 写指令,跳过ROM,WriteOneChar(0x44);// 启动温度转换Init_DS18B20();WriteOneChar(0xCC);// 写指令,跳过ROM,WriteOneChar(0xBE);// 写指令,读暂存存储器a=ReadOneChar();//读低8位b=ReadOneChar();//读高8位t=b;//t<<=8;//t=t|a;//tt=t*0.0625;//t= tt*10+0.5;//return(t); //获得0.01°C 的精度并返回}5) LED数码管的选择LED数码管分为共阴和共阳两种,以利用STC89C51的P0口作为LED显示的数据部分,以P2口的七个口作为显示部分的位选,通过三八译码器和4-16译码器扩展为17位的位选分别接在一个四位数码管和13个数码管的位选部分。

详细电路图如图4-5所示:程序如下:P2=0xF0;P0=L1;delay(1); //yearh P2=0xF1;P0=L2;delay(1); //yearhif(cursor==8){P2=0x1F|a;P0=L17;delay(1);}else{P2=0x1F;P0=L17;delay(1);}//weekif(cursor==6){P2=0xF2|a;P0=L3;delay(1);}else{P2=0xF2;P0=L3;delay(1);} //yearlif(cursor==6) {P2=0xF3|a;P0=L4;delay(1);}else{P2=0xF3;P0=L4;delay(1);} //yearlif(cursor==5) {P2=0xF4|a;P0=L5;delay(1);}else{P2=0xF4;P0=L5;delay(1);} //monthif(cursor==5) {P2=0xF5|a;P0=L6;delay(1);}else{P2=0xF5;P0=L6;delay(1);} //monthif(cursor==4) {P2=0xF6|a;P0=L7;delay(1);}else{P2=0xF6;P0=L7;delay(1);} //dayif(cursor==4) {P2=0xF7|a;P0=L8;delay(1);}else{P2=0xF7;P0=L8;delay(1);} //dayP2=0xFF;if(cursor==3) {P2=0xF8|a;P0=L9;delay(1);}else{P2=0xF8;P0=L9;delay(1);} //hourif(cursor==3) {P2=0xF9|a;P0=L10;delay(1);else{P2=0xF9;P0=L10;delay(1);} //hourif(cursor==2) {P2=0xFA|a;P0=L11;delay(1);}else{P2=0xFA;P0=L11;delay(1);} //minif(cursor==2) {P2=0xFB|a;P0=L12;delay(1);}else{P2=0xFB;P0=L12;delay(1);} //minif(cursor==1) {P2=0xFC|a;P0=L13;delay(1);}else{P2=0xFC;P0=L13;delay(1);} //secif(cursor==1)P2=0xFD|a;P0=L14;delay(1);}else{P2=0xFD;P0=L14;delay(1);} //secP2=0xFE;P0=L15;delay(1); //tempP2=0x0F;P0=L16;delay(1); //tempP2=0xFF;}图5 日期显示6) 仿真实验整个电路仿真图如下图6所示所示:图6 仿真电路图7) 实物的制作与调试(1)原理图的绘制与PCB的制作(2)原理图的绘制(3)在Protel99se中先新建一个工程,把所需要的元件载入到文档里面。

相关文档
最新文档