基于MC9S08QG8的万年历_第1页
基于MC9S08QG8的万年历_第2页
基于MC9S08QG8的万年历_第3页
基于MC9S08QG8的万年历_第4页
基于MC9S08QG8的万年历_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、江 苏 师 范 大 学 科 文 学 院本 科 生 课 程 设 计 课 程 名 称: 单片机课程实训 题 目: 基于MC9S08QG8的万年历 专 业 班 级: 11电信1 学 生 姓 名: 朱 枫 学 生 学 号: 118326152 日 期: 2014/6/15 指 导 教 师: 陈 斯 科文学院教务部印制一、课程设计目的、任务和内容要求:目的:如今电子万年历样式多样、功能新颖,挂式、台式以及带装饰画面等丰富的电子万年历数不胜数,不但满足了精准的计时需求,还将计时带上了科技时尚的味道。单片机技术所应用的功能控制芯片可进行多种功能的设置,如闹钟、报时、日历查询、语音等;并改善了很多原有石英钟不

2、能解决的问题,例如:数字夜光显示、数据存储以及全自动温度检测等功能;这给传统计时消费带来了新的动力,越来越多的消费者选择了电子万年。具体设计任务如下:1.熟悉万年历设计的工作原理;2.制定出电子万年历系统各模块的设计方案;3.焊接硬件电路、编写程序;4.写课程设计报告。设计要求:设计一个基于电子万年历系统的设计,要求:1.实现显示年、月、日、时、分、秒及星期的功能。2.实现具有可调整日期和时间功能。 二、进度安排:第3天: 熟悉课题,收集关于万年历设计的相关资料;第46天: 确定设计方案,选择飞思卡尔公司8位单片机MC9SO8QG8作为主控芯片;第712天: 软件、硬件设计及调试,反复优化直到

3、达到设计目标;第1314天:书写课程设计报告,总结课题设计经验,了解试用者反馈。三、主要参考文献:1 王宜怀、张书奎、王林、吴瑾着.嵌入式技术基础与实践.北京:清华大学出版社.20102 Freescale.MC9S08QG8 Data Sheet,Rev.2,20063 Morola(Freescale).HCS08 Family Reference Manual,Rev.1,20034 李刚、陈世利、周鑫玲着.飞思卡尔8位单片机实用教程.北京:电子工业出版社.2009 指导教师签字: 年 月 日 江苏师范大学物理与电子工程学院课程设计报告目 录摘 要IIAbstractII1 绪论11.1

4、 课题研究的背景11.2 课题研究的目的和意义11.3 整体概述12 设计方案简述22.1 功能介绍22.2 设计方案选择22.2.1 控制部分及语言的选择22.2.2 显示模块选择22.2.3 键盘选择22.3 总体设计思路33 硬件设计43.1 主控芯片最小系统的设计43.1.1 MC9S08QG8特点43.1.2 芯片引脚分配53.1.3 MCU最小系统53.2 电源设计63.3 独立键盘模块63.4 液晶显示模块74 软件设计94.1 系统软件流程图94.2 定时器程序设计104.3 中断程序设计114.3.1 IRQ中断程序设计114.3.2 KBI中断程序设计124.4 LCD显示

5、程序设计144.5 星期计算公式以及闰月识别164.5.1 星期计算公式164.5.2 闰月识别165 总结18参考文献19摘 要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周、时、分、秒进行计时。本设计是基于飞思卡尔MC9S08QG8单片机进行的电子万年历设计,可以显示年月日时分秒以及星期,具有可调整日期和时间功能。该电路采用MC9S08QG8单片机作为核心,功耗小。 万年历的设计过程包括硬件与软件方面。硬件部分主要由QG8单片机最小系统模块,LCD1602显示模块,独立按键模块组成。软件方面主要包括日历程序、时间调整程序,显示程序等。关键词:MC9S08

6、QG8;LCD1602;计时;调整AbstractElectronic calendar day time is a very wide range of tools, increasingly popular in modern society. It can be years, months, days, week, when, minutes, seconds for time. This design is the design of electronic calendar Freescale MCU MC9S08QG8 based, can display the date when

