




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、姓名:陈 伟 锋e _ mail:943485595联系电话:187 5057 8216联系地址:泉州理工职业学院 基于单片机简易万年历的设计 设 计 项 目: 单片机简易万年历的设计 专 业: 电子信息工程技术 年 级: 11级 2012年12月08日 i 摘 要 本文借助电路仿真软件protues对基于at89s51单片机的电子万年历的设计方法及仿真进行了全面的阐述。该电子万年历在硬件方面主要采用at89c51单片机作为主控核心,由ds1302时钟芯片提供时钟、数码管显示屏显示、按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行年、月、日、时、分、秒的显示。所有程序编写完成后
2、,在keil软件中进行调试,确定没有问题后,在proteus软件中嵌入单片机内进行仿真。论文主要研究了数码管显示及时钟芯片ds1302,74hc154单片机之间的硬件互联及通信,对各种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。关键词:单片机;ds1302;7seg、74hc154ii 目 录摘 要.绪论.1第一章 系统基本方案选择和论证.2第一节 系统基本方案选择和论证.2 1.1统设计方案及分析.2 1.2 单片机芯片的选择.2 1.3
3、显示模块选择方案和论证.2 1.4 时钟芯片的选择方案和论证.2第二章 电路设计最终方案决定.3第三章 系统的硬件电路设计.33.1 电路设计框图.43.2 逻辑总框图.4 3.3系统硬件概述.4 (1)单片机主控制模块的设计.4 (2)时钟芯片ds1302.6 3.4调整时间程序设计.9 3.5复位电路选择.10 3.6主要显示单元电路的设计.10 3.7 系统硬件设计所需的器材.11第四章 系统的软件设计.11第一节 程序流程总框图.11第二节 部分程序设计.15第五章 系统测试.165.1 硬件测试.165.2 软件测试.16第6章 结论、展望和总结.20致谢词.21参考文献.22附录:
4、仿真图、程序.23绪论 随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明
5、了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。除了采用集成化的时钟芯片外,还有采用mcu的方案,利用stc89系列单片微机制成电子电路
6、,采用软件和硬件结合的方法,控制led数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。文介绍了基于stc89c52rc单片机设计的电子时钟。首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优势以及课题的开发意义;接着介绍了stc89c52rc单片机的硬件结构和本毕业设计所要外扩的led显示及其驱动方法,并在此基础上实现了时钟基本电路的设计;然后使用单片机c语言进行时钟程序的设计,程序采用模块化结构,使得逻辑关系简单明了,维护方便。第1章 系统基本方案选择和论证1.1系统设计方案及分析(1) 具有年、月、日、星期、时、分
7、、秒显示并能进行断电自动保存等功能;(2) 能对时间进行调整设定;1.2 单片机芯片的选择本设计采用at89s51芯片作为硬件核心,该芯片内部具有4kb rom存储空间,相对于本设计而言程序空间完全够用。能在3.6v的超低压工作,而且与mcs-51系列单片机完全兼容。1.3 显示模块选择方案和论证方案一: 采用排阵式数码管显示,对于显示文字比较适合。方案二: 采用led数码管动态扫描,led数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。方案三: 采用数码管显示屏,数码管的主要特点就是发光响应时间极短(<01s),高频特性好,单色性好,亮度高
8、、体积小,重量轻,抗冲击性能好。因此它被广泛用作数字仪器仪表、数控装置、计算机的数显器件。1.4 时钟芯片的选择方案和论证方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,实现的时间误差比较小。所以不采用此方案。方案二:采用ds1302时钟芯片实现时钟,ds130是一种高性能、低功耗的实时时钟电路,它可以对年、月、日、日、时、分、秒进行计时,工作电压为2.5v5.5v。因此,本设计中采用ds1302提供时钟。第二章电路设计最终方案决定综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用at
9、89s51作为主控制系统、ds1302提供时钟、74hc154作为传输、led数码管动态扫描作为显示为显示。 第三章 系统硬件电路设计3.1图1所示为电子万年历电路设计原理图,系统由主控制器at89c51、时钟电路ds1302、显示驱动74hc154电路,显示电路及键扫描电路组成。 图1万年历电路原理图3.2逻辑总框图: 数码管 显示模块 at89c51单 片 机主控系统模块 ds1302时钟模块 开 关控制 模块 复位 电 路 3.3系统硬件概述(1)单片机主控制模块的设计1. 主控制器stc89c52rc at89s52单片机为40引脚双列直插芯片,有四个i/o口p0,p1,p2,p3,
10、mcs-51单片机共有4个8位的i/o口(p0、p1、p2、p3),每一条i/o线都能独立地作输出或输入。 stc89c52rc单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,xtal1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,xtal2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图-1 所示 如图-
11、1 at89c51at89s51具有pdip,tqfp和plcc三种封装形式。上图就是pdip封装的引脚排列,有40个引脚,32个外部双向输入/输出(i/o)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33mhz,因此我们在此选用12mhz的晶振是比较合理的;具有片内看门狗定时器;具有断电标志pof等等。p0口可作为通用i/o口,但须外接上拉电阻;作为输出口,每各引脚可吸收8各ttl的灌电流。作为输入时,首先应将引脚置1。p0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。在该模式下,p0口含有内部上
12、拉电阻。在flash编程时,p0口接收代码字节数据;在编程效验时,p0口输出代码字节数据(需要外接上拉电阻)。p1口:8位、双向i/0口,内部含有上拉电阻。p1口可作普通i/o口。输出缓冲器可驱动四个ttl负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。p1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。p2口:具有内部上拉电阻的8位双向i/o口。p2口用做输出口时,可驱动4各ttl负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外部输出电流。cpu访问外部16位地址的存储器时,p2口提供高8位地址。当cpu用8位地址寻
13、址外部存储时,p2口为p2特殊功能寄存器的内容。p3口:具有内部上拉电阻的8位双向口。p3口用做输出口时,输出缓冲器可吸收4各ttl的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。若外部的负载是低电平,则通过内部上拉电阻向输出电流。p3口除了通用i/o口功能外,还有替代功能如表21所示。表21 p3口的第二功能端口引脚各个功能p3.0rxd(串行口输入端)p3.1txd(串行口输出端)p3.2int0(外部中断0请求输入端,低电平有效)p3.3int1(外部中断1请求输入端,低电平有效)p3.4t0(定时/计数器0计数脉冲输入端)p3.5t1(定时/计数器1计数脉冲输入端)p
14、3.6wr(外部数据存储器写选通信号输出端,低电平有效)p3.7rd(外部数据存储器读选通信号输出端,低电平有效) (2)、时钟芯片ds13021.ds1302的结构及工作原理 ds1302 是美国dallas公司推出的一种高性能、低功耗、带ram的实时时钟电)路,ds1302可以增加主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的功能。引脚功能及结构 图中所示出ds1302 的引脚排列,其中vcc1 为后备电源,vcc2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。ds1302 由vcc1 或vcc2 两者中的较大者供电。当vcc2 大于vcc10.2v 时,v
15、cc2 给ds1302供电。当vcc2 小于vcc1 时,ds1302 由vcc1 供电。ds1302在任何数据传送时必须先初始化,把rst脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在sclk的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置rst脚为低电平,则会终止本次数据传送,并且i/o引脚变为高阻态。上电运行时,在vcc2.5v之前,rst脚必须保持低电平。只有在sclk为低电平时,才能将rst置为高
16、电平。为了提高对32个地址寻址能力(地址/命令位15=逻辑1),可以把时钟/日历或ram寄存器规定为多字节(burst)方式。位6规定时钟或ram,而位0规定读或写。在时钟/日历寄存器中的地址931或ram寄存器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写ram时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至ram。表2.1 ds1302控制字 ds1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为bcd码形式。其日历、时间寄存器及其控制字如上表
17、所示,其中奇数为读操作,偶数为写操作。ds1302在每次进行读、写程序前都必须初始化,先把sclk端置 “0”,接着把rst端置“1”,最后才给予sclk脉冲;读/写时序如下图4所示。图5为ds1302的控制字,此控制字的位7必须置1,若为0则不能把对ds1302进行读写数据。对于位6,若对程序进行读/写时ram=1,对时间进行读/写时,ck=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为ds1302的日历、时间寄存器内容:“ch”是时钟暂停标志位,当该位为1时,时钟振荡器停止,ds1302
18、处于低功耗状态;当该位为0时,时钟开始运行。“wp”是写保护位,在任何的对时钟和ram的写操作之前,wp必须为0。当“wp”为1时,写保护位防止对任一寄存器的写操作。数据输入输出(i/o)在控制指令字输入后的下一个sclk时钟的上升沿时,数据被写入ds1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个sclk脉冲的下降沿读出ds1302的数据,读出数据时从低位0位到高位7。如下图-4所示 图-4 ds1302读/写时序图 ds1302的寄存器ds1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为bcd码形式,其日历、时间寄存器及其控制字见表-2。
19、表-2 ds1302的日历、时间寄存器 此外,ds1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与ram相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 ds1302与ram相关的寄存器分为两类:一类是单个ram单元,共31个,每个单元组态为一个8位的字节,其命令控制字为c0hfdh,其中奇数为读操作,偶数为写操作;另一类为突发方式下的ram寄存器,此方式下可一次性读写所有的ram的31个字节,命令控制字为feh(写)、ffh(读)。 ds1302的晶振选用32768hz。如图-2所示 如图二 ds1302时钟模块3.4调整时间程序设计调整时间
20、用三个调整按钮,一个作为设置时间,分别定义为加按钮,减按钮,设置钮,还有两个作为加,减用在调整时间过程中要调整的位与别的位应该有区别。按键电路的连接如图-3所示: 图-3 按键电路连接3.5复位电路的选择复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使cpu和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开 关或电源插头
21、分-合过程中引起的抖动而影响复位。如图-4所示 如图-4 rc复位电路3.6主要显示单元电路的设计显示部分采用普通的共阴数码管显示,采用动态扫描,以减少硬件电路。考虑到一次扫描15位数码管显示时会出现闪烁情况,故采用动态扫描,可将数码管数量减少至8位,显示时采用串行口输出段码。如图-5所示图-五 数码管3.7系统硬件设计所需的器材at89s51芯片 1个74hc154芯片 1个 数码管显示器 7个ds1302 1个led 4个开关 4个电阻 10 k 1个 100k 2个导线 若干排阻 1个晶振 12m 1个 32768k 1个电容 30pf 2个点解电容 22uf 1个 第四章、电子万年历软
22、件设计一、(1)程序流程总框图 开始 初始化读、写日期、时间 分离日期时间显示值显示子程序 日期、时间修改子程序 返回 图(1)程序流程总框图(2)阳历程序流程图图(2)阳历流程图 (3)、时间调整程序流程图 图(3)时间调整程序流程图2、 部分程序的设计 (1)、用at89c51模拟ds1302发送控制字的时序过程void write_byte(uchar cmd) uchar i=0; for (i=0;i=1;(2)、用at89c51模拟ds1302读取单字节数据的时序过程uchar read_byte(void) uchar i=0; uchar dat=0; uchar tmp=0;
23、 for(i=0;i=1; dat|=(tmp7); return(dat);(3)、用at89c51模拟ds1302读取单字节数据的完整时序uchar read_ds1302(uchar addr) uchar tmp; ds_rst=0; ds_sclk=0; ds_rst=1; write_byte(addr); tmp=read_byte(); ds_sclk=0; ds_rst=0; return(tmp); (4)、用at89c51模拟ds1302写单字节数据的完整时序(包括控制字) void write_ds1302( uchar addr, uchar dat) uchar t
24、mp =0; tmp=dat; ds_rst=0; ds_sclk=0; ds_rst=1; write_byte(addr); write _byte(tmp); ds_sclk=0; ds_rst=0; 第五章 系统测试系统调试主要包括硬件调试和软件调试。硬件调试的任务是排除系统的硬件电路故障,包括设计性错误和工艺性故障。软件调试是利用开发工具进行在线仿真调试,除了发现和解决程序错误外,也可以发现硬件故障。5.1硬件调试 程序的调试是采用一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能等;最后逐步将各子程序联接起来总调。联调需要注意的是,各程序模块间能否正确
25、传递参数,特别要注意各子程序的现场保护与恢复。在程序调试过程当中,主要是判断进位的问题。要调试它在大小月中进位会不会出现错误,尤其是十六进制和十进制之间的问题。有时候没考虑清楚,在运算过程当中就会经常出现错误。在显示部分中,我是把第一行显示写好后,再写第二行,然后第三行,再把这三行显示结合在一起。在温度采集中,要把传感器采集进来的信号经过a/d转换后,再进行乘法和除法运算,bcd码转换。(1)、按键的检测是通过中断的办法来实现,利用按键进行间调整。 s1按下则开始设置时间及日期,同时在第一行最右端显示被选择的对象,第一次按下s1时,设置年份,若按下s3,则是减1操作,按下s2是加1操作,设置好
26、年后,第二次按下s1时,则是设置月份,按s3减,按s2则加1,依次循环下去,则可以将时间和日期设置完毕,s4是确定键,设置好按下即可保存设置了。(2)、数码管显示是通过完成仿真器软件仿真后,就要连接上硬件(数码管显示)电子钟成品板进行硬件调试。将仿真器通过串行usb端口连接计算机上,将仿真usb接口接到仿真器,检查接线是否有误,确信没有接错后,接上电源,打开仿真器的电源开关。再进行仿真器和通信设置。仿真器和仿真头设置正确,并且硬件连接没有错误,出现 “硬件仿真”的对话框,并显示仿真器、仿真usb的型号及仿真器的序列号。表明仿真器初始化正确。(3)、led数码管的断码错乱,原因出于没有认真看清a
27、、b 、c等引脚信息。那就要重新排列74hc154的输出端,相应接入led数码管,即可解决出现在的断码或乱码。(4)、对万年历修改时间或日期时,有时led数码管被屏蔽掉,造成不亮现象。那时可根据仪器的测试,发现电路的驱动能力不足,最后在ds1302时钟芯片的/cs、sclk、ret端接入5.1k的上拉电阻后,电路的驱动能力才能满足,即可解决不亮现象。5.2软件调试软件总设计:主程序首先对系统环境初始化,设置定时器t0工作模式为16位定时/计数器模式,置位总中断允许位ea,并对键盘端口置位,再对数码管初始化,ds1302初始化。接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,最下面是时间
28、的显示。(1)软件程序编写:软件程序编写的好坏直接影响着系统运行情况的良好。因本程序涉及的模块较多,所以程序编写也采用模块化设计,c语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用c51编写。具体程序见附件一:程序 (2)万年历历程序的设计很简单,编写好ds1302读写程序和阳历和时间显示程序,在主函数中调用,很容易就能实现阳历和时间的显示功能。 在编写程序时,由于没有掌握好ds1302的读写时序,导致ds1302不能正常读数。经过认真分析时序,最后终于编写出了ds1302的正确程序。如图-6所示为数码管显示出的时间日期。图-6 数码管显示时间(3)在isis的原理图中,
29、右键单击at89c51将其选中,然后单击左键打开at89c51的edit component 对话框,如图-7所示。图-7 edit component 对话框选择相应的.hex文件,再在proteus isis 编辑窗口的file菜单中选择save design 选项,保存设计,生成.dsn文件。 (4)、pcb绘制和pcb3维显示图 pcb绘制 pcb3维显示图 第六章 结论、展望与总结6.1 结论通过本次设计,本系统能完成以下功能:(1)显示公历日期功能(年、月、日、时、分、秒以及星期);(2)可通过按键调节年、月、日、时、分、秒以及星期;(3)可动态完整显示年;本设计硬件电路较简单,所
30、以器件较少,电路中使用了at89c52单片机、ds1302时钟芯片和数码管显示屏,实现了预计功能。6.2 展望在本次设计中仍然存在着不足之处。1、显示的开始年限是从21世纪起显示。2、通过按键调节年、月、日后,如果不调节星期,星期的显示就会出现与正常的星期不匹配,目前还没办法自动校正,只能通过手动调节星期,才能使所显示的星期与正常星期匹配。3、由于未来的阴历日期是不能准确预测出的,所以,阴历日期这部分没有弄进去。4、由于使用的是c语言进行的编程,所以整个程序显得很臃肿,在现有的程序设计基础上,还可以进行精简。5、本设计的功能还可以在现有基础上再次扩展,还可以添加闹铃功能、加蜂鸣器、做音乐闹铃、
31、进行阴历换算、使用lcd显示时间以及整点报时功能等等,还有很大的扩展空间。6.3 总结在这学期的课程中,收获知识的同时,还收获了阅历,收获了成熟,通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、 动手制作的能力,在各种其它能力上也都有了提高。更重要的是,我还学会嵌入式万年历课程设计是一个学习新知识、巩固加深所学课本理论知识的过程。这次作业也让我了解怎么从不同的角度去分析同一个问题,让我们有更多更广的思路去处理解题时遇到的难点和要点。从解决问题的过程中也可以熟悉和了解c语言和protues程序的不同用法和功能,而各种原有的模板使得我可以用高效,简洁的思路、观点来解题。这样的探索过
32、程也是很愉悦的,特别是看到自己也能编写一个起码有点样子的仿真程序的时候。这也是以后最实用的,是最受益匪浅。要面对社会的挑战,只有不断的自学、实践,再自学、再实践。同时与老师和同学们的交流过程中,不断互动学习,将知识融会贯通。通过自己的努力,做出了一个万年历,对以后的学习是一个莫大的鼓舞,激起了我的学习兴趣和开发创新思维。本次单片机课程设计是一个使用protues设计工具、协同使用keil编程软件制作个万年历的题目。最后,我完成了这次作业,望老师指正。致谢词首先感谢郑老师给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使我们的专业知识和专业技能相结合。在此学期的日子里得到了郑老师的悉心
33、指导,在此向我的老师致以诚挚的谢意。还有感谢在此次作业中提供相关技术帮助的同学,你们的支持和鼓励使我对这次的作业完成提高信心和动力,在此深表谢意。同时也要感谢学校能给我这次机会去尝试自己设计一些东西,使自己所学专业知识与实践相结合。也要感谢有关我参考过的文献的作者,是他们为我提供知识的源泉,使我最终能顺利地完成这次课程设计。这学期的学习生活即将结束,这篇论文作为我这学期学习的最后一份答卷,交给老师。同时也衷心地祝福同学寒假快乐!相信未来的人生道路上越走越宽广,也深深相信在未来的日子里我们将一路携手前行。这将是我克服困难、不断前进的精神动力。参考文献1余家春protel 99 se电路设计实用教
34、程m中国铁道出版社,20042黎胜容.51单片机c语言应用开发,北京:北京航空航天大学出版社.20083谭浩强.c语言设计(第二版)北京。清华大学出版社,2000.4brian w.kernighan, dennis m,ritchie.徐宝文,李志.c语言设计语言.20045李飞光.单片机课程设计实例指导.北京:北京航空航天大学出版社,20046李飞光.单片机课程设计实例指导.北京:北京航空航天大学出版社,20047杨子文单片机原理及应用西安电子科技大学出版社,20068沈红卫.单片机应用系统设计实例与分析,北京航空航天大学出版社.20039朱定华,戴汝平单片微机原理与应用m清华大学出版社,
35、200310陈正振电子电路设计与制作广西交通职业技术学院信息工程系,2007附录一仿真软件图附录二系统程序清单第 35 页 共 39 页#include #include #ifndef _main_h#define _main_h#define uint unsigned int#define uchar unsigned char/自定义时间结构体typedef struct _system_time uchar year; uchar month; uchar date; uchar hour; uchar min; uchar sec; uchar day; /星期 system_ti
36、me;#endif#include main.h#include delay.h#include ds1302.hsbit add_key =p33;sbit sub_key =p36;#define data p0 /数据显示口#define show p2 /数码管选择端口/共阳极数码管段码表uchar code dis_code =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;uchar g_save_time; /需要保存时间标志uchar g_has_set; /修改时间标志uchar g_set_flag; /设定时间
37、标志/*函数:指定数码管显示数据*参数:_show指定的数码管* _data要显示的数据*/void display_num(uchar _show,uchar _data) show = _show; data = dis_code_data; delay_ms(1);/*函数:显示年、月、日、时、分、秒、星期*参数:str_time要显示的时间*/void show_time(system_time str_time) uchar tmp = 0; static uchar flash = 10; /用静态变量实现闪烁的效果 display_num(0, 2); /年 display_nu
38、m(1, 0); tmp = str_time.year; if(g_set_flag !=1| flash =0) display_num(2, (tmp/10); display_num(3, (tmp%10); tmp = str_time.month; if(g_set_flag !=2 |flash = 0) if(tmp 9) display_num(4, (tmp/10); /月 display_num(5, (tmp%10); tmp =str_time.date; if(g_set_flag != 3 | flash = 0) if(tmp 9) display_num(6,
39、 (tmp/10); /日 display_num(7, (tmp%10); tmp = str_time.hour; if(g_set_flag != 4 | flash = 0) if(tmp9) display_num(8, (tmp/10); /时 display_num(9, (tmp%10); tmp = str_time.min; if(g_set_flag != 5 | flash = 0) if(tmp9) display_num(10, (tmp/10); /分 display_num(11, (tmp%10); tmp = str_time.sec; if(g_set_f
40、lag != 6 | flash = 0) if(tmp9) display_num(12, (tmp/10); /秒 display_num(13, (tmp%10); tmp = str_time.day; if(g_set_flag != 7 | flash = 0) display_num(14, tmp); /星期 if( flash- = 0) flash = 10; /*函数:扫描键盘,修改时间值*参数: str_time原来的时间*返回值:str_time修改后的时间*/system_time scan_key(system_time str_time) if(add_key
41、= 0) g_has_set = 1; switch(g_set_flag) case 1: str_time.year+; break; case 2: str_time.month+; break; case 3: str_time.date+; break; case 4: str_time.hour+; break; case 5: str_time.min+; break; case 6: str_time.sec+; break; case 7: str_time.day+; break; default: break; if(sub_key =0) g_has_set =1; switch(g_set_flag) case 1: str_time.year-; break; case 2: str_time.month-; break; case 3: str_time.date-; break; case 4: str_time.hour-;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国政治制度考研复习资料与答案解析
- 如何设计教学问题课件
- 2025年巢湖市税务系统遴选面试真题带详解含答案
- 第1章 1.3 第1课时 交集与并集 北师大版高中数学必修第一册课件
- 小学生桥的课件
- 卫浴产品知识培训课件
- 安全生产培训教育制度
- 小学生时间课件
- 南京邮电大学课件介绍
- 草甘膦护理查房
- 2025年多重耐药菌培训知识试题及答案
- 2025至2030中国航空球轴承行业项目调研及市场前景预测评估报告
- 2025年湖北省中考语文试卷真题(含标准答案及解析)
- 2025至2030中国牙科氧化锆块行业发展趋势分析与未来投资战略咨询研究报告
- 2025年成都市中考语文试题卷(含标准答案及解析)
- 《中华人民共和国职业分类大典》(2022年版)各行业职业表格统计版(含数字职业)
- 医院检验科实验室生物安全程序文件SOP
- 品质意识,品质基础知识培训
- 教师政审个人现实表现材料范文(通用5篇)
- QC降低矿山法围岩隧道爆破超挖量
- 校园文化建设方案(共60张PPT)
评论
0/150
提交评论