单片机技术万年历项目设计方案_第1页
单片机技术万年历项目设计方案_第2页
单片机技术万年历项目设计方案_第3页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机技术万年历项目设计方案1 绪论1.1 背景及意义在当代繁忙的工作生活中, 时间与我们每一个人都有非常密切的关系, 每个 人都受时间的影响。 随着社会科技的发展, 人类得知时间, 能够了解其他与人类 密切相关的信息,比如温度,星期等。电子万年历诞生了,它集时间、日期、星 期和温度功能于一身, 具有读取方便、 电路简洁等诸多优点。 随着大规模集成电 路的出现,给人类生活带来了许多改变。 尤其是单片机技术, 嵌入式产品的普及, 各类应用产品已经走进千家万户。 电子万年历的出现给人们的生活带来了诸多的 方便,现在内嵌于各种电子产品中,具有广阔的市场前景。目前的万年历功能扩展了诸如定时自动报警、

2、闹钟、定时广播、 自动启闭路 灯、定时开关烤箱、开断各种家庭电气等。但是所有的功能,都是以钟表数字化 为基础的。因此,万年历的扩展功能及其应用十分丰富。中国电子产业发展 出 现的问题中, 许多情况不容乐观, 如产业结构不合理, 产业集中于劳动密集型产 品。技术密集型产品明显落后于发达国家。 生产要素决定性作用正在削弱, 产业 能源消耗大、产出率低、坏境污染等。随着科技的快速发展,时间的流逝,从观太阳,摆钟到现在电子钟,人类不 断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰 年补偿等多种功能。对于电子万年历采用直观的LCD液晶显示,可同时显示年、月、日、时、分、秒和温度等

3、信息,还具有时间校准等功能。此万年历具有读取方便,显示直观,功能多样,电路简洁,成本低廉等诸多 优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2 设计主要工作万年历系统基本方案选择与论证, 硬件电路的设计与实物制作, 各模块软件 编写与调试等是设计的几个主要工作。分别要对核心控制芯片、显示器、温湿度传感器、时钟芯片、控制键盘等进 行选择论证,得出最终总体设计方案。硬件电路以AT89S52单片机最小系统做基 础,外加多个相应扩展电路模块, 构成万年历系统。 外围模块分别是 ISP 下载模 块、LCD12864液晶显示器模块、DS1302时钟模块、DHT11温湿度传感模块、红 外遥控模

4、块(接收电路模块 ,传输电路模块 ,中央控制器 (8031), 信号调理电路模 块,数据存储和应用程序)等。软件采用C语言程序设计,对各模块用Keil软件 在计算机上分别进行设计调试, 得出结果。 各模块软件设计成功之后, 再对其进 行模块化,最终将各模块组合得到系统总的软件设计程序。2 设计思想与方案2.1 设计思想 万年历是单片机控制技术的一个具体应用,为了实现系统的大众化,界面的 友好性出发。主要研究内容包括以下几个方面:(1)根据选用的万年历设计外围电路确定单片机接口电路。(2)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简 单。(3)在设计时尽可能减小硬件电路的复杂度,

5、 能用程序设计实现就采用程 序设计进行。(4)根据硬件电路,在万能板上完成器件的焊接。(5)根据单片机的接口电路,编写控制 AT89S52芯片的程序。( 6) 通过编程、编译、调试,把程序烧入单片机上运行,并测试其功能。(7) 在软件程序设计时,尽量考虑提高人机交互界面的友好,方便用户操 作等因素。2.2 设计方案及原理按照系统设计的要求和功能, 将系统分为单片机模块、 下载电路、 复位电路、晶振电路、LCD显示模块、电源电路几个模块,系统框图如图1所示。供电模块/ LCD显示模块红外模块下载电路单片机模块晶振电路复位电路图1系统框架图万年历系统的工作原理:单片机控制电路,显示电路以及红外遥控

