求单片机总结实习总结8000-10000字 不是毕业设计 是实习总结

[实习总结]生产实习报告合 肥 工 业 大 学生产实习报告院 姓 专 班 学系:仪器科学..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[实习总结]生产实习报告
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
毕业设计总结
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口单片机万年历实训报告-工作总结范文网
全站搜索:
您现在的位置:&>&&>&实习总结
单片机万年历实训报告
桂林电子科技大学实训说明书用纸
单片机综合设计实训论文说明书
基于DS1302的万年历院 (系):专
电子信息工程学生姓名:学
号:指导教师:2013年 12月29日
桂林电子科技大学实训说明书用纸
要电子万年历是一种应用非常广泛日常计时工具,数字显示的万年历时钟越来越流行,特别适合在家庭居室、办公室、大厅、会议室、车站和广场等使用。挂壁式LED数码管显示的日历中逐渐受到人们欢迎。此万年历以单片机作为设计核心,由DS1302时钟芯片提供时钟、8位数码管作为显示。DS1302时钟芯片是美国DALLAS公司推出的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;对于数字电子万年历采用直观的数字显示,数字显示是采用数码管来显示,可以显示年、月、日、星期、时、分、秒等信息。此外,该万年历还具备闹铃功能和跳电保护功能。
关键词:DS1302芯片;数码管;单片机
1桂林电子科技大学实训说明书用纸
AbstractElectronic calendar is a kind of widely used daily timing tool, digital display calendar clock is becoming more and more popular, especially suitable for usein the family room, office, conference room, hall, station and square etc.. Wall hanging LED digital tube display calendar gradually welcomed by the people.This calendar with single-chip microcomputer as the core of design, provided by the DS1302 clock chip clock, 8 digital tube as display. DS1302 clock chip is a low-power real-time clock chip USA launched by DALLAS company, it can on the year, month, day, week, time, minutes and seconds for time, also has a leap year compensation and other functions, and the DS1302's long life, visual digital display digital electronic calendar using for thousands of years, digital display is the use of digital tube display, can display year,month, day, week, time, minutes and seconds, and other information. In addition, the calendar also has alarm function and jump power protection function.
Key Words: DS1302 chip;Digital tube;Single chip microcomputer
2桂林电子科技大学实训说明书用纸
论 .................................................................................................................................... 11.1设计要求 ............................................................................................................................. 11.2方案论证 ............................................................................................................................. 11.2.1技术可行性 ...................................................................................................................... 11.2.2单片机的选择 .................................................................................................................. 11.2.3 显示模块的选择 ............................................................................................................. 11.2.4 键盘模块的选择 ............................................................................................................. 21.2.5总体方案论证与选择 ...................................................................................................... 22系统硬件电路设计 ................................................................................................................ 32.1系统硬件概述 ..................................................................................................................... 32.1.1主控制器AT89S52 ......................................................................................................... 32.1.2时钟电路DS1302 ............................................................................................................ 32.2主要单元电路的设计 ......................................................................................................... 52.2.1显示电路 .......................................................................................................................... 52.2.2键盘接口 .......................................................................................................................... 52.2.3按键开关去抖动问题 ...................................................................................................... 52.2.4查询式按键及其接口 ...................................................................................................... 62.3
DS1302工作方式简介及数据操作原理 ........................................................................ 63系统的软件设计 .................................................................................................................... 83.1程序设计 ............................................................................................................................. 8谢
辞 ....................................................................................................................................... 9参考文献 ................................................................................................................................. 10附录一 ..................................................................................................................................... 11仿真图 ..................................................................................................................................... 32PCB图 .................................................................................................................................... 34
桂林电子科技大学实训说明书用纸
论1.1设计要求本实训为时两周,做出基于DS1302的万年历的实物。要求实现:采用DS1302实现数字钟功能;具备掉电时钟保持功能;8位数码管动态显示,显示功能交替显示;能显示时、分、秒、年、月、日;带闹铃和闹铃设置功能等基本功能。发挥功能为:可以根据时间设定,进行特定的控制;实现外部设备时钟信息访问功能。1.2方案论证1.2.1技术可行性随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:1、单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技术。2、系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统,应用系统有较高的软、硬件利用系数。3、由于构成的应用系统是一个计算机系统,相当多的测、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。4、有优异的性能、价格比。1.2.2单片机的选择方案一:采用传统的AT89S52作为电机的控制核心。单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。方案二:采用FTC10F04单片机,还带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。其主要特点如下:8KB Flash1桂林电子科技大学实训说明书用纸
ROM,可以擦除1000次以上,数据保存10年。由于本系统对CPU运算速度要求很高,需要执行很复杂的运算,方案一成本比较低,适合做设计,方案二运算速度高,性能好,所以两种方案都有可取之处。选用方案一作为主方案,方案二作为备用方案。1.2.3 显示模块的选择方案一:使用液晶显示屏显示时间数字。 LCD具有轻薄短小、低耗电量、无辐射,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶是以点阵的模式显示各种符号,编程工作量大,控制器的资源占用较多,其成本也偏高。在使用时,不易维护。方案二:使用传统的LED数码管显示。 数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精确可靠,操作简单。根据以上论述,在本系统中,我们采用了八段四位一体数码管的动态显示。1.2.4 键盘模块的选择在对日期和时间进行切换,对日期和时间进行调节校准过程中,系统需要产生激励电流,因此需要用按键。方案一:使用独立式键盘。独立式键盘是指直接用I/O口线构成的单个按键电路。独立式按键电路配置灵活,软件结构简单。方案二:使用矩阵式键盘。矩阵式键盘是由行线和列线组成,按键位于行、列的交叉点上,行线、列线分别连接到按键开关的两端。其特点是简单且不增加成本,这种键盘适合按键数量较多的场合。根据以上的论述,因本系统需要的按键不多, 板子上共有四个按键:Set键(调整键),加键,减键,out键(跳出键)。所以采用方案一。1.2.5总体方案论证与选择按照系统设计功能的要求,确定系统由主控模块、时钟模块、及显示模块和键盘接口模块共4个模块组成。主控芯片使用51系列AT89S52单片机,时钟芯片使用DALLAS公司推出的高性能、低功耗、带RAM的实时时钟DS1302。DS1302作为计时芯片,可以做到计时准确。DS1302在很小电流的后备电源(2.5~5.5V电源,再2.5V时耗电小于300nA),DS1302可以编程选择多种充电电流来为后备电源进行慢速充电,可以保证后备电源基本不耗电。显示模块采用普通的共阴极四位一体八段LED数码管。2桂林电子科技大学实训说明书用纸
2系统硬件电路设计2.1系统硬件概述2.1.1主控制器AT89S52AT89S52单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。主要特性如下:● 增强型8051单片机,6时钟、机器周期和12时钟、机器周期可以任意选择,指令代码完全兼容传统8051单片机。● 工作电压:5.5V~3.3V● 工作频率范围:0~44MHz。● 用户应用程序空间为8K字节● 片上集成512字节RAM● 通用I/O口32个,复位后为:P1/P2/P3/P4是准双向口/弱上位,P0口是漏极开路输出,总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。 ● ISP(在系统可编程)/IAP(再应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1 )直接下载用户程序,数秒即可完成一片。 ● 具有EEPROM功能● 具有看门狗功能● 共3个16位定时器/计数器。及定时器T0、T1、T2● 通用异步串行口(UART),还可用定时器实现多个UART● 工作温度范围:-40~+85度(工业级)/0~75度(商业级)2.1.2时钟电路DS1302DS1302的性能特性:● 实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行比较; ● 用于高速数据暂存的31*8位RAM;● 最少引脚的串行I/O;● 2.5~5.5V电压工作范围;● 2.5V时耗小于300nA;● 用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式; ● 简单的三线接口;● 可选的慢速充电(至Vcc1)的能力。DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把3桂林电子科技大学实训说明书用纸
命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的控制字如表所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。表一 DS1302控制字
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如上表所示,其中奇数为读操作,偶数为写操作。时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位(20~23h)。
DS1302的晶振选用32768Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。
4桂林电子科技大学实训说明书用纸
2.2主要单元电路的设计2.2.1显示电路显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。年月日、时分秒、闹钟共需要24位数码显示,用8位数码管以按键切换的方式来显示。考虑到一次扫描24位数码管显示时会出现闪烁情况,故采用动态扫描,可将数码管数量减少至8位,显示时采用串行口输出段码。2.2.2键盘接口键盘在单片机系统中是一个很重要的部件。为了输入数据、查询和控制系统的工作状态,都要用到键盘,键盘是人工干预计算机的主要手段。键盘可分为编码和非编码键盘两种。编码键盘采用硬件线线路来实现键盘编码,每按下一个键,键盘能自动生成按键代码,键数较多,而且还具有去抖动功能。这种键盘使用方便,但硬件较复杂,PC机所用的键盘就属于这种。非编码键盘仅提供按键开关工作状态,其他工作由软件完成,这种键盘键数较少,硬件简单,一般在单片机应用系统中广泛使用。此处主要介绍该类非编码键盘及其与MCS―51型单片机的接口。2.2.3按键开关去抖动问题按键开关在电路中的连接如图所示。按键未按下时,A点电位为高电平5V;按键按下时,A点电位为低电平。A点电位就用于向CPU传递按键的开关状态。但是由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定,如图2-11b所示,键盘的抖动时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。因此必须设法消除抖动的不良后果。消除抖动的不良后果的方法有硬、软件两种。
图一 键操作和键抖动为了节省硬件,在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消除抖动的方法。根据抖动特性,第一次检测到按键按下后,执行一段延时5~10ms让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。当检测到按键释放后,也要给5~10ms
的延时,待后延抖动消失后转入该键处理程序。
5桂林电子科技大学实训说明书用纸
2.2.4查询式按键及其接口按照键盘与CPU的连接方式可以分为查询按键和矩阵式键盘。查询式按键是各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他I/O口线上按键的工作状态。查询式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,在按键数量较多时,I/O口线浪费较大,且电路结构显得繁杂。故这种形式适用于按键数量较少的场合,因本设计按键较少,故使用查询方式。2.3
DS1302工作方式简介及数据操作原理DS1302可以对年、月、日、星期、时、分、秒进行计时, 且具有闰年补偿功能, 工作电压宽达2.5~5.5V。采用三线接口与CPU进行同步通信, 并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个33x8的用于临时性存放数据的RAM寄存器。DS1302是的DS1202升级产品, 与DS1202兼容, 但增加了主电源/后背电源双电源引脚, 同时提供了对后背电源进行涓细电流充电的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24&小&时或带AM/PM的12小时格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电磁备份;Vcc1在双电池系统中提供主电源。在这种运行方式中,Vcc1里连接到后备电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由Vcc1或Vcc2中较打大者供电。当Vcc2>(Vcc1+0.2V)时,Vcc2给DS1302供电;当Vcc2<Vcc1时,DS1302由Vcc1供电。图二
DS1302DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且
I/O6桂林电子科技大学实训说明书用纸
引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的控制字如图所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如下表所示,其中奇数为读操作,偶数为写操作。表二DS1302控制字时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位(20~23h)。DS1302的晶振选用32768Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。
7桂林电子科技大学实训说明书用纸
3系统的软件设计3.1程序设计电子时钟的程序主要包括3个方面的内容:一是DS1302从单片机中读取数据进行计数,二是利用按键进行时间的调整,三是单片机中读取DS1302中的数据驱动LED数码管显示时间。AT89S52单片机主要I/O口的分配:P1^0、P1^1、P1^2分别接时钟芯片的SCLK、I/O、RST引脚,P3^4、P3^5、P3^6、P3^7接四个独立按键,P0口接数码管的段码,P2口接数码管的位选端。
程序流程图如下:
8桂林电子科技大学实训说明书用纸
辞2013年12月,在为时两个周的单片机实训从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个写作过程难以用语言来表达。这次实训终于落下了帷幕。在这次课程设计的过程中,我拥有了无数难忘的回忆和收获。这次实训的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。在这次实训中也使我们的同学关系更进一步了,同学之间互相帮助,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。在此更要感谢我的指导老师和专业老师,是你们的细心指导和关怀,使我能够顺利的完成此次实训。在此我要向老师致以最衷心的感谢和敬意。
9桂林电子科技大学实训说明书用纸
参考文献[1] 李群芳,肖看,张世军.《单片微型计算机与接口技术》:电子工业出版社,2013.[2] 何利民.《单片机应用技术选编》.北京航空航天大学出版社,2000[3] 刘文涛等.《MCS-51单片机培训教程》.电子工业出版社,2005[4]李光飞等.《单片机C语言程序设计实例指导》.北京航空航天大学出版社,2005[5]黄遵熹.《单片机原理接口与应用》.西北工业大学出版社,1997.05[6]李华.《MCS-51系类单片机实用接口技术》.北京航空航天大学出版社,2004
10桂林电子科技大学实训说明书用纸
附录一程序:#include&reg52.h&#define uchar unsigned char#define uint unsigned intunsigned char code LED_d[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
//定义字符数组显示数字 unsigned char code LED_w[8] = {0x7f,0xbf,0xfb,0xef,0xf7,0xdf,0xfd,0xfe}; char temp,temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;char count,up_flag,down_flag,flag,sbit Beep=P3^1;sbit Set= P3^4;sbit Up = P3^5;sbit Down= P3^6;sbit out= P3^7;sbit SCLK=P1^0;sbit DATA=P1^1;sbit RST=P1^2;void show_time();void show_time1();void show_time2();void show_minute();void show_hour();void DisplayMinute(unsigned char x);void DisplayHour(unsigned char x);11桂林电子科技大学实训说明书用纸
void DisplaySecond(unsigned char x);void DisplayKang1();void DisplayKang2();char time[10];void delaynus(unsigned char n){for(i=0;i&n;i++);}void delay1ms(){
void delaynms(unsigned char n){
}/*函数功能:向1302写一个字节数据*/void Write1302(unsigned char dat){SCLK=0;
//拉低SCLK,为脉冲上升沿写入数据做好准备
delaynus(2);for(i=0;i&8;i++)
//连续写8个二进制位数据{
DATA=dat&0x01;
delaynus(2);
//稍微等待,使硬件做好准备
//上升沿写入数据
delaynus(2);
//稍微等待,使硬件做好准备 for(i=0;i&n;i++)
delay1ms(); unsigned char i,j;
for(i=0;i&10;i++)
for(j=0;j&33;j++);12桂林电子科技大学实训说明书用纸
//重新拉低SCLK,形成脉冲
dat&&=1;/*函数功能:根据命令字,向1302写一个字节数据*/void WriteSet1302(unsigned char Cmd,unsigned char dat)
//禁止数据传递SCLK=0;
//确保写数居前SCLK被拉低
}/*函数功能:从1302读一个字节数据*/unsigned char Read1302(void){unsigned char i,
}/*函数功能:根据命令字,从1302读取一个字节数据*/ unsigned char
ReadSet1302(unsigned char Cmd) delaynus(2);
//稍微等待,使硬件做好准备 for(i=0;i&8;i++)
//连续读8个二进制位数据
if(DATA==1)
//如果读出的数据是1
dat|=0x80;
//将1取出,写在dat的最高位
//将SCLK置于高电平,为下降沿读出
delaynus(2);
//稍微等待
//拉低SCLK,形成脉冲下降沿
delaynus(2);
//稍微等待
//启动数据传输
delaynus(2);
//稍微等待,使硬件做好准备
Write1302(Cmd);
//写入命令字
Write1302(dat);
//将时钟电平置于高电平状态
//禁止数据传递
//将读出的数据返回13桂林电子科技大学实训说明书用纸
//拉低RSTSCLK=0;
//确保写数居前SCLK被拉低
//启动数据传输Write1302(Cmd);
//写入命令字dat=Read1302();
//读出数据SCLK=1;
//将时钟电平置于已知状态
//禁止数据传递
//将读出的数据返回}/***************************************************** 函数功能: 1302进行初始化设置***************************************************/
void Init_DS1302(void){
}void outkey() //跳出调整模式,返回默认显示 unsigned char flag_ flag_on= ReadSet); if(flag_on & 0x80) {
WriteSetE,0x00);
WriteSet,((10 / 10)&&4|(10 % 10)));
WriteSet,((30 / 10)&&4|(30 % 10)));
WriteSet,((12 / 10)&&4|(12 % 10)));
WriteSet,((21 / 10)&&4|(21 % 10)));
WriteSet,((12 / 10)&&4|(12 % 10)));
WriteSetc,((13 / 10)&&4|(13 % 10)));
WriteSetE,0x80); //写入保护指令
WriteSet,0xa5);
//打开充电功能 选择2K电阻充电方式14桂林电子科技大学实训说明书用纸
uchar S if(out==0)
delaynms(8);
count=0;Second=ReadSet);WriteSete,0x00);
WriteSet,Second & 0x7f);
WriteSetE,0x80);
done=0;while(out==0);}}void Upkey()//升序按键{Up=1;if(Up==0){delaynms(8);switch(count){case 1:temp1=temp1+1;
up_flag=1;if(temp1 & 59)
temp1=0;case 2:temp2=temp2+1;
up_flag=1;if(temp2 & 59)
temp2=0;15
//写入允许 //走时 //禁止写入 //miao数加1 超过59分,清零分数加1 超过59分清零桂林电子科技大学实训说明书用纸
temp3=temp3+1;
up_flag=1;if(temp3 & 23)
//超过23小清零 //小时数加1case 4:case 5:case 6:case 7:case 8:
temp3=0;temp7 = temp7 +1; up_flag=1; if (temp7 & 59)
temp7 = 0;temp8 = temp8 +1; up_flag=1; if (temp8 & 59)
temp8 = 0;temp4=temp4+1;
up_flag=1;
if(temp4 & 31)temp4=1;temp5=temp5+1;
up_flag=1;
if(temp5 & 12)temp5=1;temp6=temp6+1;
16桂林电子科技大学实训说明书用纸
up_flag=1;
if(temp6 & 99)temp6=13;
default:while(Up==0);void DownKey() {Down=1; if(Down==0) {delaynms(8); switch(count) {case 1:temp1=temp1-1;
up_flag=1; if(temp1 & 0)temp2=temp2-1;
up_flag=1; if(temp2 & 0)temp3=temp3-1;
down_flag=1; if(temp3 & 0)temp3=23;
case 2:case 3:17桂林电子科技大学实训说明书用纸
temp7 = temp7-1; down_flag=1; if(temp7 & 0) temp8 = temp8-1; down_flag=1; if(temp8 & 0) temp4=temp4-1;
down_flag=1; if(temp4 & 1) temp5=temp5-1;
down_flag=1; if(temp5 & 1)
temp6=temp6-1;
down_flag=1; if(temp6 & 1) temp6=13;
temp8 = 23; temp7 = 0; case 4: case 5: case 6: case 7: case 8: default:18桂林电子科技大学实训说明书用纸
} while(Down==0);void Setkey()
//模式选择按键{
}void keydone(){
if(flag==0)
} Setkey(); switch(count) {
//扫描模式切换按键,根据count次数进入相应的模式调整 WriteSete,0x00); temp=ReadSet); WriteSet,temp | 0x80); WriteSete,0x80); flag=1;
//关闭时钟,停止
//按键功能执行 Set=1; if(Set==0) {
if(Set == 0)
{ count=count+1;
//Setkey按一次,count就加1
//进入调整模式 //松手检测
delaynms(5);
while(!Set);
delaynms(5);
while(!Set);
}19桂林电子科技大学实训说明书用纸
time[0]=ReadSet);
DownKey();
temp1=((time[0] & 0x70)&&4)*10 + (time[0] & 0x0F);
if(up_flag==1||down_flag==1)
temp1 = ((temp1 / 10) && 4 | (temp1 % 10));
WriteSete,0x00);
WriteSet,temp1 | 0x80);
WriteSete,0x80);
up_flag=0;
down_flag=0;
temp2 = ((temp2/10) && 4 | (temp2 % 10));
WriteSete,0x00);
WriteSet,temp2);
WriteSete,0x80);
up_flag=0;
down_flag=0;20
show_time1();
time[1]=ReadSet);
DownKey();
if(up_flag==1||down_flag==1)
show_time1();
temp2=((time[1] & 0x70)&&4)*10 + (time[1] & 0x0F);桂林电子科技大学实训说明书用纸
time[2]=ReadSet);outkey();
DownKey();
temp3=((time[2] & 0x70)&&4)*10 + (time[2] & 0x0F);if(up_flag==1||down_flag==1)
{temp3 = ((temp3 / 10) && 4 | (temp3 % 10));
WriteSete,0x00);
WriteSet,temp3);
WriteSete,0x80);
up_flag=0;
down_flag=0;
show_time1();case 4:time[6]=ReadSetd); outkey(); Upkey();
DownKey();if(up_flag==1||down_flag==1) {
}show_minute();temp7 = ((temp7 / 10) && 4 | (temp7 % 10)); WriteSete,0x00);
WriteSetc,temp7);
WriteSete,0x80);
up_flag=0; down_flag=0;
temp7=((time[6] & 0x70)&&4)*10 + (time[6] & 0x0F);21桂林电子科技大学实训说明书用纸
case 5:time[7]=ReadSetd); outkey(); Upkey(); DownKey();if(up_flag==1||down_flag==1) {
}show_hour();
time[3]=ReadSet); outkey(); Upkey(); DownKey();if(up_flag==1||down_flag==1) {
}show_time2();temp4 = ((temp4/10) && 4 | (temp4 % 10)); WriteSete,0x00);
WriteSet,temp4);
WriteSete,0x80);
up_flag=0; down_flag=0;
temp8 = ((temp8 / 10) && 4 | (temp8 % 10)); WriteSete,0x00);
WriteSetc,temp8);
WriteSete,0x80);
up_flag=0; down_flag=0;
temp8=((time[7] & 0x70)&&4)*10 + (time[7] & 0x0F);case 6:temp4=((time[3] & 0x70)&&4)*10 + (time[3] & 0x0F);
22桂林电子科技大学实训说明书用纸
case 7:time[4]=ReadSet); outkey(); Upkey(); DownKey();if(up_flag==1||down_flag==1) {
}show_time2();time[5]=ReadSetd); outkey(); Upkey(); DownKey();if(up_flag==1||down_flag==1) {
}show_time2();temp6 = ((temp6 / 10) && 4 | (temp6 % 10)); WriteSete,0x00);
WriteSetc,temp6);
WriteSete,0x80);
up_flag=0; down_flag=0;
temp5 = ((temp5 / 10) && 4 | (temp5 % 10)); WriteSete,0x00);
WriteSet,temp5);
WriteSete,0x80);
up_flag=0; down_flag=0;
temp5=((time[4] & 0x70)&&4)*10 + (time[4] & 0x0F);
case 8:temp6=((time[5] & 0xf0)&&4)*10 + (time[5] & 0x0F);
23桂林电子科技大学实训说明书用纸
case 9:count=0;
Second=ReadSet);WriteSet,Second & 0x7f);
WriteSetE,0x80);
WriteSete,0x00);done=0;
/*函数功能:显示秒*/void DisplaySecond(unsigned char x) {
unsigned char i,j;
P2=LED_w[1];
P0=LED_d[i];
delaynms(20);
P2=LED_w[0];
P0=LED_d[j];
delaynms(20);
delaynms(50);
}void DisplayKang1() {
P2=LED_w[2];
P0=LED_d[10];
delaynms(20);
delaynms(50);
}/*函数功能:显示分钟*/
桂林电子科技大学实训说明书用纸
void DisplayMinute(unsigned char x) {unsigned char i,j;
P2=LED_w[4];P0=LED_d[i];delaynms(20);j=x%10;
P2=LED_w[3];P0=LED_d[j];delaynms(20);delaynms(50);
}void DisplayKang2(){P2=LED_w[5];P0=LED_d[10];delaynms(20);delaynms(50);
}/*函数功能:显示小时*/void DisplayHour(unsigned char x) {unsigned char i,j;
P2=LED_w[7];P0=LED_d[i];delaynms(20);j=x%10;
P2=LED_w[6];P0=LED_d[j];delaynms(20);delaynms(50);
}25桂林电子科技大学实训说明书用纸/*函数功能:显示日*/void DisplayDay(unsigned char x){unsigned char i,j;i=x/10;P2=LED_w[1];P0=LED_d[i];delaynms(20);j=x%10;P2=LED_w[0];P0=LED_d[j];delaynms(20);delaynms(50);}/*函数功能:显示月*/void DisplayMonth(unsigned char x){unsigned char i,j;i=x/10;P2=LED_w[4];P0=LED_d[i];delaynms(20);
j=x%10;P2=LED_w[3];P0=LED_d[j];delaynms(20);delaynms(50);}/*函数功能:显示年*/void DisplayYear(unsigned char x){unsigned char i,j;26桂林电子科技大学实训说明书用纸
P2=LED_w[7]; P0=LED_d[i]; delaynms(20); j=x%10;
P2=LED_w[6]; P0=LED_d[j];
delaynms(20);
delaynms(50);
void show_time() {unsigned char second,minute,hour,day,month,year,i; unsigned char ReadV
ReadValue = ReadSet);
DisplaySecond(second);
DisplayKang1();ReadValue = ReadSet);
DisplayMinute(minute);
DisplayKang2();ReadValue = ReadSet);
DisplayHour(hour); if (second % 30 == 0) {for (i=0; i&100; ++i) {ReadValue = ReadSet);
DisplayDay(day);
ReadValue = ReadSet);
day=((ReadValue&0x70)&&4)*10 + (ReadValue&0x0F);hour=((ReadValue & 0x70)&&4)*10 + ( ReadValue & 0x0F);
minute=((ReadValue & 0x70)&&4)*10 + (ReadValue & 0x0F);second=((ReadValue & 0x70)&&4)*10 + (ReadValue & 0x0F);month=((ReadValue&0x70)&&4)*10 + (ReadValue&0x0F);27桂林电子科技大学实训说明书用纸
}DisplayMonth(month);
ReadValue = ReadSetd);
year=((ReadValue & 0xf0)&&4)*10 + (ReadValue & 0x0F);DisplayYear(year);if ((second & 15) && (minute == temp7) && (hour == temp8)) {
}Beep = 0; delaynms(10); Beep =1;
void show_time1() {
}void show_time2() {
unsigned char day,month,
unsigned char second,minute, //分别储存苗、分、小时,日,月,年 unsigned char ReadV
ReadValue = ReadSet);
DisplaySecond(second);
DisplayKang1();ReadValue = ReadSet);
DisplayMinute(minute);
DisplayKang2();ReadValue = ReadSet);
DisplayHour(hour);//从分寄存器读 //显示小时hour=((ReadValue & 0x70)&&4)*10 + (ReadValue & 0x0F); //将数据转化
//从分寄存器读 //显示分minute=((ReadValue&0x70)&&4)*10 + (ReadValue & 0x0F); //将数据转化second=((ReadValue&0x70)&&4)*10 + (ReadValue & 0x0F);//显示秒28桂林电子科技大学实训说明书用纸
}unsigned char ReadV
ReadValue = ReadSet);
DisplayDay(day);
ReadValue = ReadSet);
DisplayMonth(month);
ReadValue = ReadSetd);
DisplayYear(year);day=((ReadValue & 0x70)&&4)*10 + (ReadValue & 0x0F);
//将数据转化
month=((ReadValue & 0x70)&&4)*10 + (ReadValue & 0x0F);//将数据转化
year=((ReadValue & 0xf0)&&4)*10 + (ReadValue & 0x0F); //将数据转化void show_minute() {P2 = LED_w[0];
P0 = LED_d[0]; delaynms(20); P2 = LED_w[1];
P0 = LED_d[0]; delaynms(20); DisplayKang1(); P2 = LED_w[4];
delaynms(20); P2 = LED_w[3];P0 = LED_d[temp7 % 10]; delaynms(20); DisplayKang2(); delaynms(20); P2 = LED_w[7];
P0 = LED_d[0]; delaynms(20); P2 = LED_w[6];
P0 = LED_d[0];
//fenP0 = LED_d[temp7 / 10];
//显示029桂林电子科技大学实训说明书用纸
} delaynms(20);void show_hour(){
}/*****************************************************函数功能:主函数***************************************************/void main(void){flag=1;
//时钟停止标志 P2 = LED_w[0];
P0 = LED_d[0]; delaynms(20); P2 = LED_w[1];
P0 = LED_d[0]; delaynms(20); DisplayKang1(); P2 = LED_w[4];
delaynms(20); P2 = LED_w[3]; P0 = LED_d[temp7 % 10]; delaynms(20); DisplayKang2(); delaynms(20); P2 = LED_w[7];
delaynms(20); P2 = LED_w[6];
delaynms(20);
//显示0 P0 = LED_d[temp8 % 10];
//显示0 P0 = LED_d[temp8 / 10];
//fen P0 = LED_d[temp7 / 10];
//显示030桂林电子科技大学实训说明书用纸
Init_DS1302();
up_flag=0; down_flag=0; done=0;
//时钟芯片初始化while(1){
while(done==1) keydone();
while(done==0) {
show_time();
Setkey(); }31
//进入调整模式 //显示数据 //扫描各功能键桂林电子科技大学实训说明书用纸
32桂林电子科技大学实训说明书用纸
桂林电子科技大学实训说明书用纸
34桂林电子科技大学实训说明书用纸
上一篇: 下一篇:
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 单片机学习总结 的文章

 

随机推荐