电子万历设计(李建明)副本_第1页
电子万历设计(李建明)副本_第2页
电子万历设计(李建明)副本_第3页
电子万历设计(李建明)副本_第4页
电子万历设计(李建明)副本_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、湖南文理学院课程设计报告课程名称: 单片机课程设计 专业班级: 自动化10101班 37 学生姓名: 李建明 指导教师: 王南兰 完成时间: 2013年 6 月 12 日 报告成绩: 评阅意见: 评阅教师 日期 2013.6.20 电 子 万 年 历 设 计电子万年历目 录一、设计题目1二、设计要求1三、设计作用与目的2四、所用设备及软件24.1 软件24.2 硬件2五、系统设计方案35.1 系统总体设计35.2 系统硬件设计35.2.1 单片机最小系统电路35.2.2 按键输入部分电路45.2.3 数码管动态显示电路45.2.4 DS1302时钟电路55.3 系统软件设计65.3.1 接口说

2、明65.3.2 系统程序设计6六、实验调试结果8七、设计心得107.1 设计总结107.2 致谢10参考文献11附录1:系统总体结构电路原理图12附录2:程序清单13一、设计题目随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的

3、走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步。我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场以STC89C51RD+单片机作为主控核心,与时钟芯片DS1302、按键、LED显示等模块组成硬件系统。在硬件系统中设有独立按键和LED显示器,能显

4、示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间等。综上所述此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。二、设计要求本电子时钟能动态显示年、月、日、小时、分钟、秒,能够随时设置调整时间。整个系统整个系统由外部+5V直流电源供电。在控制模块上设有5个独立按键,时钟模块由DS1302实现,显示部分由八位七段数码管动态显示。系统上电后数码管将显示“HELLO”。通过显示切换键SB2、调整键SB3、加键SB4、减键SB5对年、月、日、小时、分钟、秒进行设置。通过设置切换键SB6确认后写入DS1302中。数码管将

5、从设置的时间开始动态显示时间。通过SB6键可以随时调整时间。三、设计作用与目的系统的设计主要利用STC89C51RD+单片机完成简易电子万年历的设计。通过对整个系统的分析与设计,完成从理论知识到实践应用的过度,掌握基于单片机的产品设计与开发的相关理念,学会利用单片机完成简单的电子系统的设计与制作。学会C语言的编程应用,培养良好的编程风格,掌握相关的编程或仿真软件的使用。基于STC89C51RD+单片机的电子万年历的设计,掌握简单的电子时钟运行原理,掌握51单片机最小系统的设计与常见人机接口电路的设计,懂得简单电子电路的设计,掌握51单片机内部资源的使用,了解51单片机的外部结构与内部结构之间的

6、关系,并能编程实现单片机的各部分相关功能。四、所用设备及软件 基于STC89C51RD+单片机的,涉及到相关的软件和硬件。4.1 软件系统设计主要使用到的软件有Keil C51、Protel 99SE等。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。 Protel 99SE是ProklTechnology公司

7、开发的基于Windows环境下的电路板设计软件。该软件功能强大,人机界面友好,易学易用,仍然是大中专院校电学专业必学课程,同时也是业界人士首选的电路板设计工具。Protel 99SE 由两大部分组成:电路原理图设计(Advanced Schematic)和多层印刷电路板设计(Advanced PCB)。其中Advanced Schematic由两部分组成:电路图编辑器(Schematic)和元件库编辑器(Schematic Library)。4.2 硬件硬件主要用到的是个人计算机及51单片机开发板完成。在有完善的理论分析与设计后,制作硬件实物则需要以下硬件支持。51单片机、DS1302芯片、电

8、阻、电容、发光二级管、晶振、按键、数码管、万能板、杜邦线、电烙铁、焊锡等。五、系统设计方案5.1 系统总体设计整个设计分为四大模块,STC89C51RD+单片机作为核心控制模块,独立键盘 ( 显示切换键SB2、调整按键SB3、加按键SB4、减按键SB5、设置切换键SB6) 作为输入模块,DS1302作为时钟模块,八位数码管及五个按键指示LED灯作为输出模块。系统结构框图图1 电子万年历结构框图显示切换键SB2调整按键SB3加按键SB4减按键SB5设置切换键SB6STC89C51RD+单片机数码管显示LED灯显示DS1302如图 1 所示。5.2 系统硬件设计图2 单片机最小系统电路按照系统设计