6、电路。由 单片机控制的万年历以及时间显示,当时间及秒计数计满60时就向分进位,分计数器计满60分后向时计数器进位,小时计数器按“ 24翻1”规律计数。时、 分、秒的计数结果经过数据处理可直接送显示器显示。当计时发生误差的时候可以用校时电路进行校正。时计数器计满 24小时后自动向日计数器进一,日计数 器由平年、闰年的28/30/31对大、小月和二月的判断应与当月相应的日期相一 致,当日计数器计满时,向月计数器进位,月计数器计满12月向年计数器进位, 当年计数器计满100时所以计数器清零。设计采用的是年、月、日和时、分、秒、 星期显示,所以在单片机通过对数据处理进行同时在液晶上显示。3 系统硬件的

7、设计3.1 主要器件介绍3.1.1 AT89S52 单片机AT89S52单片机是Atmel公司制造的,其片内ROM全部采用Flash存储器, 具有8KBROM存储空间,可以工作在3V的超低电压环境中,并且与 MCS-51系列 单片机完全兼容, 它具备 ISP 在线编程技术, 可以实现在设计中对修改后程序擦 除与烧入。设计采用的是双列直插式 AT89S52单片机,并运用活扣锁紧座,方便 对芯片进行拔插,以防止对芯片的机械损坏,方便设计使用。AT89S52单片机共40个引脚,4个I/O 口线,每个口线都有8位,同时具有 3 个定时器 /计数器, 2 个数据指针,串行通信线路形式是全双工形式。除此之

8、外,单片机还有两种节电模式。在空闲模式情况下,CPL是停止工作的,但是其内部模块仍然可以继续工作,如RAM定时器/计数器、串口以及中断等都可以工作。在使用掉电保护情况下,单片机会把RAM的内容保存好,振荡 器将会停止工作, 这就意味着单片机会停止所有工作, 要想重新开始工作就要等 到下一个中断或者硬件复位信号到来。如图 2为AT89S52单片机的引脚图。fl.:.1PLl RHRM£UPl.CfT7GXD MCU 2D3%PJ JKL1P3 7P1 0?0 2PL1PO.JPl_2Pti.4PI3Pll.5P1APD.fiP:.5T0.7Pl .6Pl.7P2.0P2.LP'