7、 the minutes and seconds and weeks, with adjustable date and time functions. The circuit uses MCU MC9S08QG8 as the core, low power consumption.Calendar of the design process including the hardware and software aspects.The hardware part consists of MCU QG8 minimum system module, LCD1602 display modul

8、e, keyboard module. The software includes calendar program, time to adjust the program, display program.Keywords:MC9S08QG8 MCU;LCD1602;Time;Adjustment-I-1 绪论1.1 课题研究的背景电子万年历是采用独立芯片控制内部数据运行,以LED或LCD数码显示日期、时间、星期,糅合了多项先进电子技术及现代经典工艺打造的现代数码计时产品。随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。从观太阳、摆

9、钟到现在电子钟,人类不断研究,不断创新纪录。对于电子万年历,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,采用直观的数字显示,可以同时显示年、月、日、时、分、秒等信息,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2 课题研究的目的和意义二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活

10、的每一个角落。所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。1.3 整体概述万年历由MC9S08QG8单片机最小系统电路,独立按键电路以及LCD1602显示电路组成。MC9S08QG8单片机作为主控制,根据使用FLL(锁频环)的内部模式产生时钟,进行计数,通过程序处理转换为年、月、日、时、分、秒以及星期并通过LCD1602显示电路显示时间,并且可以根据按键进行修改年、月、日、时、分、秒。经过布线,焊接,调试等工作后万年历成型。2 设计方案简述2.1 功能介绍1、具有显示年、月、日、时

11、、分、秒以及星期的功能2、具备年、月、日、时、分校准功能3、具有闰月识别的功能2.2 设计方案选择2.2.1 控制部分及语言的选择方案一 选用可编程逻辑器件设计以及Verilog HDL语言。设计起来结构清晰,各个模块从硬件上设计起来相对简单,控制与显示模块间的连接也会比较方便。但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些,且用可编程逻辑器件的成本较高。并且对Verilog HDL语言并不是很深的了解。方案二 选用8位的单片机以及C语言。单片机拥有丰富的中断源,方便本课程的设计;拥有内部参考时钟,准确度相当高;C语言与汇编兼容的编程环境也很方便来实现一

12、些调用;I/O口功能也较为强大;方便对本设计进行扩展,成本也相对低很多。综合上述方案的选择与比较,并根据对电器元件的熟悉程度以及市场的供应关系,选择方案二并选用MC9S08QG8单片机。2.2.2 显示模块选择方案一:LED数码管动态扫描。采用七段码显示,经济实惠,但操作繁琐。方案二:点阵式数码管显示。点阵式数码管显示对于显示汉字比较合适,显示数字有些浪费,并且成本较高。方案三:LCD1602液晶。该液晶显示屏的显示功能强大,内置192种字符,可显示大量符号、数字,清晰可见,而且功率消耗小寿命长抗干扰能力强,且操作较方便。综合上述方案的选择与比较,故选择方案三。2.2.3 键盘选择方案一:矩阵

13、式键盘 行列式键盘的原理就是每一行线与每一列线的交叉地方不相通,而是接上一个按键,通过按键来接通。 特点: 以省出不少的I/O 口资源,程序编写相对复杂点,适用于键数比较多的情况。 方案二: 独立式键盘 独立式键盘是指各个按键相互独立地连接到各自的单片机的I/O 口,I/O口只需要做输入口就能读到所有的按键。 特点: 电路简单,程序容易写,适用于按键数较少的情况。 综合上述方案的选择与比较,故选择方案二。2.3 总体设计思路 此设计在液晶上显示年、月、日、时、分、秒以及星期,电路一般包括以下几个部分:单片机最小系统模块、独立按键模块及显示模块。主控芯片采用飞思卡尔的MC9S08QG8单片机。图

