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

下载本文档

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

文档简介

单片机技术万年历项目设计方案1 绪论1.1 背景及意义在当代繁忙的工作生活中,时间与我们每一个人都有非常密切的关系,每个人都受时间的影响。随着社会科技的发展,人类得知时间,能够了解其他与人类密切相关的信息,比如温度,星期等。电子万年历诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、电路简洁等诸多优点。随着大规模集成电路的出现,给人类生活带来了许多改变。尤其是单片机技术,嵌入式产品的普及,各类应用产品已经走进千家万户。电子万年历的出现给人们的生活带来了诸多的方便,现在内嵌于各种电子产品中,具有广阔的市场前景。目前的万年历功能扩展了诸如定时自动报警、闹钟、定时广播、自动启闭路灯、定时开关烤箱、开断各种家庭电气等。但是所有的功能,都是以钟表数字化为基础的。因此,万年历的扩展功能及其应用十分丰富。中国电子产业发展出现的问题中,许多情况不容乐观,如产业结构不合理,产业集中于劳动密集型产品。技术密集型产品明显落后于发达国家。生产要素决定性作用正在削弱,产业能源消耗大、产出率低、坏境污染等。随着科技的快速发展,时间的流逝,从观太阳,摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。对于电子万年历采用直观的LCD液晶显示,可同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。此万年历具有读取方便,显示直观,功能多样,电路简洁,成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2 设计主要工作 万年历系统基本方案选择与论证,硬件电路的设计与实物制作,各模块软件编写与调试等是设计的几个主要工作。分别要对核心控制芯片、显示器、温湿度传感器、时钟芯片、控制键盘等进行选择论证,得出最终总体设计方案。硬件电路以AT89S52单片机最小系统做基础,外加多个相应扩展电路模块,构成万年历系统。外围模块分别是ISP下载模块、LCD12864液晶显示器模块、DS1302时钟模块、DHT11温湿度传感模块、红外遥控模块(接收电路模块,传输电路模块,中央控制器(8031),信号调理电路模块,数据存储和应用程序)等。软件采用C语言程序设计,对各模块用Keil软件在计算机上分别进行设计调试,得出结果。各模块软件设计成功之后,再对其进行模块化,最终将各模块组合得到系统总的软件设计程序。2 设计思想与方案2.1 设计思想万年历是单片机控制技术的一个具体应用,为了实现系统的大众化,界面的友好性出发。主要研究内容包括以下几个方面:(1) 根据选用的万年历设计外围电路确定单片机接口电路。(2) 在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。(3) 在设计时尽可能减小硬件电路的复杂度,能用程序设计实现就采用程序设计进行。(4) 根据硬件电路,在万能板上完成器件的焊接。(5) 根据单片机的接口电路,编写控制AT89S52芯片的程序。(6) 通过编程、编译、调试,把程序烧入单片机上运行,并测试其功能。(7) 在软件程序设计时,尽量考虑提高人机交互界面的友好,方便用户操作等因素。2.2 设计方案及原理按照系统设计的要求和功能,将系统分为单片机模块、下载电路、复位电路、晶振电路、LCD显示模块、电源电路几个模块,系统框图如图1所示。 图1 系统框架图万年历系统的工作原理:单片机控制电路,显示电路以及红外遥控电路。由单片机控制的万年历以及时间显示,当时间及秒计数计满60时就向分进位,分计数器计满60分后向时计数器进位,小时计数器按“24翻1”规律计数。时、分、秒的计数结果经过数据处理可直接送显示器显示。当计时发生误差的时候可以用校时电路进行校正。时计数器计满24小时后自动向日计数器进一,日计数器由平年、闰年的28/30/31对大、小月和二月的判断应与当月相应的日期相一致,当日计数器计满时,向月计数器进位,月计数器计满12月向年计数器进位,当年计数器计满100时所以计数器清零。设计采用的是年、月、日和时、分、秒、星期显示,所以在单片机通过对数据处理进行同时在液晶上显示。3 系统硬件的设计3.1 主要器件介绍3.1.1 AT89S52单片机AT89S52单片机是Atmel公司制造的,其片内ROM全部采用Flash 存储器,具有8KB ROM存储空间,可以工作在3V的超低电压环境中,并且与MCS-51系列单片机完全兼容,它具备ISP在线编程技术,可以实现在设计中对修改后程序擦除与烧入。设计采用的是双列直插式AT89S52单片机,并运用活扣锁紧座,方便对芯片进行拔插,以防止对芯片的机械损坏,方便设计使用。AT89S52单片机共40个引脚,4个I/O口线,每个口线都有8位,同时具有3个定时器/计数器,2个数据指针,串行通信线路形式是全双工形式。 除此之外,单片机还有两种节电模式。在空闲模式情况下,CPU是停止工作的,但是其内部模块仍然可以继续工作,如RAM、定时器/计数器、串口以及中断等都可以工作。在使用掉电保护情况下,单片机会把RAM的内容保存好,振荡器将会停止工作,这就意味着单片机会停止所有工作,要想重新开始工作就要等到下一个中断或者硬件复位信号到来。如图2为AT89S52单片机的引脚图。图2 AT89S52单片机的引脚图3.1.2 LCD12864液晶显示屏LCD12864显示屏是FYD12864-0402B型一种,它本身不能发光显示,显示原理是反射自然光而形成字符显示。液晶显示模块有多种接口方式,如:2线或3线串行以及4位或8位并行等接口方式,它的PSB引脚可控制并行和串行通信方式,PSB引脚接高电平进行并行通信,接低电平进行串口通信,通过对其灵活的接线和指令操作就能完成。内部配置了16 * 16点的汉字共8192个,此外,还配置了8个6 * 8分ASCII字符集、内部存在的简化汉字点阵图形都是属于国家一级和二级标准的,显示分辨率为128*64。液晶显示屏显示字符方便人们清晰地观察,并可对其软硬件进行方便的调试工作。通过各方面比较,其硬件电路的搭建也比其他相同类型的显示器电路要简单,价格也较便宜,并且它还具有低电压、低功耗、高清显示等显著优点。实物图外观如图3所示。图3 LCD12864液晶显示屏3.1.3 DS1302时钟芯片DS1302芯片来产自DALLAS公司,设计中使用3.6 V锂电池对其涓流充电提供电源。它共有八个引脚,各引脚分别是供电、连接外部时钟信号、接收复位信号、与单片机进行串口通信等功能,与单片机相连的引脚有三个,分别是CE复位引脚,I/O 数据线引脚和CLK串行时钟引脚。它内部具有完整的时钟和日历以及31字节静态RAM等信息,通过单片机与其通信,采集时间数据,然后对数据进行处理,就能得到各种时间信息。时钟有12/24小时格式,通过对AM/PM进行指示,就能选择想要设定的格式,一般选用24小时制。DS1302时钟芯片的最大特点之一,是它除了能对每个月的天数进行调整,还能对闰年天数进行自动调整,这样就减少了软硬件上的复杂度。硬件设计比较简单,只需给DS1302芯片提供工作的正常电压和正常时钟信号即可。并且它还具有高精度、低功耗等特点,在进行工作时功耗小于1mW。它的引脚图排列如图4所示。图4 DS1302引脚图3.1.4 HS0038红外接收头红外接收头HS0038采用一体化设计,具有对信号放大、检波、整形等一系列功能,从而产生需要的TTL电平的编码信号。它采用黑色环氧树脂封装,日光、紫外光、电灯荧光等自然光源对其一般产生不了干扰。同时它还具有磁屏蔽功能,其周围的磁场对其也没有影响。以上设计使它具有非常高的灵敏度,还能接收较远距离的信号,一般接收距离可达35m左右。它有三个引脚,分别是接5V电源、接地以及解调信号输出引脚。它的管脚排列如图5所示。图5 HS0038管脚图图5 蜂鸣器3.2 硬件单元电路的设计3.2.1 直流稳压电源电路万年历系统的各个模块的功能实现首先必须要有一个稳定可靠的电源,能够让各个模块稳定的工作。为了能方便获取所需电压+5V,采用变压器将市电电压降压至12V交流电,然后通过整流、滤波、稳压、滤波给系统提供稳定的电源。电路原理图详见附录。电源电路先选用电源变压器变比K=220V/12V,将电网电压降到12V,降压后的交流电压通过整流电路变换为单向脉动电压。其整流元件如:晶体二极管、电子二极管或晶闸管等构成整流桥(选取全桥正向电流为2A,耐压值为25V即可)。整流后的电压再经过滤波器减小其脉动程度以符合负载的需要。滤波电路一般由电容(取2200pF即可)组成,利用电容充放电的原理把脉动电压中大部分纹波加以滤除得到较平滑的直流电压。将滤波后的直流电压通过稳压电路,一般采用稳压芯片(LM7805等)的方式以得到稳定的直流输出电压。最后在经过一道滤波电路(一般取0.1F电容)使得电压的纹波更加稳定。3.2.2 AT89S52单片机最小系统一块单片机的最小系统包括:一个可靠的电源(直流稳压电源)、一个稳定的晶体震荡电路、复位电路、下载电路。通过以上组合的单片机系统才能正常的按照所写的程序来执行操作。(1)下载电路万年历系统选择的单片机是AT89S52,所以下载方式为ISP下载,即在线编程,可直接将单片机电路制作好,通过计算机完成烧写程序。同时也可以采用下载电路对系统供电。ISP下载是基于串行传输方式,并且符合SPI协议。下载电路如图6所示。图6 ISP下载电路(2)晶振电路单片机只有满足相应的时钟信号才能进行工作,晶振电路结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。通过在AT89S52的X1、X2引脚上接入12MHz的石英晶振外加两个负载电容器(电容器根据经验一般取30pF)组成的电路为单片机提供时钟信号。采用12MHz的晶振能更好的实现对万年历的走时功能,所以使用12MHz的晶体晶振为系统单片机提供必要的时钟信号。时钟电路如图7所示。图7 晶振电路(3)复位电路单片机复位有上电复位、按键复位,当出现死机和运行错误的时候一般采用按键方式对单片机进行复位操作。万年历的复位信号产生使用上电加按键复位,当系统上电时,按键并联的电解电容(取22F)开始充电,单片机复位引脚为高电平,电容充电完成后由于电容的特性,复位引脚被下拉电阻(取1K)拉为低电平。根据电容容值的选择可确定电容充电时间,完成复位操作。往后系统正常运行,可使用按下按键由电阻(200和1K)分压得到约4.17V的电压,符合TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑电平)逻辑高,使得复位引脚进行复位操作。复位电路图如图8所示。图8 复位电路3.2.3 红外模块电路红外模块电路由红外发射电路、红外接收电路和红外遥控器组成。红外发射电路部分由一个发射管、2个9012三极管和4个4.7K的电阻组成,发射管在发射数据的过程中,将会达到几十mA的电流,也就是说发射功率会达到mW级。但是其自身并不能达到发射功率的要求,还需要借助9012三极管,放大电流驱动红外发射管,才能达到基本发射要求。一般情况下,信号会被调制在38KHz的载波上,然后,由红外发射管将已调制的信号发送出去。故载波由单片机定时器产生提供。红外接收电路部分由1个红外接收器、1个100UF电解电容、1个200电阻和1个100UF的瓷片电容组成。其采用的集成红外接收器,即一体化红外信号接收头HS0038。它集红外接收、放大信号、信号整形与处理功能于一身。通常不需要外部其他设备,就能实现红外接收等工作。例如:输出TTL电平。它只有3个引脚,分别是电源、公共地以及脉冲信号输出。红外接收器将接收到的红外信号进行解调,然后直接送至单片机进行信号处理。INFIN引脚与单片机P3.2相连,通过单线传输接收到的红外信号。红外键盘即为红外遥控器,它及多种模块电路和程序存储器于一体,通过计算机编程技术就能在系统中实现相应的键值功能,其具有远距离操作、操作简单、传输信号快等特点。红外模块电路如图9所示。图9 红外模块电路3.2.4 显示电路 12864液晶是一种具有4位/8位并行,2线或3线串行多种接口方式,内部含有国标一级,二级简体文字库的点阵图形液晶显示模块:其显示分辨率为12864,内置128个16*16点文字,和128个16*8点ASCII字符集,利用该模块灵活的接口方式和简单,方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字,也可完成图形显示。低电压低功耗是其又一其基本特性如下: 低电源电压(VDD:+3.0+5.5V) 显示分辨率:12864点内置汉字字库,提供8192个1616点阵汉字内置128个168点阵字符2MHZ时钟频率显示方式:STN ,半透,正显驱动方式:1/32DUTY,1/5BIAS视角方向:6点背光方式:侧部高亮白色LED,功耗仅为普通的LED的1/51/10通讯方向:串行,并行可选内置DCDC转换电路,无需外加负压无需片选信号,简化软件设计工作温度:零度到55度,存储温度:负20度到60度。而本设计将采用的是并行接口,及见图10所示。图10 12864液晶电路我们用单片机来进行控制。它可以很直观的用来显示年、月、日、时、分、秒及星期,单片机与LCD的接口电路如图11所示。 图11 接口电路3.3 原理图见附录A3.4 元器件清单见附录C4 系统的软件设计4.1 主程序设计软件部分主要有以下模块程序设计:LCD12864液晶显示程序、日期及时间显示程序、时间调整程序、红外接收程序等。设计主程序包括系统初始化、判按键状态、日期及时间设置等。主程序流程图如图12所示。图12 主程序流程图4.2 子程序设计在进行程序开发时,不可以随意设计,需要对系统进行整体分析,考虑系统板上的硬件资源,得出多种方案,以最优方案进行设计。在软件设计过程中,选择模块化的设计方法,依次为每一个模块进行软件设计,这样不仅方便设计者对程序设计和修改,还方便阅读者读懂程序。接下来将分别介绍各个模块的程序设计。4.2.1 液晶显示程序设计液晶显示LCD12864有两种工作方式:并行通信方式和串行通信方式。设计采用串行通信工作方式。软件设计包括系统初始化、液晶初始化、液晶读/写时序、清屏处理、显示处理等。液晶显示程序流程图如图13所示。图13 液晶显示流程图4.2.2 日期及时间程序的设计单片机从DS1302时钟芯片的寄存器中读取数据,通过LCD12864将数据显示出来。在软件设计的过程中,需要编写DS1302的初始化程序,读/写时序和液晶显示模块程序。单片机与时钟芯片通信过程中,时钟周期表现为上升沿时序,紧随其后的是一个下降沿。数据在上升沿期间输入,在下降沿期间输出。数据需保持正确。复位端为低电平时,将终止所有数据的传输。I/O口线呈高阻态。日期及时间程序设计流程图如图14所示。4.2.3 红外接收程序设计系统程序设计要求就是把接收到的红外信号进行解码,采用软件编程把接收到的信息解码。解码系统分别由单片机定时器、外部中断以及软件的红外遥控接收等程序组成。测量两个脉冲串间的间隔由单片机的定时器来完成,红外脉冲信号接收由接收器完成,利用外部中断触发定时器,之后接收管接收到脉冲信号,触发外部中断可用程序实现。外部中断启动定时器,在时间间隔的同时,进行采样,采样脉冲代码存储到RAM变量中。红外接收器使用集成HS0038接收头。程序设计部分分别是中断初始化、接收数据及键码处理等。红外接收流程图如图15所示。图14 日期及时间程序设计流程图图15 红外接收流程图 4.2.4 时间调整程序的设计时间调整用红外键盘控制,就需要编写相应的调整程序。当要对时间调整时,首先进入设置时间程序,按数字键“1”则就可以进入,通过按键“EQ”就可以对相应的年、月、日、时、分、秒、星期等具体时间进行选择,按10个数字键0、1、2、3、4、5、6、7、8、9就可对其具体调整,调整完成后可选择按键“CH”确认进入显示程序,或者按键“-”返回设置和运行程序。为了保证以上指令的有效实现,还需要在程序设计中屏蔽掉红外键盘上其他没有用到的按键,否则会对操作产生一定的影响。在时间调整的过程中,为了与没有调整的时间区别开来,还设置了调整闪烁的功能,直到调到下一位,才取消闪烁。闪烁功能的原理是根据每个调整位的需要,对其送亮灭的指令信息。间隔时间为50ms,利用定时器的溢出标志位,当发现定时器溢出时,送“熄灭”字符指令,等到下一次溢出时,再送“亮”的字符指令,这样,依次进行不断交替循环,直到调整位结束。时间调整程序流程图如图16所示。图16 时间调整程序流程图5 系统调试及结果分析5.1 系统调试 把每个电路模块与单片机最小系统连接起来,组成万年历系统。随后在计算机上安装ISP在线下载器驱动,把万年历系统板与计算机通过下载线相连,给系统上电,打开程序下载软件(progisp),选择单片机AT89S52,并调入Flash文件,点击自动,程序就被下载进入单片机了。拔掉下载线,使用USB电源线给系统板供电。观察现象,得出结论。5.2 系统调试结果系统上电后,液晶显示器上显示主界面“”等字符,接着自动跳入菜单栏界面。显示主界面如图17所示。图17 显示主界面图通过红外遥控器选择对系统进行时间校正,按数字键1进入万年历设置界面,按数字键2可进入万年历运行界面,按数字键3可进入万年历农历显示界面。按下数字键1,进入设置万年历,对现有的时间显示进行调整,完成后按确认键“CH”。返回菜单栏界面,按下数字键2,进入运行万年历就能显示所有的信息。设置和运行界面如图22所示。图18 设置和运行界面5.3 设计结论 万年历系统经调试,测试后,完成了年、月、日、时、分、秒的显示和走时,而且可以任意设置成想要的日期和时间。并且还额外添加了温度检测,温度上限报警的功能。由上述运行结果分析来看各项要求足以满足设计任务书的要求。5.4 设计课题的误差缺陷和改进分析在万年历系统中的走时模块是使用的单片机内部的定时计数器,所以系统的时间在经过校正后还是有一定误差。所以在实际应用中最好是使用一块实时时钟芯片进行走时。相对于定时器误差较小。系统的时间一旦掉电后就会造成丢失,也是可以通过一块实时时钟芯片解决。万年历系统中欢迎界面的持续时间存在一定误差,系统中欢迎界面的维持是通过纯延时的方式实现,所以有一定误差。在高级应用中添加实时时钟芯片进行走时误差还是存在,这是不允许的,这时还可以添加自动校正时间模块。目前自动校正的方法大致有:使用WiFi无线网络获取网络时间、使用有线网络获取网络时间、使用GPS获取当地时间、使用FM调频收音机获取整点时间等等。通过以上方式获取的时间与系统运行的时间进行校正。5.5 设计体会万年历系统的设计是对课堂学习效果的检验,同时也是对自身自学能力的检验。回顾起此次单片机课程设计,至今我仍感慨颇多,从理论到实践,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。结束语 通过对设计进行了研究背景及意义的分析,了解了研究的主要工作,论证了系统的基本方案并进行了方案选择,还给出了硬软件各模块的设计方案,得出了总体设计方案。在研究的过程中通过对硬件设计仿真,模块调试,最终设计出了系统硬件实物。对各模块编写了相应的程序软件并对其进行调试,分别得出各模块结果。把各模块软件组合成了万年历系统软件,下载到实物中,得出了最终结果。系统能显示基本时间信息,并能较准确的对时间进行调整,还能显示出实时环境的温湿度,基本满足了设计要求。但是由于知识水平和时间等各方面的局限,在系统设计的过程中还存在一些不足,如阴阳历的转换及显示,温湿度报警设定等其他一些模块,都未能实现。总体来说,设计基本完成了设计任务。参考文献1 蒋敏.单片微机万年历设计J.职大学报,2000.81872 王锐.基于单片机的万年历设计J.信息技术,2014.2132163 查荣.基于单片机的多功能万年历的设计J.信息技术,2012.1371394 周杏鹏.现代检测技术M.第二版.北京:高等教育出版社,2010.7.1491895 张俊.匠人手记M.北京:北京航空航天大学出版社,2008.4.1551706 宋雪松.手把手教你学51单片机M.北京:清华大学出版社,2014.1882387 李广弟.单片机基础M.第3版.北京:北京航空航天大学出版社,2003.6. 991568 李全利.单片机原理及应用(C51编程)M.北京:高等教育出版社,2012.12.1152169 李钢.1-Wire总线数字温度传感器DS18B20原理及应用J.现代电子技术,2005.777910 马忠梅.单片机的C语言应用程序设计M.第4版.北京:北京航空航天大学出版社,2003.6.143172 致 谢本设计是在贾雅琼教授的悉心指导下完成的,感谢老师表示忠心的感谢和崇高的敬意。感谢我的父母对我的培育。同时还要感谢所有的同学,他们也给了我很大的支持和帮助。最后,感谢老师能在百忙之中对我的论文进行审察,由于本人知识有限,不足之处在所难免,还请老师指正。附 录附 录 A 原理图见下页附 录B:元器件清单 表1 万年历元器件清单元件名称元件参数数量时钟电源3.6V1电解电容22uF2瓷片电容33pF2发光二极管1ISP下载口1排阻4701温湿度传感器DHT111一体化红外接收头HS00381晶振12M1晶振32.678K1开关6角1按键1单片机AT89S521液晶LCD128641时钟芯片DS13021电阻1K4电阻2001电阻4.7K4排阻10K3电位器50K1 附 录 C: 万年历实物图 附 录D:程序清单/*课题名称:万年历作 者:凌昇完成时间:2015年7月功 能:完成万年历的时间显示、农历转换、调整时间等功能。使用说明:LCD12864点阵SCLK(E)连至P37,点阵SID(RW)连至P36,点阵CS(RS)连至P35,ds1302的SCk接单片机的P00,SDA接P01,RST接单片机的P02;型 号 :AT89S52 使用晶振为12MHzmain.c */#include#include#includelcd12864.h#includeds1302.h#includehongwai.h#includedelay.h#define uchar unsigned char#define uint unsigned intuchar IR_buf4;bit timer_flag;uchar timer_data7=13,6,4,17,23,58,46;/年周月日时分秒uchar find_year3,find_month3,find_day3,find_hour3,find_minute3,find_second3;uchar weektable14=一二三四五六日;uchar week_scan3;uchar find_hongwai10=0x16,0x0c,0x18,0x5e,0x08,0x1c,0x5a,0x42,0x52,0x4a;uchar find_data3;/*函数名 :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;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;/分 分离出十位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_data1%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*输入参数:无*输出参数:无*/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) |(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 12: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);/* 下面是主函数 */main()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:send_command(0x01);read_rtc();lcd12864_display(1,1,20 年 月 日);lcd12864_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,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;f

温馨提示

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

评论

0/150

提交评论