9、-P2.2P23 P2AP3.4(T0P2_5P3.5CTI)P2.fiP2.7X2XLPJOiKXD) 芦:iTXD)RESCETvccF-.7( KU JALEPRCXiPSEXAT89Si:图2 AT89S52单片机的引脚图0 41 ? P9 PSENPJ-?Q PO.C5 Pi-I -/ PU.2P2.0ED尹-10 PO 匕P£L IJ 1 .L3.1.2 LCD12864液晶显示屏LCD12864显示屏是FYD12864-0402B型一种,它本身不能发光显示,显示原 理是反射自然光而形成字符显示。液晶显示模块有多种接口方式,如:2线或3线串行以及4位或8位并行等接口方式,

10、它的PSB引脚可控制并行和串行通信方 式,PSB引脚接高电平进行并行通信,接低电平进行串口通信,通过对其灵活的 接线和指令操作就能完成。内部配置了 16 * 16点的汉字共8192个,此外,还配 置了 8个6 * 8分ASCII字符集、内部存在的简化汉字点阵图形都是属于国家一 级和二级标准的,显示分辨率为128*64。液晶显示屏显示字符方便人们清晰地观 察,并可对其软硬件进行方便的调试工作。 通过各方面比较,其硬件电路的搭建 也比其他相同类型的显示器电路要简单,价格也较便宜,并且它还具有低电压、 低功耗、高清显示等显著优点。实物图外观如图3所示。图3 LCD12864液晶显示屏时钟芯片DS13

11、02芯片来产自DALLAS公司,设计中使用3.6 V锂电池对其涓流充电提 供电源。它共有八个引脚,各引脚分别是供电、连接外部时钟信号、接收复位信 号、与单片机进行串口通信等功能,与单片机相连的引脚有三个,分别是CE复位引脚,I/O数据线引脚和CLK串行时钟引脚。它内部具有完整的时钟和日历以 及31字节静态RAM等信息,通过单片机与其通信,采集时间数据,然后对数据 进行处理,就能得到各种时间信息。时钟有12/24小时格式,通过对AM/PM!行 指示,就能选择想要设定的格式,一般选用 24小时制。DS1302时钟芯片的最大 特点之一,是它除了能对每个月的天数进行调整,还能对闰年天数进行自动调整,

12、这样就减少了软硬件上的复杂度。硬件设计比较简单,只需给DS1302芯片提供工作的正常电压和正常时钟信号即可。并且它还具有高精度、低功耗等特点,在 进行工作时功耗小于1mW/它的引脚图排列如图4所示。2234红外接收头Vccldo" I SCID 1 2 N zv > J y- y (DS1302CLKI/OCE图4 DS1302引脚图红外接收头HS0038采用一体化设计,具有对信号放大、检波、整形等一系 列功能,从而产生需要的TTL电平的编码信号。它采用黑色环氧树脂封装,日光、紫外光、电灯荧光等自然光源对其一般产生不了干扰。 同时它还具有磁屏蔽功能, 其周围的磁场对其也没有影响

13、。 以上设计使它具有非常高的灵敏度, 还能接收较 远距离的信号,一般接收距离可达35m左右。它有三个引脚,分别是接5V电源、 接地以及解调信号输出引脚。它的管脚排列如图 5所示。图5 HS0038 管脚图图 5 蜂鸣器3.2 硬件单元电路的设计3.2.1 直流稳压电源电路万年历系统的各个模块的功能实现首先必须要有一个稳定可靠的电源, 能够 让各个模块稳定的工作。为了能方便获取所需电压 +5V,采用变压器将市电电压 降压至12V交流电,然后通过整流、滤波、稳压、滤波给系统提供稳定的电源。 电路原理图详见附录。电源电路先选用电源变压器变比 K=220V/12V将电网电压降到12V,降压后 的交流电

14、压通过整流电路变换为单向脉动电压。 其整流元件如: 晶体二极管、 电 子二极管或晶闸管等构成整流桥(选取全桥正向电流为2A,耐压值为25V即可)。 整流后的电压再经过滤波器减小其脉动程度以符合负载的需要。 滤波电路一般由 电容(取2200pF即可)组成,利用电容充放电的原理把脉动电压中大部分纹波 加以滤除得到较平滑的直流电压。 将滤波后的直流电压通过稳压电路, 一般采用 稳压芯片(LM7805等)的方式以得到稳定的直流输出电压。最后在经过一道滤 波电路(一般取0.1 yF电容)使得电压的纹波更加稳定。3.2.2 AT89S52 单片机最小系统 一块单片机的最小系统包括:一个可靠的电源(直流稳压

15、电源) 、一个稳定的晶体震荡电路、 复位电路、 下载电路。 通过以上组合的单片机系统才能正常的 按照所写的程序来执行操作。( 1 )下载电路万年历系统选择的单片机是AT89S52所以下载方式为ISP下载,即在线编 程,可直接将单片机电路制作好, 通过计算机完成烧写程序。 同时也可以采用下 载电路对系统供电。ISP下载是基于串行传输方式,并且符合 SPI协议。下载电 路如图 6 所示。vcc<iND图6 ISP下载电路(2)晶振电路单片机只有满足相应的时钟信号才能进行工作,晶振电路结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个 基础上的,晶振的提供的

16、时钟频率越高,那单片机的运行速度也就越快。 通过在 AT89S52的XI、X2引脚上接入12MHZ勺石英晶振外加两个负载电容器(电容器根 据经验一般取30pF)组成的电路为单片机提供时钟信号。采用12MHZ勺晶振能更 好的实现对万年历的走时功能,所以使用12MHZ勺晶体晶振为系统单片机提供必 要的时钟信号。时钟电路如图7所示。CICapXI33pF_rHviT 12MHZ X2fMC2rIICapGND33pF图7晶振电路(3)复位电路单片机复位有上电复位、按键复位,当出现死机和运行错误的时候一般采用 按键方式对单片机进行复位操作。万年历的复位信号产生使用上电加按键复位, 当系统上电时,按键并

17、联的电解电容(取 22卩F)开始充电,单片机复位引脚为 高电平,电容充电完成后由于电容的特性,复位引脚被下拉电阻(取1KQ)拉为低电平。根据电容容值的选择可确定电容充电时间,完成复位操作。往后系统正常运行,可使用按下按键由电阻(200Q和1KQ)分压得到约4.17V的电压, 符合TTL (Transistor-Transistor Logic,晶体管-晶体管逻辑电平)逻辑高,使得复位引脚进行复位操作。复位电路图如图 8所示图8复位电路323 红外模块电路红外模块电路由红外发射电路、红外接收电路和红外遥控器组成。红外发射 电路部分由一个发射管、2个9012三极管和4个4.7K的电阻组成,发射管在

18、发 射数据的过程中,将会达到几十mA的电流,也就是说发射功率会达到mW级。但 是其自身并不能达到发射功率的要求,还需要借助9012三极管,放大电流驱动红外发射管,才能达到基本发射要求。一般情况下,信号会被调制在38KHZ的载 波上,然后,由红外发射管将已调制的信号发送出去。故载波由单片机定时器产 生提供。红外接收电路部分由1个红外接收器、1个100UF电解电容、1个200Q电 阻和1个100UF的瓷片电容组成。其采用的集成红外接收器,即一体化红外信号 接收头HS0038它集红外接收、放大信号、信号整形与处理功能于一身。通常 不需要外部其他设备,就能实现红外接收等工作。例如:输出TTL电平。它只

19、有3个引脚,分别是电源、公共地以及脉冲信号输出。红外接收器将接收到的红外 信号进行解调,然后直接送至单片机进行信号处理。INFIN引脚与单片机P3.2相连,通过单线传输接收到的红外信号。红外键盘即为红外遥控器,它及多种模块电路和程序存储器于一体, 通过计 算机编程技术就能在系统中实现相应的键值功能,其具有远距离操作、操作简单、 传输信号快等特点。红外模块电路如图 9所示。图9红外模块电路324显示电路12864 液晶是一种具有4位/8位并行,2线或3线串行多种接口方式,内部 含有国标一级,二级简体文字库的点阵图形液晶显示模块:其显示分辨率为128X 64,内置128个16*16点文字,和128

20、个16*8点ASCII字符集,利用该模块 灵活的接口方式和简单,方便的操作指令,可构成全中文人机交互图形界面。 可 以显示8X 4行16X 16点阵的汉字,也可完成图形显示。低电压低功耗是其又一 其基本特性如下:低电源电压(VDD +3.0+5.5V)显示分辨率:128X 64点内置汉字字库,提供8192个16X 16点阵汉字内置128个16X 8点阵字符2MHZ寸钟频率显示方式:STN,半透,正显驱动方式:1/32DUTY 1/5BIAS视角方向:6点背光方式:侧部高亮白色LED功耗仅为普通的LED的1/5 1/10通讯方向:串行,并行可选内置DC DC转换电路,无需外加负压无需片选信号,简

21、化软件设计工作温度:零度到55度,存储温度:负20度到60度。而本设计将采用的是并行接口,及见图10所示。图10 128 X 64液晶电路我们用单片机来进行控制。它可以很直观的用来显示年、月、日、时、分、秒及 星期,单片机与LCD的接口电路如图11所示。'XFAI1xrALJRS7P1.0IT2 pi irraEM P1J2P1JPI 4PI .5PI .is PI I罚 O JADD PaiJApI paan? 阖U嵐M 30 4JAM 刊土uaSO fl JADEPCI7JAP7P?DM6 P2IA9P2咖IP2 iW ? i=2 5fA13 P2咖斗 S=2TW15P3.MXDP

22、3.MXD FJ.21NT0 对4llPS.t/ARR3H莎3Z亠35胆£32ttrrrrrrH图11接口电路3.3 原理图见附录A3.4 元器件清单 见附录C4 系统的软件设计4.1 主程序设计软件部分主要有以下模块程序设计:LCD12864液晶显示程序、日期及时间 显示程序、时间调整程序、红外接收程序等。设计主程序包括系统初始化、 判按键状态、 日期及时间设置等。 主程序流程 图如图 12 所示序、清屏处理、显示处理等。液晶显示程序流程图如图13所示。图12主程序流程图4.2 子程序设计在进行程序开发时,不可以随意设计,需要对系统进行整体分析,考虑系统 板上的硬件资源,得出多种方

23、案,以最优方案进行设计。在软件设计过程中,选 择模块化的设计方法,依次为每一个模块进行软件设计,这样不仅方便设计者对 程序设计和修改,还方便阅读者读懂程序。接下来将分别介绍各个模块的程序设 计。4.2.1 液晶显示程序设计液晶显示LCD12864有两种工作方式:并行通信方式和串行通信方式。设计采用串行通信工作方式。软件设计包括系统初始化、液晶初始化、液晶读/写时图13液晶显示流程图422 日期及时间程序的设计单片机从DS1302时钟芯片的寄存器中读取数据,通过LCD12864将数据显示 出来。在软件设计的过程中,需要编写DS1302的初始化程序,读/写时序和液晶显 示模块程序。单片机与时钟芯片

24、通信过程中,时钟周期表现为上升沿时序 ,紧随 其后的是一个下降沿。数据在上升沿期间输入,在下降沿期间输出。数据需保持 正确。复位端为低电平时,将终止所有数据的传输。I/O 口线呈高阻态。日期及 时间程序设计流程图如图14所示。4.2.3 红外接收程序设计系统程序设计要求就是把接收到的红外信号进行解码,采用软件编程把接收到的信息解码。解码系统分别由单片机定时器、夕卜部中断以及软件的红外遥控接 收等程序组成。测量两个脉冲串间的间隔由单片机的定时器来完成,红外脉冲信号接收由接收器完成,利用外部中断触发定时器,之后接收管接收到脉冲信号, 触发外部中断可用程序实现。外部中断启动定时器,在时间间隔的同时,

25、进行采 样,采样脉冲代码存储到RAM变量中。红外接收器使用集成 HS0038接收头。程 序设计部分分别是中断初始化、接收数据及键码处理等。红外接收流程图如图15所示。开始读取DS130秒值Y ID丁2|时钟芯片关闭.N写入允许写入初始化时间写入禁止r获取时钟芯片时间T时间、日期转化为液晶显示J图14日期及时间程序设计流程图图15红外接收流程图4.2.4 时间调整程序的设计时间调整用红外键盘控制, 就需要编写相应的调整程序。 当要对时间调整时, 首先进入设置时间程序,按数字键“ 1”则就可以进入,通过按键“ EQ就可以 对相应的年、月、日、时、分、秒、星期等具体时间进行选择,按 10个数字键 0

26、、1、2、3、4、5、6、7、8、9 就可对其具体调整,调整完成后可选择按键“ CH” 确认进入显示程序,或者按键“ -”返回设置和运行程序。为了保证以上指令的 有效实现, 还需要在程序设计中屏蔽掉红外键盘上其他没有用到的按键, 否则会 对操作产生一定的影响。在时间调整的过程中, 为了与没有调整的时间区别开来, 还设置了调整闪烁 的功能, 直到调到下一位, 才取消闪烁。 闪烁功能的原理是根据每个调整位的需 要,对其送亮灭的指令信息。间隔时间为50ms禾I用定时器的溢出标志位,当发现定时器溢出时,送“熄灭”字符指令,等到下一次溢出时,再送“亮”的字 符指令,这样,依次进行不断交替循环,直到调整位

27、结束。时间调整程序流程图 如图 16 所示。5系统调试及结果分析5.1 系统调试随后在计算把每个电路模块与单片机最小系统连接起来,组成万年历系统机上安装ISP在线下载器驱动,把万年历系统板与计算机通过下载线相连, 给系 统上电,打开程序下载软件(progisp),选择单片机AT89S52并调入Flash文 件,点击自动,程序就被下载进入单片机了。拔掉下载线,使用 USE电源线给系 统板供电。观察现象,得出结论。5.2 系统调试结果系统上电后,液晶显示器上显示主界面“”等字符,接着自动跳入菜单栏界 面。显示主界面如图17所示。历历历 iWF年示 万万万显仃历 養运农 12 3图17显示主界面图通

28、过红外遥控器选择对系统进行时间校正,按数字键 1进入万年历设置界面,按数字键2可进入万年历运行界面,按数字键3可进入万年历农历显示界面按下数字键1,进入设置万年历,对现有的时间显示进行调整,完成后按确认键“CH。返回菜单栏界面,按下数字键2,进入运行万年历就能显示所有的信息。 设置和运行界面如图22所示。200901 月 EIL 日 阳时BO分师秒 星期J f 确认CH EQ劈滋月ZS日15时32分2妙严护日图18 设置和运行界面5.3 设计结论万年历系统经调试,测试后,完成了年、月、日、时、分、秒的显示和走时, 而且可以任意设置成想要的日期和时间。 并且还额外添加了温度检测,温度上限 报警的

29、功能。由上述运行结果分析来看各项要求足以满足设计任务书的要求。5.4 设计课题的误差缺陷和改进分析在万年历系统中的走时模块是使用的单片机内部的定时计数器,所以系统的时间在经过校正后还是有一定误差。所以在实际应用中最好是使用一块实时时钟 芯片进行走时。相对于定时器误差较小。系统的时间一旦掉电后就会造成丢失, 也是可以通过一块实时时钟芯片解决。万年历系统中欢迎界面的持续时间存在一定误差, 系统中欢迎界面的维持是 通过纯延时的方式实现,所以有一定误差。在高级应用中添加实时时钟芯片进行走时误差还是存在,这是不允许的,这 时还可以添加自动校正时间模块。目前自动校正的方法大致有:使用 WiFi 无线 网络

30、获取网络时间、使用有线网络获取网络时间、使用GPS获取当地时间、使用 FM调频收音机获取整点时间等等。通过以上方式获取的时间与系统运行的时间 进行校正。5.5 设计体会万年历系统的设计是对课堂学习效果的检验, 同时也是对自身自学能力的检 验。回顾起此次单片机课程设计,至今我仍感慨颇多,从理论到实践,可以学到 很多很多的的东西, 同时不仅可以巩固了以前所学过的知识, 而且学到了很多在 书本上所没有学到过的知识。 通过这次课程设计使我懂得了理论与实际相结合是 很重要的, 只有把所学的理论知识与实践相结合起来, 从理论中得出结论, 才能 真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。结

31、束语通过对设计进行了研究背景及意义的分析, 了解了研究的主要工作, 论证了 系统的基本方案并进行了方案选择, 还给出了硬软件各模块的设计方案, 得出了 总体设计方案。在研究的过程中通过对硬件设计仿真, 模块调试,最终设计出了系统硬件实 物。对各模块编写了相应的程序软件并对其进行调试, 分别得出各模块结果。 把 各模块软件组合成了万年历系统软件, 下载到实物中, 得出了最终结果。 系统能 显示基本时间信息, 并能较准确的对时间进行调整, 还能显示出实时环境的温湿 度,基本满足了设计要求。 但是由于知识水平和时间等各方面的局限, 在系统设 计的过程中还存在一些不足, 如阴阳历的转换及显示, 温湿度

32、报警设定等其他一 些模块,都未能实现。总体来说,设计基本完成了设计任务。参考文献1 蒋敏.单片微机万年历设计J.职大学报,2000.81872 王锐.基于单片机的万年历设计J.信息技术,2014.2132163 查荣.基于单片机的多功能万年历的设计 J. 信息技术, 2012.1371394 周杏鹏.现代检测技术 M. 第二版.北京:高等教育出版社, 189 张俊.匠人手记M.北京:北京航空航天大学出版社,20084155170 宋雪松.手把手教你学51单片机M.北京:清华大学出版社,2014.1882387 李广弟.单片机基础M.第3版.北京:北京航空航天大学出版社,2003.6.99 15

33、68 李全利 . 单片机原理及应用( C51 编程) M. 北京:高等教育出版社,2169 李钢.1-Wire总线数字温度传感器 DS18B2C原理及应用J.现代电子技术,2005.777910 马忠梅.单片机的C语言应用程序设计M.第4版.北京:北京航空航天大 学出版社, 172致谢本设计是在贾雅琼教授的悉心指导下完成的, 感谢老师表示忠心的感谢和崇 高的敬意。 感谢我的父母对我的培育。 同时还要感谢所有的同学, 他们也给了我 很大的支持和帮助。 最后,感谢老师能在百忙之中对我的论文进行审察, 由于本 人知识有限,不足之处在所难免,还请老师指正。见下页附录原理图附录B:元器件清单表1万年历元

34、器件清单元件名称兀件参数数量时钟电源3.6V1电解电容22uF2瓷片电容33pF2发光二极管1ISP下载口1排阻470 Q1温湿度传感器DHT111一体化红外接收头HS00381晶振12M1晶振32.678K1开关6角1按键1单片机AT89S521液晶LCD128641时钟芯片DS13021电阻1K4电阻200 Q1电阻4.7K4排阻10K3电位器50K1附录C: 万年历实物图附录D:程序清单/*课题名称:万年历作 者:凌昇 完成时间: 2015年 7月功 能:完成万年历的时间显示、农历转换、调整时间等功能。使用说明:LCD12864阵SCLK(E连至P37,点阵SID(RW连至P36,点阵C

35、S(RS)连至P35,ds1302的SCk接单片机的P0A0,SDA接P0A1,RST接单片机的P0A2;型 号 :AT89S52 使用晶振为 12MHz main.c*/#include<reg52.h>#include<intrins.h>#include"lcd12864.h"#include"ds1302.h"#include"hongwai.h"#include"delay.h"#define uchar unsigned char#define uint unsigned int

36、uchar IR_buf4;bit timer_flag;uchar timer_data7=13,6,4,17,23,58,46;/ 年周月日时分秒ucharfind_year3,find_month3,find_day3,find_hour3,find_minute3,fi nd_second3;uchar weektable14=" 一二三四五六日 "uchar week_scan3;ucharfind_hongwai10=0x16,0x0c,0x18,0x5e,0x08,0x1c,0x5a,0x42,0x52,0x4a;uchar find_data3;/* 函数名

37、 : void timer_chuli(void)*功能 :处理读取的BCD码转换成十进制* 输入参数:无* 输出参数:无*/void timer_chuli(void)find_year0=timer_data0/16+'0'find_year1=timer_data0%16+'0'find_year2='0'/ 年 分离出十位/ 年 分离出个位find_month0=timer_data2/16+'0' find_month1=timer_data2%16+'0' find_month2='0'

38、/ 月 分离出个位/ 月 分离出十位find_day0=timer_data3/16+'0' find_day1=timer_data3%16+'0' find_day2='0'/ 日 分离出十位 / 日 分离出个位find_hour0=timer_data4/16+'0' /find_hour1=timer_data4%16+'0' /时 分离出个位 时 分离出十位find_hour2='0'find_minute0=timer_data5/16+'0'/ 分 分离出十位/ 分 分

39、离出个位/ 秒 分离出个位/ 秒 分离出十位find_minute1=timer_data5%16+'0'find_minute2='0'find_second0=timer_data6/16+'0' find_second1=timer_data6%16+'0' find_second2='0'void find_zhuanhuan(void)timer_data0=(timer_data0/16)*10+timer_data0%16;timer_data1=(timer_data1/16)*10+timer_d

40、ata1%16;timer_data2=(timer_data2/16)*10+timer_data2%16;timer_data3=(timer_data3/16)*10+timer_data3%16;timer_data4=(timer_data4/16)*10+timer_data4%16;timer_data5=(timer_data5/16)*10+timer_data5%16;timer_data6=(timer_data6/16)*10+timer_data6%16;* 函数名* 功能 :* 输入参数: void InitTimer0(void) 初始化定时器 1无* 输出参数:

41、无*'void InitTimer0(void)EA = 1;ET1 = 1;TMOD |= 0x10;TH1=(65536-50000)/256;TL1=(65536-50000)%256;void data_chuli(uchar src)find_data0=src/16+'0'find_data1=src%16+'0'find_data2='0'year_panduan(void)uchar year;year=20*100+timer_data0;if( (0 = year%4)&&(0 != year%100)

42、 |(0 = year %400) ) return 1;/ 满足该条件的 yeat 就是闰年。return 0;uchar month_panduan(void)uchar M;M=timer_data2;switch(M)case 1: return 1;case 2:return 2;case 3:return 3;case 4:return 4;case 5:return 5;case 6:return 6;case 7:return 7;case 8:return 8;case 9:return 9;case 10:return 10;case 11:return 11;case 1