9、功能的要求,系统由主控模块、时控模块、及显示模块和键盘接口模块共4个模块组成。主控芯片使用51系列STC89C51RD+单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。显示模块采用普通的共阴极极八位LED数码管。5.2.1 单片机最小系统电路单片机最小系统包括电源,复位电路,振荡电路。单片机最小系统“最小”就是指一个单片机能开始独立工作所需的最基本的外部电路。具体是指VCC脚接电源,GND接地,接好晶振,连上RC复位电路,另外值得注意的是在不需要扩展外部存储器的情况下EA脚接高电平,具体电路如图2所示。图中的MAX232芯片是转串口芯片,下载程

10、序时用。单片机的RST脚是高电平复位,电路采用上电复位和手动复位的两种复位接法。晶振电路选择晶振一般为12M,若用到单片机的串行口通信,则一般选择11.0592M的晶振。主芯片是1系列STC89C51RD+单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统的51单片机。图3按键输入部分电路5.2.2 按键输入部分电路按键输入部分采用五个独立按键接到单片机的P1口。独立按键又加查询式按键。查询式按键是各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他I/O口线上按键的工作状态。查询式按键电路配置灵活,软件结构简单。实际制作过程中

11、,按键的位置可以任意放置,但是每个按键的接线端必须按照按键的功能连接要正确,不能错乱。在使用按键时需要对其消抖。具体电路如图3所示。5.2.3 数码管动态显示电路七段数码管一般由八个发光二极管组成,其中由七个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。当发光二极管导通时,相应的点或一个笔画发关。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单使用也方便。发光二极管的阳极连接在一起的称为共阳极数码管,阴极连接在一起的称为共阴极数码管。设计中采用共阴极的数码管,段显示由单片机的P0口控制,P0口做为输出口需要接上拉电阻

12、。位选由单片机的P2口的前三位控制。P2口的前三位连接74LS138译码器实现对八位数码管的位选控制。数码管的显示分为动态显示与静态显示。设计中采用数码管的动态显示。动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各

13、个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。5.2.4 DS1302时钟电路DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或

14、RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。图4 DS1302时钟电路图DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元

15、,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。DS1302与单片机的电路连接图如图4所示。DS1302与微处理器之间采用同步串行的方式进行通信,有三个口线:RST复位、I/O数据线、SCLK串行时钟。芯片中RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。图中的五个LED灯用于指示按键是否按下,当按键按下时对应的LED灯亮,松手时LED灯灭。5.3 系统软件设计系统采用模块化编程,各部分相互独立又紧密联系。许

16、多程序太长或太复杂,很难写在单一单元中。如果把代码分为较小的功能单元,将大大简化编程过程。模块化程序一般比单块程序容易编写、调试和修改。模块化编程方法类似于包含大量电路的硬件设计。器件或程序在逻辑上被分为多个“黑箱子”,这些黑箱子都有指定的输入和输出。只要把各个单元之间的接口定义好,各个单元的详细设计就可以独立进行了。5.3.1 接口说明系统接口定义如表1所示。表1 系统接口定义引脚名单片机引脚功能说明备注P0P0.0P0.7连接数码管的段位控制段显示P1_0P1.0显示切换键输入口P1_1P1.1调整键输入口P1_2P1.2加按键输入口P1_3P1.3减按键输入口P1_4P1.4设置切换键输

17、入口T_CLKP1.6DS1302时钟线接口T_IOP3.5DS1302数据线接口T_RSTP1.7DS1302复位线接口LED1P1.5指示按键SB2接口LED2P3.2指示按键SB3接口LED3P3.3指示按键SB4接口LED4P3.4指示按键SB5接口LDE5P3.7指示按键SB6接口P2_0P2.074LS138 A口线接口P2_1P2.174LS138 B口线接口P2_2P2.274LS138 B口线接口图5 主流程图N程序开始按键扫描按键按下?按键处理子程序确认键?DS1302子程序显示当前设置时间YYN5.3.2 系统程序设计基于STC89C51RD+单片机的电子万年历的主函数执

18、行的是:函数初始化、扫描按键设置初始时间、将设置的时间写入DS1302中、显示时间。函数流程图如图5所示。任何程序开的开始都是从main函数开始执行的,一个程序也只能有一个main函数。主程序如下:main() while(1) SET_time(); /设置时间 Write_1302(); Run_DS1302();/运行1302并显示 设计,列出部分主要的子程序。其中主要包含的子程序有按键扫描子程序、数码管显示子程序、DS1302时钟数据写子程序、DS1302时钟数据读取子程序、延时子程序等等。2读数据子程序。下面是写DS1302流程图与读DS1302流程图。程序开始写命令字节一位复位端变