14、2-1 总体框图对于各部分:(1)MC9S08QG8单片机最小系统,单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。(2)采用3.3V稳压电源供电。(3)键盘调节时间模块,为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正液晶上显示的时间。(4)LCD1602显示模块,将单片机发送数据实时显示在液晶屏上。3 硬件设计3.1 主控芯片最小系统的设计本设计的主控芯片采用飞思卡尔的MC9S08QG8单片机,其是低成本、高性能8位微处理器S08家族中的成员。Freescale的S08系列8位MCU由于其稳定性高、开发周期短、成本低、型号多样、兼容性好而被广泛应用。3.1.1 MC9S

15、08QG8特点20MHz HCS08 CPU (中央处理器)增加了BGND指令的HC08指令集 背景调试系统 断点能力,允许在线调试时设置单个断点(片上调试状态时可多设置2个断点) 调试模块包括2个比较器、9种触发模式.8个存储change-of-flow地址和event-only数据的深度FIFO.调试模块支持标签和强制断点 支持多达32个中断/复位源FLASH可在全工作电压和温度下读/编程/擦除MC9S08QG8 8KB FLASH,512B RAM ICS 内部时钟源模块包括由内部或外部参考 控制的锁频环(FLL); 内部参考的精确调整允许整个温度和电压环境下有0.2%的分辨率和2%的偏

16、差; 支持从1 MHz到10 MHz的总线频率XOSC 低电压振荡器模块可软件选择晶体 或者陶瓷谐振器的频率范围,从31.25 kHz到 38.4 kHz或者从1 MHz到16 MHz,并且支持高达20Mhz的外部时钟源看门狗的计算机正确运行(COP)复位可选择从专用的1 kHz内部时钟源或总线时钟运行具有复位或中断的低电压检测、复位的非法操作码检测、复位的非法地址检测 FLASH块保护ADC 8通道、10位模数转换模块,还具有自动比较功能,异步时钟源,温度传感器和内部能带隙参考源通道;ADC使用实时中断计数器来硬件触发ACMP 具有与内部参考源比较选项的模拟比较器模块;输出可选择连接到TPM

17、模块SCI 具有13位中止能力选项的串行通讯接口模块SPI 串行外围接口模块IIC 内部集成电路总线模块 TPM 2通道定时器/脉宽调制器;每通道能用于输入捕获,输出比较,缓冲边沿对齐PWM或者缓冲中心对齐PWMMTIM 带预置值的8位计数器模块KBI 8管脚的键盘中断模块,带有软件可选择的边沿极性和边沿/电平模式12个通用输入/输出管脚,1个仅为输入和1个仅为输出管脚;每个管脚输出10mA,每片最大输出60mA当用作输入时可软件选择端口上拉当用作输出时可软件选择端口转换率和驱动强度RESET和IRQ管脚有内部上拉以减少用户系统费用单线的背景调试接口片上、在线仿真器(ICE),具有实时总线捕获

18、功能3.1.2 芯片引脚分配图3-1 MC9S08QG8 16脚PDIP封装图3.1.3 MCU最小系统图3-2 MC9S08QG8最小系统图在设计电路时,单片机是本课题核心电路,所有数据以及控制都从这里出发,因此可以说它是最重要的模块,在焊接时,应该先焊接最小系统,在最小系统可以使用之后才可以继续焊接下面的电路,而测试系统是否正常的方法就是使用BDM下载器(Feescale8位机专用下载器)下载程序进行测试。MCU的最小系统是指可以使内部程序运行所必需的外围电路。一般情况下,MCU的硬件最小系统由电源电路、BDM电路、晶振及复位等电路组成,如图3-2。3.2 电源设计用变压器进行交流降压,然

19、后经过桥式整流器VD1整成脉动直流,并用电容C1平滑滤波后送到7805三端稳压器稳成5V输出,得到5V直流输出。如图3-3。图3-3 220V转5V稳压电源电路图再采用LM1117芯片将5V转3.3V自制稳压电源,如图3-4。图3-4 LM1117 5V转3.3V稳压电源电路图3.3 独立键盘模块键盘的种类分多种。按键盘的分布方式可分为独立式和矩阵式;按读入键值的方式可分为直读方式和扫描方式;按是否进行硬件编码可分为硬件编码方式和非编码方式;按微处理器响应方式可分为中断方式和查询方式。本设计采用独立键盘,每个按键连接一个输入口,如图为PTA2、PTA3口,每根输入线上的按键不会影响其他输入线的