43、2:return 12;return 0;void week_huansuan(void)uchar c,y,m,d,w;c=20;y=timer_data0;m=timer_data2;d=timer_data3;w=(c/4)-2*c+y+(y/4)+(26*(m+1)/10)+d-1)%7;timer_data1=w;week_scan0=weektable2*(timer_data1-1);week_scan1=weektable2*(timer_data1-1)+1;week_scan2='0'lcd12864_display(3,3,week_scan);*刘mai

44、n()uchar k,cent,i,h,h1,Y,m; lcd12864_init(); init_INT0();InitTimer0(); Delay_ms(1800); send_command(0x01);TR1=1;while(1)k=IR_buf2;IR_buf2=0;switch(k)case 0x00:lcd12864_display(1,3,"lcd12864_display(2,2,"1.基本万年历 "); 设置万年历");lcd12864_display(3,2,"2.运行万年历");break;case 0x0c

45、:send_command(0x01);read_rtc();lcd12864_display(1,1,"20lcd12864_display(2,3,"日"); 时 分 秒 ");年月lcd12864_display(3,1,"lcd12864_display(4,1,"星期"); 返回-");lcd12864_display(4,4,"确认 CH");lcd12864_display(4,8,"EQ");timer_chuli();lcd12864_display(1,2

46、,find_year);lcd12864_display(1,4,find_month);lcd12864_display(1,6,find_day);lcd12864_display(2,3,find_hour);lcd12864_display(2,5,find_minute);lcd12864_display(2,7,find_second);week_scan0=weektable2*(timer_data1-1);week_scan1=weektable2*(timer_data1-1)+1;week_scan2='0'find_zhuanhuan();lcd1286