19、高启动一次数据传送工作时钟线发脉冲够8次了?写数据字节一位时钟线发脉冲够8次了?复位端变低中断服务结束YYNN图6 写DS1302流程图程序开始写命令字节一位复位端变高启动一次数据传送工作时钟线发脉冲够8次了?读数据字节一位时钟线发脉冲够8次了?复位端变低中断服务结束YYNN图7 读DS1302流程图写一个字节到DS1302子程序如下:/* 名称 : v_W1302(uchar ucAddr, uchar ucDa)* 功能 : 往DS1302写入数据* 输入 : ucAddr: DS1302地址, ucDa: 要写的数据* 返回值 : 无*/void v_W1302(uchar ucAddr

20、, uchar ucDa)T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); / 写地址 _nop_();_nop_();v_RTInputByte(ucDa); / 写1Byte数据T_CLK = 1;T_RST = 0;从DS1302中读取一个字节数据程序如下:/* 名称 : uc_R1302(uchar ucAddr)* 功能 : 读取DS1302某地址的数据* 输入 : ucAddr: DS1302地址* 返回值 : ucDa :读取的数据*/uchar uc_R1302(uchar ucAddr)uchar ucDa;T_RST

21、= 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); /写地址,命令_nop_();_nop_();ucDa = uc_RTOutputByte(); /读1Byte数据T_CLK = 1;T_RST = 0;return(ucDa);六、实验调试结果图8 复位后数码管显示通过前期的硬件电路的设计与软件设计后。开始进行程序编写,并通过51开发板进行调试。经过不断修改错误,终于达到了预期目的。上电后的结果如图8所示。单片机上电图9 未手动设置的时间后将显示“HELLO”。接下来可以对DS1302的时间进行设置。未手动设置时的时间。如图9所示。第一排表示年、

22、月、日。显示当前DS1302内读出的年、月、日(2013年6月8日)。通过按键SB2可切换到显示时、分、秒。第二排显示的是当前DS1302内读出的时、分、秒(8时51分24秒)。通过按键SB2、SB3、SB4、SB5、SB6对DS1302内的时间进行设置图10是设置后的时间。图10 手动设置的时间七、设计心得7.1 设计总结基于51单片机的电子万年历电路是单片机控制系统中单片微型机应用与设计的重要组成部分。电子万年历的控制电路由按键输入部分、单片机控制部分、显示以及DS1302时钟部分组成。按键输入是通过五个独立按键实现,五个独立按键用于对初始时间进行设置。在按键输入部分要注意对按键进行消抖处

23、理。对于硬件电路的制作,还要考虑到数码管的排放位置,要便于时间观看。单片机控制部分要求合理使用单片机的内部资源,控制逻辑清晰。在基于51单片机的电子万年历电路设计中,从总体上来看,整个设计能达到预期的设计要求,但是也有许多需要改进的地方如。通过本次单片机课程的学习与基于51单片的电子万年历的设计,把理论用到实践中去,动手动脑解决学习过程中遇见的问题,巩固与加强相关的知识,学会做人做事,培养刻苦专研的精神,为未来的工作与生活打下坚实的基础。7.2 致谢经过一段时间的单片机课程设计后,我成功的完成了电子万年历控制电路的设计。在设计过程中,虽然遇到很多麻烦,花了大量时间去调试,但是最终我还是完成了电

24、路的设计任务。由此我知道,做好每一件事,必须要有耐心、信心、决心,以及严谨的态度。在这过程中有时候没时间吃饭,没时间睡觉,我还是坚持下来了,因为在背后一直有鼓励我、支持我的家人。非常感谢父母给我生命,在这二十多年里,不辞劳苦的养育我,给我进入大学学习的机会,我将用我一辈子的收获来回报父母的恩情。接下来的岁月里,我已经长大,我该用我的行动来报答父母的恩情。这次设计能够完成与湖南文理学院电气与信息工程学院为我们提供了一个良好的学氛围和学习条件是分不开的。感谢那些在为学生操劳的老师们,是你们让我的大脑更加的充实。在此特别感谢我的指导老师王文虎老师。王老师不仅在专业知识上指导我如何去学习,如何更有效的