20、工作状态,起到调整日期,时间的功能。此次万年历使用的MC9S08QG8的键盘中断功能,当按键按下时,该口会产生低电平,触发键盘中断。如图3-4。图3-4 独立键盘模块3.4 液晶显示模块图3-5 LCD1602电路图如图3-5所示,1602采用标准的16脚接口,其中: 第1脚:VSS为电源地。 第2脚:VCC接5V电源正极。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(

21、1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。表3-1 基本操作时序表读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=下降沿输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=下降沿输出无4 软件设计在硬件电路确定之后,则系统所有的智能功能要由软件来完成。软件是整个控制系统设计的核心

22、,它具有充分的灵活性,可以根据系统的要求而变化,对于同样的硬件系统,配以不同的软件系统,所实现的功能也就不一样,而且有此硬件电路的功能都可以用软件来实现。所以对于一个系统设计来说,软件系统常常比硬件系统需要更多的工作量。整个系统的硬件组成相对简单,较小的硬件开销需要相对复杂的软件进行补偿,下面较为详细地分析软件的设计。 4.1 系统软件流程图如图4-1所示。图4-1 软件流程图4.2 定时器程序设计采用内部时钟,使用内部16位定时器。16位TPM的核心部件仍然是一个16位的计数器,软件可以随时读取该计数器的数值,而不影响计数器的工作。但对计数器进行写入操作时会导致计数器复位。该计数器的3种工作

23、模式是1、自由计数器:此时模寄存器TPMMODH:TPMMODL为0x0000或者是0xffff,计数器总是进行加1动作,当达到0xffff时回0x0000,产生溢出动作,设置标志。2、加法计数器:如果模寄存器既不是0x0000,也不是0xffff,则此时计数器加1直到与模寄存器相等时,产生溢出动作,设置标志,计数器回0x0000。加法计数器可以为处于输入捕捉、输出比较以及沿对齐PWM工作模式下的2个独立通道,提供时钟参考。3、加减计数器:当TPM设置为中间对齐的PWM工作模式时,计数器会有加1、减1的动作。每当计数器加1到与莫寄存器数值相等时就开始减1,减到0x0000时又继续加1,如此循环

24、。每当到达模寄存器数值并开始减1时,产生溢出动作,设置标志。本次设计使用的是加法计数器,根据总线频率为4.34MHZ左右,对它128分频后,当模计数器的值为0x8472的时候,时间为1S,触发定时器中断。定时器部分代码如下:/*TPM初始化*/void TPM_Init(void)TPMSC=0x4f;TPMMOD=0x8472; /*定时器中断*/interrupt VectorNumber_Vtpmovf void TPM_ISR(void)if(TPMSC&0x80)=0x80)TPMSC_TOF=0; LCD_conv(year,mon,day,hour,min,sec);LC