47、4_display(3,3,week_scan);cent=0;switch(cent)while(1)case 0:while(1)send_command(0x81); send_command(0x0d); k=IR_buf2; IR_buf2=0;if(k=0x46)|(k=0x07) break; if(k=0x09)cent=1; break;for(i=0;i<10;i+)if(find_hongwaii=k) h<<=4; h+=i;data_chuli(h);lcd12864_display(1,2,find_data);timer_data0=(h/16)

48、*10+h%16;Y=year_panduan();if(timer_data2=2)if(timer_data3>28)timer_data3=28;if(Y=0)week_huansuan();break;break;case 1: h=0;while(1)send_command(0x83);send_command(0x0d); k=IR_buf2; IR_buf2=0;if(k=0x46)|(k=0x07)break; if(k=0x09) cent=2; break; if(k=0x16)|(k=0x0c)|(k=0x18)|(k=0x5e)|(k=0x08)|(k=0x1c

49、)|(k=0x5a)|(k=0x42)|(k=0x52)|(k=0x4a)for(i=0;i<10;i+)if(find_hongwaii=k)h<<=4;h+=i;h1+; if(h1=2)h1=0;if(h>0x12)h=0x12;data_chuli(h);lcd12864_display(1,4,find_data);timer_data2=(h/16)*10+h%16;break;week_huansuan();break;case 2: h=0;while(1)if(k=0x46)|(k=0x07)send_command(0x85); send_comma

50、nd(0x0d); k=IR_buf2; IR_buf2=0;break;if(k=0x09)cent=3;break;if(k=0x16)|(k=0x0c)|(k=0x18)|(k=0x5e)|(k=0x08)|(k=0x1c)|(k=0x5a)|(k=0x42)|(k=0x52)|(k=0x4a)for(i=0;i<10;i+)if(find_hongwaii=k)h<<=4; h+=i; h1+;if(h1=2)h1=0;m=month_panduan();if(m=1)|(m=3)|(m=5)|(m=7)|(m=8)|(m=10)|(m=12) if(h>0x31)h=0x31;if(m=2)Y=year_panduan();if(Y=1)if(h>0x29)h=0x29;if(Y=0)if(h>0x28)h=0x28; if(m=4)|(m=6)|(m=9)|(m=11)if(h>0x30)h=0x30;data_chuli(h);lcd12864_display(1,6,find_data);timer_data3=(h/16)*10+h%16;week_huansuan();break; break;case 3: h=0;while(1)send_command(0x92); send_command(0x0d); k=I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论