25、掌握专业知识技能,同时也向我们传递着学习的精神-严谨认真。他秉承着授之以鱼不如授之以渔的教学理念指导我如何将理论知识上升到基本技能,如何将理论与实际应用相结合,让我感受到了不一样的学习理念。在这次课程设计过程中还有一帮朋友给了我莫大的帮助。在此感谢肖京学姐教我如何做word的文档,感谢言超学长对我Protel99SE绘图方面的指导,感谢马庆修长在专业知识上的帮助。还有感谢肖葵、贺铁梅和袁贤鑫等同学的鼓励和支持。参考文献1周丽娜.Protel99SE电路设计技术(基础、案例篇)M.北京:中国铁道出版社.2009.2焦宝文.课程设计指南M.北京:清华大学出版社.1983.3杨垒,于复生,郭梅静.基

26、于AT89S52的定时器设计J.山东建筑大学学报,2006(05)4林毅.基于AT89C51单片机构成的键盘显示电路J.现代电子技术,2006(13)5坂本正文.步进电机应用技术M.北京:科学出版社,2010.6http:/ 7827附录1:系统总体结构电路原理图附录2:程序清单 #include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/*独立按键*/ sbit P1_0=P10; /显示切换 sbit P1_1=P11;/调整 sbit P1_2=P

27、12;/加 sbit P1_3=P13;/减 sbit P1_4=P14;/确认设置完成 sbit ACC0 = ACC0; sbit ACC7 = ACC7; sbit T_CLK = P16; /*实时时钟时钟线引脚 */ sbit T_IO = P35; /*实时时钟数据线引脚 */ sbit T_RST = P17; /*实时时钟复位线引脚 */ sbit LED1=P15; /按键按下指示 sbit LED2=P32; sbit LED3=P33; sbit LED4=P34; sbit LED5=P37;/*初始时间设置*/uchar flag; /显示切换标志uint sec0=

28、44;/秒uint min0=50; /分uint hour0=8; /小时uint day0=8; /天uint month0=6; /月uint year0=13; /年uint yearh=20; /年uint cursor=0; /当前光标闪烁位uchar a=0xff; /LED显示掩码uchar sign;/更改完成标志uchar sign1;/显示切换标志uchar code Seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共阴极极数码管uchar code table1=0xff,0xfe,0xfd,0xfc,0xf

29、b,0xfa,0xf9,0xf8 ; /译码器选择显示的位uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共阴极极数码管uint table26=0,0,0,0,0,0; /存储改变的数据/* 名称 : delay1()* 功能 : 延时。* 输入 : 无* 输出 : 无*/void delay1(uint t)/延时 uint i; while(t-) for (i=0;i<125;i+);/* 名称 : Kdelay()* 功能 : 按键消抖延时* 输入 : 无* 输出 : 无*/void Kde

30、lay() /按键消抖 uchar i,j; for(i=248;i>0;i-) for(j=248;j>0;j-);/* 名称 : delay()* 功能 : 延时,延时时间大概为140US。* 输入 : 无* 输出 : 无*/void delay()int i,j;for(i=0; i<=10; i+)for(j=0; j<=2; j+);/* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/void Delay_1ms(uint i)/1ms延时uchar x,j;for

31、(j=0;j<i;j+)for(x=0;x<=148;x+);/* 名称 : v_RTInputByte()* 功能 : 往DS1302写入1Byte数据* 输入 : ucDa 写入的数据* 输出 : 无*/void v_RTInputByte(uchar ucDa)uchar i;ACC = ucDa;T_RST = 1;for(i=8; i>0; i-)T_IO = ACC0;T_CLK = 1;T_CLK = 0;ACC = ACC >> 1;/* 名称 : uc_RTOutputByte()* 功能 : 从DS1302读取1Byte数据* 输入 :无* 返

32、回值: ACC*/uchar uc_RTOutputByte(void) uchar i;T_RST = 1;for(i=8; i>0; i-)ACC = ACC >>1;T_IO=1;ACC7 = T_IO;T_CLK = 1;T_CLK = 0;return(ACC);/* 名称 : v_W1302(uchar ucAddr, uchar ucDa)* 功能 : 往DS1302写入数据* 输入 : ucAddr: DS1302地址, ucDa: 要写的数据*/void v_W1302(uchar ucAddr, uchar ucDa)T_RST = 0;T_CLK = 0

33、;T_RST = 1;v_RTInputByte(ucAddr); / 写地址 _nop_();_nop_();v_RTInputByte(ucDa); / 写1Byte数据T_CLK = 1;T_RST = 0;/* 名称 : uc_R1302(uchar ucAddr)* 功能 : 读取DS1302某地址的数据* 输入 : ucAddr: DS1302地址* 返回值 : ucDa :读取的数据*/uchar uc_R1302(uchar ucAddr)uchar ucDa;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); /写地址,命