25、D_disp(); if(sec>=59)sec=0;if(min>=59)min=0;if(hour>=23)hour=0;if(day>=yuetian(mon)+runping(year)day=1;if(mon>=12)mon=1;if(year>=9999)year=0;elseyear+; else mon+; else day+; else hour+; else min+;else sec+; 4.3 中断程序设计4.3.1 IRQ中断程序设计外部中断由IRQ状态和控制寄存器IRQSC管理.当使能IRQ功能,同步逻辑监测管脚的只边沿或者边沿和

26、电平事件.当MCU处于停止状态和系统时钟关闭时,使用一个独立的异步通路以便IRQ (如果使能)能唤醒MCU。为了IRQ管脚作为中断请求(IRQ)输入,IRQSC中的IRQ管脚使能(IRQPE)控制位必须为1.作为一个IRQ输入,用户可选择管脚为只边沿监测或者边沿电平检测(IRQMOD),一个事件是否导致一个中断或者设置IRQF位,这能被软件轮询. 当使能IRQ管脚,默认使用内部上拉功能(IRQPDD = 0)。如果用户希望使用外部上拉,写IRQPDD为1能关掉内部功能。 BIH和BIL指令能够在IRQ管脚被配置成IRQ输入时用来检测管脚上的电平。IRQMOD控制位重配置监测逻辑以便监测边沿时间

27、和管脚电平.在这种边沿监测模式中,当一个边沿被监测到时(当IRQ管脚从未声明电平变为声明电平) IRQF状态标志被置1, 但是标志当IRQ保持声明电平时一直被置1(不能被清除)。 本次设计运用IRQ中断,当按下开关,即触发IRQ中断,用于变更调整模式。决定是调分还是调时还是调日还是调月还是调年。IRQ中断部分程序如下:/*IRQ初始化*/void IRQ_Init(void)IRQSC_IRQMOD=0; IRQSC_IRQIE=1; IRQSC_IRQPE=1; /*IRQ中断程序*/interrupt VectorNumber_Virq void IRQ_ISR(void)Delay_ms

28、(50); if(IRQSC & 0x08)=0x08) IRQSC_IRQACK=1; if(flag>=4) flag=0; else flag+; 4.3.2 KBI中断程序设计KBI特点包括:(1)多达8个键盘中断管脚,独立管脚使能位(2)每个键盘中断管脚编程为只下降沿(或上升沿),或下降沿和低电平(或上升沿和高电平)的中断敏感性(3)一个软件使能键盘中断(4)从低功耗状态退出KBI包括三个寄存器:8位管脚状态和控制寄存器(KBISC)、8位管脚使能寄存器(KBIPE)、8位沿选择寄存器(KBIES)本设计中运用KBI中断。当按下按键时,触发中断,加1或者减1。KBI中断

29、部分程序如下: /*KBI初始化*/void KBI_Init(void)KBISC=0x02;KBIPE=0x0c;KBIES=0xf3;PTAPE_PTAPE2=1;PTADD_PTADD2=0;PTAPE_PTAPE3=1;PTADD_PTADD3=0; /*键盘中断程序*/interrupt VectorNumber_Vkeyboard void KBI(void)while(PTAD_PTAD2=0)Delay_ms(50);while(PTAD_PTAD2=0)switch(flag)case 0: if(min<=0)min=59;else min-;break;case