34、令_nop_();_nop_();ucDa = uc_RTOutputByte(); /读1Byte数据T_CLK = 1;T_RST = 0;return(ucDa);/* 名称 : v_BurstW1302T* 功能 : 往DS1302写入时钟数据(多字节方式)* 输入 : pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制* 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B* 返回值 : 无*/void v_BurstW1302T(uchar *pSecDa)uchar i;v_W1302(0x8e, 0x00); /控制命令,WP=0,写

35、操作T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xbe); /0xbe:时钟多字节写命令for(i=8; i>0; i-) /8Byte = 7Byte 时钟数据 + 1Byte 控制v_RTInputByte(*pSecDa); /写1Byte数据pSecDa+;T_CLK = 1;T_RST = 0;/* 名称 : v_BurstR1302T(uchar *pSecDa)* 功能 : 读取DS1302时钟数据* 输入 : pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年* 7Byte (BCD码) 1B 1B 1B 1

36、B 1B 1B 1B* 返回值 : ucDa :读取的数据*/void v_BurstR1302T(uchar *pSecDa)uchar i;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xbf); /0xbf:时钟多字节读命令for(i=8; i>0; i-)*pSecDa = uc_RTOutputByte(); /读1Byte数据pSecDa+;T_CLK = 1;T_RST = 0;/* 名称 : v_BurstW1302R(uchar *pReDa)* 功能 : 往DS1302寄存器数写入数据(多字节方式)* 输入 : pReDa:

37、 寄存器数据地址* 返回值 : 无*/void v_BurstW1302R(uchar *pReDa)uchar i;v_W1302(0x8e,0x00); /控制命令,WP=0,写操作T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xfe); /0xbe:时钟多字节写命令for(i=31; i>0; i-) /31Byte 寄存器数据v_RTInputByte(*pReDa); /写1Byte数据pReDa+;T_CLK = 1;T_RST = 0;/* 名称 : v_BurstR1302R(uchar *pReDa)* 功能 : 读取DS13

38、02寄存器数据* 输入 : pReDa: 寄存器数据地址* 返回值 : 无*/void v_BurstR1302R(uchar *pReDa)uchar i;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xff); /0xbf:时钟多字节读命令for(i=31; i>0; i-) /31Byte 寄存器数据*pReDa = uc_RTOutputByte(); /读1Byte数据pReDa+;T_CLK = 1;T_RST = 0;/* 名称 : v_Set1302(uchar *pSecDa)* 功能 : 设置初始时间* 输入 : pSecD

39、a: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B* 返回值: 无*/void v_Set1302(uchar *pSecDa)uchar i;uchar ucAddr = 0x80;v_W1302(0x8e, 0x00); /控制命令,WP=0,写操作for(i=7; i>0; i-)v_W1302(ucAddr, *pSecDa); / 秒 分 时 日 月 星期 年pSecDa+;ucAddr += 2;v_W1302(0x8e, 0x80); /控制命令,WP=1,写保护/* 名称 : v_Get

40、1302(uchar ucCurtime)* 功能 : 读取DS1302当前时间* 输入 : ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B* 返回值 : 无*/void v_Get1302(uchar ucCurtime)uchar i;uchar ucAddr = 0x81;for(i=0; i<7; i+)ucCurtimei = uc_R1302(ucAddr); /格式为: 秒 分 时 日 月 星期 年ucAddr += 2;/* 名称 : dectobcd(uchar

41、 dec)* 功能 : DEC码转换为BCD码* 输入 : dec码* 输出 : bcd码*/uchar dectobcd(uchar dec)uchar bcd;bcd = 0;while(dec >= 10) dec -= 10; bcd+; bcd <<= 4;bcd |= dec;return bcd;/* 名称 : bcdtodec(uchar bcd)* 功能 : BCD码转换为DEC码* 输入 : bcd码* 输出 : dec码*/uchar bcdtodec(uchar bcd)uchar data1;data1 = bcd & 0x0f; /取BCD

42、低4位bcd = bcd & 0x70; /剔除BCD的最高位和低4位。data1 += bcd >> 1;data1 += bcd >> 3; /用位移代替乘法运算return data1;/* 名称 : 调整值进行转换* 功能 : * 输入 : * 输出 : */uint D_B(uint dec) uint b; b=(dec/10)<<4; b+=dec%10; return b;/* 名称 : Run_DS1302(void)* 功能 : 读出DS1302中的数据* 输入 : 无* 输出 : 无*/void Run_DS1302(void)uchar sec, min, hour, day, month, year;while(si

温馨提示

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

评论

0/150

提交评论