30、1: if(hour<=0)hour=23;else hour-;break;case 2: if(day<=1)day=yuetian(mon)+runping(year);else day-;break;case 3: if(mon<=1)mon=12;else mon-;break;case 4: if(year<=1583)year=9999;else year-;break;default:if(min<=0)min=59;else min-;break;while(PTAD_PTAD2=0);while(PTAD_PTAD3=0)Delay_ms(50

31、);while(PTAD_PTAD3=0)switch(flag) case 0: if(min>=59)min=0;else min+;break; case 1: if(hour>=23)hour=0;else hour+;break; case 2: if(day>=yuetian(mon)+runping(year)day=1;else day+;break; case 3: if(mon>=12)mon=1;else mon+;break; case 4: if(year>=9999)year=1583;else year+;break; default

32、:if(min>=59)min=0;else min+;break;while(PTAD_PTAD3=0);KBISC_KBACK=1; 4.4 LCD显示程序设计液晶工作流程图如图4-2。液晶显示部分代码:/*写LCD命令函数*/void LCD_en_command(unsigned char command)Delay_ms(5);LCD1602_RW=0;LCD1602_RS=0;LCD1602_EN=1;LCDIO=command;Delay_ms(10);LCD1602_EN=0;/*写LCD数据函数*/void LCD_en_dat(unsigned char dat)De

33、lay_ms(5);LCD1602_RW=0;LCD1602_RS=1;LCD1602_EN=1;LCDIO=dat;Delay_ms(10);LCD1602_EN=0;/*LCD显示位置选择函数*/void LCD_set_xy(unsigned char x,unsigned char y)unsigned char address;if(x=0)address=0x80+y;elseaddress=0xc0+y;LCD_en_command(address);/*LCD清屏函数*/void LCD_clr()LCD_en_command(0x01);Delay_ms(5);/*LCD显示

34、函数*/void LCD_disp(void) LCD_set_xy(0,0); LCD_en_dat(table30);LCD_en_dat(table31);LCD_en_dat(table32);LCD_en_dat(table33);LCD_en_dat(0x3a);LCD_en_dat(disp_buf0);LCD_en_dat(disp_buf1);LCD_en_dat(disp_buf2);LCD_en_dat(disp_buf3);LCD_en_dat(0x2d);LCD_en_dat(disp_buf4);LCD_en_dat(disp_buf5);LCD_en_dat(0x

35、2d);LCD_en_dat(disp_buf6);LCD_en_dat(disp_buf7);LCD_set_xy(1,1); LCD_en_dat(table2xingqi(year,mon,day)*3); LCD_en_dat(table2xingqi(year,mon,day)*3+1); LCD_en_dat(table2xingqi(year,mon,day)*3+2); LCD_set_xy(1,5);LCD_en_dat(disp_buf8);LCD_en_dat(disp_buf9);LCD_en_dat(0x3a);LCD_en_dat(disp_buf10);LCD_e

36、n_dat(disp_buf11);LCD_en_dat(0x3a);LCD_en_dat(disp_buf12);LCD_en_dat(disp_buf13);LCD_set_xy(1,14);LCD_en_dat(table12*flag);LCD_en_dat(table12*flag+1);/*lcd1602初始化*/void LCD_Init(void)Delay_ms(15);LCD_en_command(0x38);/8位数据传送模式Delay_ms(15);LCD_en_command(0x0c);LCD_en_command(0x06);LCD_en_command(0x01

37、);Delay_ms(5);4.5 星期计算公式以及闰月识别4.5.1 星期计算公式蔡勒(Zeller)公式:W = Y + Y / 4 + C / 4 - 2C + 26 (M + 1) / 10 + D - 1公式中的符号含义如下,W:星期;C:世纪-1; Y:年(两位数); M:月(M大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算) D:日; 代表取整,即只要整数部分。简单地说,c是年份的前两位,y是年份后两位,m是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时c和y均按

38、上一年取值算出来的w除以7,余数是几就是星期几。如果余数是0,则为星期日。星期计算部分代码:/*星期计算公式*/signed int xingqi(unsigned int a,unsigned char b,unsigned c) signed int x; if(b>=3) x=a%100+(a%100)/4+a/400-2*a/100+26*(b+1)/10+c-1; else x=(a-1)%100+(a-1)%100)/4+(a-1)/400-2*(a-1)/100+26*(b+13)/10+c-1; while(x<0) x=x+7; x=x%7; return x;4

39、.5.2 闰月识别公历闰年计算(按一回归年365天5小时48分45.5秒)、普通年能整除4且不能整除100的为闰年。(如2004年就是闰年,1900年不是闰年)、世纪年能整除400的是闰年。(如2000年是闰年,1900年不是闰年)因此在本设计中,当该年是闰年时,2月份的天数会认定为29天,而平年时会认定为28天。闰月识别部分代码:/*计算月里天数*/unsigned char yuetian(unsigned char e)unsigned char f;switch(e)case 1: f=31;break;case 2:f=28;break;case 3: f=31;break;case

40、 4: f=30;break;case 5: f=31;break;case 6: f=30;break;case 7: f=31;break;case 8: f=31;break;case 9: f=30;break;case 10:f=31;break;case 11:f=30;break;case 12:f=31;break;default:f=0;break;return f;/*计算闰年或平年*/unsigned char runping(unsigned int b)unsigned char c;if(b%4=0 && b%100!=0)|b%400=0) && mon=2)c=1;elsec=0;return c;5 总结在这段调试的时间里,我们经历了阶段性成功的狂喜、测试失败后的绝望、陷入困境时的不知所措,重新投入的振作。

温馨提示

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

评论

0/150

提交评论