基于STM32的万年历设计

基于STM32的万年历设计
基于STM32的万年历设计

基于STM32的万年历设计

班级:

姓名:

学号:

成绩:

电子通信工程系

题目:基于STM32的万年历设计

前言:

随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS12C887。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS12C887的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,采用数字式温度传感器DS18B20提取外界温度,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

进入新世纪LCD显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LCD显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。伴随社会信息化进程的推进,LCD显示屏技术也在不断的推陈出新,应用领域愈加广阔。基于STM32的LCD显示可以更好的满足各种需求,也更便于操作和实现。现基于STM32在液晶显示屏幕上显示文本及图形。目前,显示技术和显示工业的发展迅速。显示技术是传递视觉的信息技术。液晶显示器件LCD 是当今最有发展前途的一种平板显示器件,它具有很多独到的优异特性。它具有显示信息多、易于多彩化、体积小、重量轻、功耗低、寿命长、价格低、无辐射、无污染、接口控制方便等优点。

截至目前,我国在液晶显示取得较大进步,我国LCD产业已经走过了近30年的历程.经历几次大的投资浪潮之后,我国内地已经成为世界最大的TN-LCD(扭曲液晶显示器)生产基地和主要的STN-LCD(超扭曲液晶显示器)生产基地,并且从2003年开始,涉足TFT-LCD(薄膜晶体管液晶显示器)领域.本课题设计采用STM32F103VE开发板,实现在LCD显示屏上显示由按键可操控的万年历功能。本实验用到的硬件部分主要有STM32开发板、USB线、LCD液晶模块,在LCD 显示屏上显示相关内容。

综上所述万年历应具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。本课题利用 STM32 的RTC 实现一个简易的电子时钟,在液晶显示屏中显示时间值。

显示时间格式为XX:XX:XX(时:分:秒),当时间计数为: 23: 59: 59 时将刷新为: 00: 00: 00。

1.功能描述

1.1设计要求

1.具有数字时钟功能。

2.具有简单日历功能。

3.具有手动校准时间功能。

4.具有闰年识别功能。

1.2 RTC(实时时钟)简介

实时时钟是一个独立的定时器。 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。

RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。系统复位后,禁止访问后备寄存器和 RTC,防止对后备区域(BKP)的意外写操作。执行以下操作使能对后备寄存器和 RTC 的访问:

1.设置寄存器 RCC_APB1ENR 的 PWREN 和 BKPEN 位来使能电源和后备接口时钟。

2.设置寄存器 PWR_CR 的 DBP 位使能对后备寄存器和 RTC 的访问。当我们需要在掉电之后,又需要 RTC 时钟正常运行的话,单片机的 VBAT脚需外接

3.3V 的锂电池。当我们重新上电的时候,主电源给 VBAT 供电,当系统掉电之后 VBAT 给 RTC 时钟工作, RTC 中的数据都会保持在后备寄存器当中。野火STM32 开发板的 VBAT 引脚接了 3.3V 的锂电。

3.STM32自带了RTC时钟计数器,从0开始计数到232。每一个计数代表秒计数,每六十个计数代表分计数,以此类推。24(小时)*60(分钟)*60(秒钟)=86400代表一天的计数时间。假设当前计数为count,count/86400得到计数的天数,根据这个得到年月日。Count%86400得到时分秒。

4.根据1中得到的年月日时分秒,进行计算的程序有:闰年判断,星期几计算,当前月有多少天等等。另外,秒表为RTC一秒钟定时计数

1.3设计方案的选择

1.3.1可选择的芯片方案

整个系统用STM32F103VE单片机作为中央控制器,由单片机执行采集内部

RTC值,时钟信号通过单片机I/O口传给LCD12864,单片机模块控制驱动模块驱动显示模块,通过显示模块来实现信号的输出、LCD12864的显示及相关的控制功能。系统设有按键模块用于对时间进行调整及扩展多个小键盘。

方案一:采用89C51芯片

采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:采用AT89S52芯片

片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。不使用时钟芯片,而直接用AT89S52单片机来实现电子万年历设计。AT89S52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦写1000余次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

若采用单片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。这样就实现了直接用单片机来实现电子万年历设计。

方案三:采用STM32单片机

STM32是一个低功耗,高性能32位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器。主要性能有:与MCS-51单片机产品兼容、全静态操作:0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符、易编程。

从单片机芯片主要性能角度出发,本数字电子钟单片机芯片选择设计采用方案采用STM32F103VE。

1.3.2 显示模块选择方案和论证:

方案一:采用ILI9341LED液晶显示屏

采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,显示质量高,没有电磁辐射,可视面积大,应用范围广,

画面效果好,数字式接口,匀称小巧,功耗小。

方案二:采用点阵式数码管显示

动态显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。

点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.

方案三:采用LED数码管动态扫描

LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。

从节省单片机芯片I/O口和降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案一,既ILI9341LED显示。

1.3.3时钟芯片的选择方案和论证:

方案一:直接采用单片机定时计数器

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。

方案二:采用DS1302时钟芯片实现时钟

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.

方案三:采用STM32的RTC定时器

由于STM32自带了实现计时功能的RTC时钟计数器,可以直接使用。

1.3.4电路设计最终方案

综上各方案所述,对本课题方案选定: 采用STM32F103VE作为主控制芯片; STM32自带的RTC提供时钟;LCD液晶显示作为显示。

1.4电源电路

本设计所需电源电压为直流、电压值大小5V的电压源。从硬件实物设计简易程度与经费方面考虑,用两节电压值大小2.5V干电池与电路电压源引脚相连接即可达到硬件设计要求。即本设计可采用两节电压值大小2.5V干电池做硬件电路电压源。为了方便改写程序,本次实验采用USB线连接电脑进行操作。

1.5按键电路

本设计所需按键用于进行显示时间的调整与设置扩展的小键盘。单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求。

2.硬件设计

2.1设计组成框图

图设计的组成框图

2.2 STM32F103VE实验板

STM32F103系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K 和512K)。芯片集成定时器,CAN,ADC,SPI,I2C,USB,UART,等多种功能。分为三大类: LD(小于64K), MD(小于256K), HD(大于256K), STM32F103VET6类属第三类。 STM32F103ZET6芯片介绍:

●基于ARM Cortex-M3核心的32 位微控制器,LQFP-144封装.

●512K 片内FLASH(相当于硬盘),64K片内RAM(相当于内存) ,片内FLASH 支持在线编程(IAP).

●高达72M 的频率,数据,指令分别走不同的流水线,以确保 CPU运行速度达到最大化 .

●通过片内BOOT区,可实现串口下载程序(ISP).

●片内双RC 晶振,提供8M和32K 的频率.

●支持片外高速晶振(8M),和片外低速晶振(32K).其中片外低速晶振可用于CPU 的实时时钟,带后备电源引脚,用于掉电后的时钟行走.

●42个16位的后备寄存器(可以理解为电池保存的RAM),利用外置的纽扣电池,和实现掉电数据保存功能.

●支持 JTAG,SWD调试.配合廉价的J-LINK,实现高速低成本的开发调试方案。

●多达80个IO(大部分兼容5V逻辑),4个通用定时器,2个高级定时器,2个基本定时器,3路SPI接口,2路I2S 接口,2路I2C接口,5路USART,一个USB 从设备接口,一个 CAN接口,SDIO接口,可兼容SRAM,NOR和NAND Flash 接口的16位总线-FSMC。

●3路共16通道的12位AD输入,2路共2 通道的12位 DA 输出.支持片外独立电压基准.

●CPU操作电压范围:2.0-3.6V

2.3 USB线

USB开发涉及主机和设备,为了避免开发驱动程序,使用Windows自带的驱动程序。所以设备枚举成HID类设备。USB鼠标就是标准的USB-HID设备。不过操作系统阻止了应用程序直接访问USB鼠标返回的报告。所以本例使用自定义HID设备。一来免去了开发驱动程序,二来自定义的HID设备应用程序和设备可

以自由收发数据(仅指数据内容)。

USB是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口即插即用和热插拔功能。USB接口可连接127种外设,如鼠标和键盘等。USB 是在1994年底由英特尔等多家公司联合在1996年推出后,已成功替代串口和并口,已成为当今电脑与大量智能设备的必配接口。USB版本经历了多年的发展,到如今已经发展为3.0版本。

对于大多数工程师来说,开发USB2.0 接口产品主要障碍在于:要面对复杂的USB2.0协议、自己编写USB设备的驱动程序、熟悉单片机的编程。这不仅要求有相当的VC编程经验、还能够编写USB接口的硬件(固件)程序。所以大多数人放弃了自己开发USB产品。为了将复杂的问题简单化,西安达泰电子特别设计了USB2.0协议转换模块。

USB20D模块可以被看作是一个USB2.0协议的转换器,将电脑的USB2.0接口转换为一个透明的并行总线,就象单片机总线一样。从而几天之内就可以完成USB2.0产品的设计。

2.4液晶显示器LCD控制器简介

LCD液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。LCM(LCD Module)即LCD显示模组、液晶模块,是指将液晶显示器件,连接,控制与驱动等外围电路,PCB电路板,背光源,结构件等装配在一起的组件。

由于液晶显示屏功耗低、体积小,承载的信息量大,因而被广泛用于信息输出、与用户进行交互。由于 STM32 内部没有集成专用的液晶屏和触摸屏的控制接口,所以在显示面板中应自带含有驱动芯片的驱动电路(液晶屏和触摸屏的驱动电路是独立的),STM32 芯片通过驱动芯片来控制液晶屏和触摸屏。

以本实验3.2 寸液晶屏(240*320)为例,它使用 ILI9341 芯片控制液晶屏,通过 XPT2046 芯片控制触摸屏。LCD 为非发光性的显示装置,它需要借助背光源才能达到显示功能,LED 控制器就是用来控制液晶屏中的 LED 背光源。

2.4.1液晶显示器在内部电路结构上主要构成

1.驱动板(也叫主板):主要是用以接收、处理从外部送进来的模拟(VGA)或者数字(DVI)视频信号,并通过屏线送出信号去控制液晶屏(PANEL)正常工作。驱动板上含有MCU单元,它是液晶显示器的检测控制中心和大脑。

2.电源板:用于将90~240V 的交流电压转变为12V、5V、3V 等的直流电供

给显示器工作。

3.背光板(也叫高压板):用于将主板或电源板输出的12V 的直流电压转变为PANEL 需要的高频的1500~1800V 的高压交流电,用于点亮PANEL的背光灯。电源板和背光板有时会做在一起也就是所谓的电源背光二合一板。

4.液晶屏:液晶显示用模块,它是液晶显示器的核心部件,其包含液晶板和驱动电路。其中,液晶屏是液晶显示器内部最为关键的部件,它对液晶显示器的性能和价格具有决定性的作用。

2.4.2 IL19341控制器结构

液晶屏的控制芯片内部结构非常复杂,最主要的是位于中间GRAM(Graphics RAM),可以理解为显存。GRAM 中每个存储单元都对应着液晶面板的一个像素点。它右侧的各种模块共同作用把 GRAM 存储单元的数据转化成液晶面板的控制信号,使像素点呈现特定的颜色,而像素点组合起来则成为一幅完整的图像。接口与 MCU 进行通讯,MUC 通过 8080 接口与 ILI9341进行通讯,从而访问它的控制寄存器(CR)、地址计数器(AC)、及 GRAM。

2.4.3像素点的数据格式

图像的像素点是由红、绿、蓝三原色组成,三原色根据其深浅程度被分为0~255 个级别,它们按不同比例的混合可以得出各种色彩。ILI9341 最高能够控制18位LCD,为了传输方便一般采用16位的控制模式。

2.4.4给整个屏幕上色

再次回到 ILI9341_Init 函数,它调用完 ILI9341_REG_Config()初始化了液晶屏后,向ILI9341 发送了一个命令——写 GRAM 内容,即后面发送的数据都被解析为显示到屏幕像素点的数据。代码中使用for 循环把语句ILI9341_Write_Data(GBLUE)执行了 320*240 次,即把所有像素点都显示为GBLUE 颜色。

3.软件设计

3.1程序流程框图

图时间调整程序流程图

3.2字模的创建

使用字模III-增强版v3.91软件来制作中文字库。打开软件,点击“自动批量生成字库”按钮选项,点击选择“二级汉字库”按钮。在“源字体”选项里面做如下设置,需要注意的是大小问题,因为我们本次的设计目标是实现16*16的汉字,所以在此选择小四字体。

设置好之后如下点击“开始转换进程”按钮.就会在安装目录下或者你设置好的目录下生成.c后缀的字库文件。对LCD显示来说,只要能够在指定的位置描写制定颜色的点,那么就能够很好地根据汉字字模信息来描写汉字。在此,为了能够更好的清楚字模的取向和高低位的排列顺序,可以现先在pc测试刚才制作好的库文件。

回到“字模III-增强版v3.91”软件,采用与之前同样的方式生成bin格式的字库文件(即“生成格式”选项设置为“bin文件格式”)。在软件安装目录下会生成Font.dat文件,我们用“WinHex”软件查看他的具体内容,与刚才制作的.c 字库的文件内容是一致的。

最后将生成的汉字字库拷贝到SD卡根目录下并重命名为“HZLIB.bin”。3.3程序的设计

一共三个任务:主处理任务、触摸屏任务、秒更新任务。

void App_UCGUI_TaskCreate (void)

{

CPU_INT08U os_err;

os_err = os_err;

Clock_SEM=OSSemCreate(1); //建立秒更新中断的信号量 //硬件平台初始化

BSP_Init();

//主处理任务--------------------------------------------------------- os_err = OSTaskCreateExt(AppTaskUserIF,

(void *)0,

(OS_STK*)&AppTaskUserIFStk[APP_TASK_USER_IF_STK_SIZE-1],

APP_TASK_USER_IF_PRIO,

APP_TASK_USER_IF_PRIO,

(OS_STK *)&AppTaskUserIFStk[0],

APP_TASK_USER_IF_STK_SIZE,

(void *)0,

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

//触摸屏任务

--------------------------------------------------------- os_err = OSTaskCreateExt(AppTaskKbd,

(void *)0,

(OS_STK

*)&AppTaskKbdStk[APP_TASK_KBD_STK_SIZE-1],

APP_TASK_KBD_PRIO,

APP_TASK_KBD_PRIO,

(OS_STK *)&AppTaskKbdStk[0],

APP_TASK_KBD_STK_SIZE,

(void *)0,

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

//秒更新任务

os_err = OSTaskCreateExt(Clock_Updata,

(void *)0,

(OS_STK

*)&Clock_Updata_Stk[Clock_Updata_STK_SIZE-1],

Clock_Updata_PRIO,

Clock_Updata_PRIO,

(OS_STK *)&Clock_Updata_Stk[0],

Clock_Updata_STK_SIZE,

(void *)0,

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

}

万年历中的时间用的是STM32自带的RTC实时时钟。

3.4程序设计

3.4.1界面背景初始化。

static void AppTaskUserIF (void *p_arg)

{

(void)p_arg;

INT8U err;

//界面初始化

GUI_Init();

//ucgui 初始化

_ExecCalibration(); /* 触摸屏校准 */ GUI_SetBkColor(GUI_WHITE);

//设置背景色

GUI_SetColor(GUI_GRAY);

//设置前景色

GUI_Clear();

//清屏

Lcd_show_bmp(0, 0,"/RTC.bmp");

//显示万年历背景

GUI_SetFont(&GUI_FontHZ_SimSun_16);

GUI_DispStringAt("一",15,47);

//显示星期一

GUI_DispStringAt("二",44,47);

//显示星期二

GUI_DispStringAt("三",73,47);

//显示星期三

GUI_DispStringAt("四",102,47);

//显示星期四

GUI_DispStringAt("五",131,47);

//显示星期五

GUI_SetColor(GUI_RED);

//用红字显示周末

GUI_DispStringAt("六",160,47);

//显示星期六

GUI_DispStringAt("日",189,47);

//显示星期日

to_tm(RTC_GetCounter(), &s_time);

//根据RTC时钟得到万年历时间的初值,注意,这个值是根据用户查询万年历变化

GUI_SetFont(&GUI_Font16_1 );

//设置英文字体

GUI_DispDecAt(s_time.tm_year,4,13,4);

//显示万年历的年份

GUI_SetFont(&GUI_FontHZ_SimSun_16);

//设置中文字体

GUI_DispString("年");

//显示年

GUI_SetFont(&GUI_Font16_1 );

//设置英文字体

GUI_DispDec(s_time.tm_mon,2);

//显示万年历的月份

GUI_SetFont(&GUI_FontHZ_SimSun_16);

//设置中文字体

GUI_DispString("月");

//显示月

GUI_SetFont(&GUI_Font16_1 );

//设置英文字体

GUI_DispDec(s_time.tm_mday,2);

//显示万年历的日子

GUI_SetFont(&GUI_FontHZ_SimSun_16);

//设置中文字体

GUI_DispString("日");

//显示日

k=getWeekDay(s_time.tm_year,s_time.tm_mon,1);

//得到某年某月的第一天的星期数

GUI_GotoXY(18,69); .

//位置设定

GUI_SetFont(&GUI_Font6x8);

//主任务执行程序

void RTC_Show(uint32_t TimeVar)

{

u8 str[15]; // 字符串暂存

u8 i,k;

static flag=0;

#if (GUI_SUPPORT_CURSOR|GUI_SUPPORT_TOUCH)

GUI_CURSOR_Show();

//鼠标显示

#endif

WM_SetCreateFlags(WM_CF_MEMDEV); /* Automatically use memory devices on all windows */

if(flag==0) //初始化按键,只执行一次。

{

//建立按键F1-F5

_ahButton[0] =BUTTON_Create(5, 0, 32,13, GUI_KEY_F1 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);

_ahButton[1]=BUTTON_Create(5, 29, 32,13, GUI_KEY_F2 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);

_ahButton[2]=BUTTON_Create(53, 0, 16,13, GUI_KEY_F3 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);

_ahButton[3]=BUTTON_Create(53,29,16,13, GUI_KEY_F4 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);

_ahButton[4]=BUTTON_Create(85, 0, 16,13, GUI_KEY_F5, WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);

_ahButton[5]=BUTTON_Create(85,29, 16,13, GUI_KEY_F6, WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);

//按键字体设置

BUTTON_SetFont(_ahButton[0],&GUI_Font6x8);//GUI_Font16_ASCII

BUTTON_SetFont(_ahButton[1],&GUI_Font6x8);//GUI_Font16_ASCII

BUTTON_SetFont(_ahButton[2],&GUI_Font6x8);//GUI_Font16_ASCII

BUTTON_SetFont(_ahButton[3],&GUI_Font6x8);//GUI_Font16_ASCII

BUTTON_SetFont(_ahButton[4],&GUI_Font6x8);//GUI_Font16_ASCII BUTTON_SetFont(_ahButton[5],&GUI_Font6x8);//GUI_Font16_ASCII

//按键背景色设置

BUTTON_SetBkColor(_ahButton[0],0,GUI_DARKMAGENTA);

//按键背景颜色

BUTTON_SetBkColor(_ahButton[1],0,GUI_DARKMAGENTA);

BUTTON_SetBkColor(_ahButton[2],0,GUI_DARKMAGENTA);

BUTTON_SetBkColor(_ahButton[3],0,GUI_DARKMAGENTA);

BUTTON_SetBkColor(_ahButton[4],0,GUI_DARKMAGENTA);

BUTTON_SetBkColor(_ahButton[5],0,GUI_DARKMAGENTA);

//按键前景色设置

BUTTON_SetTextColor(_ahButton[0],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[1],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[2],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[3],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[4],0,GUI_WHITE);

BUTTON_SetTextColor(_ahButton[5],0,GUI_WHITE);

//按键显示字符

BUTTON_SetText(_ahButton[0], "+");

BUTTON_SetText(_ahButton[1], "-");

BUTTON_SetText(_ahButton[2], "+");

BUTTON_SetText(_ahButton[3], "-");

BUTTON_SetText(_ahButton[4], "+");

BUTTON_SetText(_ahButton[5], "-");

flag=1;

}

u8 key = GUI_GetKey();

//实时获得触摸按键的值

if(key==40) //年数增加按钮

{

s_time.tm_year++;

//F1

if(s_time.tm_year>2099)

//超过范围处理

s_time.tm_year=1970;

}

else if(key==41)

//年数减小按钮

{

s_time.tm_year--;

//F2

if(s_time.tm_year<1900) //超过范围处理

s_time.tm_year=2099;

}

else if(key==42)

//月数增加按钮

{

s_time.tm_mon++;

//F3

if(s_time.tm_mon>12)

//超过范围处理

{

s_time.tm_mon=1;

}

}

else if(key==43)

//月数减小按钮

{

s_time.tm_mon--;

//F4

if(s_time.tm_mon<0)

//超过范围处理

{

s_time.tm_mon=12;

}

}

else if(key==44)

//日数增加按钮

{

s_time.tm_mday++;

//F5

if(s_time.tm_mday>getDays(s_time.tm_year,s_time.tm_mon)) //超过范围处理

{

s_time.tm_mday=1;

}

}

else if(key==45)

//日数减小按钮

{

s_time.tm_mday--;

//F6

if(s_time.tm_mday<0)

//超过范围处理

{

s_time.tm_mday=getDays(s_time.tm_year,s_time.tm_mon);

}

}

GUI_SetFont(&GUI_Font16_1 );

GUI_DispDecAt(s_time.tm_year,4,13,4);

//显示万年历的年数

GUI_SetFont(&GUI_FontHZ_SimSun_16);

GUI_DispString("年");

//显示年

GUI_SetFont(&GUI_Font16_1 );

GUI_DispDec(s_time.tm_mon,2);

//显示万年历的月数

GUI_SetFont(&GUI_FontHZ_SimSun_16);

GUI_DispString("月");

//显示月

GUI_SetFont(&GUI_Font16_1 );

GUI_DispDec(s_time.tm_mday,2);

//显示万年历的日数

GUI_SetFont(&GUI_FontHZ_SimSun_16);

GUI_DispString("日");

//显示日

GUI_DispString(" ");

GetChinaCalendarStr((u16)systmtime.tm_year,(u8)systmtime.tm_mon,( u8)systmtime.tm_mday,str); //阳历转阴历

GUI_DispString(str); //显示阴历

GUI_SetColor(GUI_RED);

//字体颜色

GUI_DispString("万年历");

k=getWeekDay(s_time.tm_year,s_time.tm_mon,1);

//得到某年某月的第一天的星期数

GUI_GotoXY(18,69); .

//位置设定

GUI_SetFont(&GUI_Font6x8);

//万年历日子显示

for(i=1;i<=40;i++)

//第一行最少显示一个,第六行最多显示二个,i的上限只需要大于37即可 {

if(igetDays(s_time.tm_year,s_time.tm_mon)+k)

//本月1号前和最后一天后的格子显示清零

{

GUI_DispString(" ");

//显示空格,用于清除之前数据

}

else

{

if((i+1)%7==0||i%7==0)

//如果为星期六和星期天,字体设置为红色

{

GUI_SetColor(GUI_RED);

}

else //否则为黑色

{

GUI_SetColor(GUI_BLACK);

}

if(i==s_time.tm_mday+k)

//如果该天为所选日期,设置背景为黄色

{

GUI_SetBkColor(GUI_YELLOW);

}

GUI_DispDecSpace(i-k,2);

//显示日子

GUI_SetBkColor(GUI_WHITE);

//恢复之前背景色

}

GUI_GotoXY(GUI_GetDispPosX()+17,GUI_GetDispPosY()); //光标移动到下一个格子

if(i%7==0)

{

GUI_GotoXY(18,GUI_GetDispPosY()+27);

//7天换行显示

}

}

for(i=1;i<=40;i++)

{

if(igetDays(s_time.tm_year,s_time.tm_mon)+k) //本月1号前和最后一天后的格子显示清零

{

GUI_DispString(" ");

//显示两个中文空格,占两个中文字符

}

else

{

GUI_SetColor(GUI_BLUE);

//正常显示蓝色

数字电子课设:万年历的设计

编号 北京工商大学 数字电子技术基础 《万年历的设计》 姓名 学院 班级 学号 设计时间

一、设计目的 1、熟悉集成电路的引脚安排 2、掌握芯片的逻辑功能及使用方法 3、了解数字电子钟及万年历的组成及工作原理 4、熟悉数字电子钟及万年历的设计与制作 5、熟悉multisim电子电路设计及仿真软件的应用 二、设计思路 1、设计60进制秒计数器芯片 2、设计24进制时计数器芯片 3、设计31进制天计数器芯片 4、设计12机制月计数器芯片 5、设计7进制周计数器芯片 6、设计闰年平年不同月份不同进制逻辑 三、设计过程 1、Tr_min and s 60进制计数器芯片: “秒”、“分”电路都六十进制,它由一级十进制计数器和一级六进制计数器组成,六十进制计数器的设计图如下,采用四个片74ls161N串联而成,低位芯片的抚慰信号作为下级输入信号,串接起来构成“秒”、“分”计数器芯片。

2、Tr_hour24进制计数器芯片: 24进制计数器芯片的设计图如下,时计数电路由两片74ls161串联组成。当时个位计数为4,十位计数为2时,两片74ls160N复零,从而构成24进制计数。 3、Tr_day天计数器芯片: 采用两片74ls160N和一片74ls151N串联而成,天计数器的进制受到月计数器反馈M、N影响和年计数器反馈R4的影响,在M、N不收到反馈信息的时候,天计数器为28进制,电路设计图如下:

4、Tr_week周计数器芯片: 周计数器由一块74ls161N构成一个七进制计数器,原理与秒、分、时计数器相似,电路设计图如下 5、Tr_month月计数器芯片: 采用两片74160N和两片74HC151D_2V串联而成,月计数器的反馈信息M、N影响

基于单片机电子万年历的毕业设计说明

单片机课程设计报告 电子万年历设计 姓名:建强 学号: 专业班级: 08电气(2)班指导老师:吴永 所在学院:科技学院 2011年6月30日

摘要 随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。 具体实现功能: (1)显示年月日时分秒及星期信息 (2)具有可调整日期和时间功能 (3)与即时时间同步

目录 1方案论证 (3) 1.1单片机芯片的选择方案和论证 (3) 1.2显示模块选择方案和论证 (3) 1.3时钟芯片的选择方案和论证 (4) 1.4电路设计最终方案决定 (4) 2系统的硬件设计与实现 (5) 2.1电路设计框图 (5) 2.2系统硬件概述 (5) 2.3主要单元电路的设计 (5) 2.3.1单片机主控制模块的设计 (5) 2.3.2时钟电路模块的设计 (6) 2.3.3电路原理及说明 (7) 2.3.4显示模块的设计 (8) 3系统的软件设计 (9) 3.1程序流程框图 (9) 4测试与结果分析 (11) 4.1硬件测试 (10) 4.2软件测试 (10) 4.3测试结果分析与结论 (10) 4.3.1 测试结果分析 (10) 4.3.2 测试结论 (10) 5prodeus软件仿真........................................ ..........错误!未定义书签。 5.1Proteus ISIS简介 (12) 5.2Proteus运行流程 (13) 5.3Proteus功能仿真 (13) 6课程设计总结与体会.......................................... .....错误!未定义书签。 参考文献...........................................................错误!未定义书签。 附录一:系统电路图.................................................错误!未定义书签。 附录二:系统程序...................................................错误!未定义书签。

单片机课程设计—万年历[1]

郑州轻工业学院 软件学院 单片机与接口技术课程设计总结报告 设计题目:电子万年历 学生姓名: 系别: 专业: 班级: 学号: 指导教师: 2011年12月16日

设计题目: 电子万年历 设计任务与要求: 1、显示年月日时分秒及星期信息 2、具有可调整日期和时间功能 3、增加闰年计算功能 方案比较: 方案一:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用 AT89C52单片机为控制中心,显示模块采用普通的共阴LED数码管,键输入采用中断实现 功能调整,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通 过按键盘开关实现对时间、日期的调整。 方案二:系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,电源 电路、复位电路、晶振电路等模块。主控模块采用AT89C52单片机,按键模块用四个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对 时间、日期的操作。 两个方案工作原理大致相同,只有显示模块和时钟电路不同。LED数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602液晶显示屏,显示功 能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对LED数码管来说 要昂贵些,但是基于本设计显示的东西较多,若采用LED数码管的话,所需数码管较多,而且不利于控制,因此选择LCD1602作为显示模块。DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的 应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并具 有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。单片机有定时 器的功能,但时间误差较大,且需要编写时钟程序,因此采用DS1302作为时钟电路。 对比以上方案,结合设计技术指标与要求我们选择了方案二进行设计。

数字万年历毕业设计

数字万年历毕业设计 目录 第一章数字万年历需求分析 (1) §1-1万年历的概念 (1) §1-2需求分析 (1) 第二章系统的硬件设计与实现 (2) §2-1系统电路示意图 (2) §2-2驱动电路 (2) §2-3时钟控制电路 (3) §2-4所需主要器件 (4) §2-5系统硬件概述 (4) 第三章系统的软件设计 (17) §3-1程序流程框图 (17) §3-2程序设计 (19) 第四章安装与调试 (25) §4-1安装 (25) §4-2调试 (25) §4-3软、硬件测试 (26) 4-3-1硬件测试 (26) 4-3-2软件测试 (26) §4-4测试结果分析与结论 (27) 4-4-1测试结果分析 (27) 4-4-2测试结论 (27) 第五章总结 (27) 致谢 (28) 参考文献 (29)

第一章数字万年历需求分析 §1-1万年历的概念 万年历我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。万年历只是一种象征,表示时间跨度大。 §1-2需求分析 在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,没有更大程度上的满足人们的需求。因此在这里,我想能不能把一些辅助功能加入钟表中去。在此设计中所设计的钟表不但具有普通钟表的功能,它还能实现额外的功能:世界时间、农历显示。 改革开放30年来,中国电子万年历市场从无到有,从小到大、从总量快速扩张到结构明显升级,逐步形成了有中国特色的多样化、多层次的消费市场。电子万年历市场规模比改革初期扩大了几倍乃至几十倍,其发展成就令世人瞩目。 同时随着数字技术网络技术飞速发展,今天数字万年历也得到了迅猛的发展。万年历早超越了单纯的钟表只显视时间的结构,它已经了发展成为一套完整的系统。它在日常生活发挥着巨大的作用人们对它需求也越来越高。 本系统采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LED显示电路、键盘电路,使人机交互简便易行,此外结合音乐闹铃电路、看门狗和供电电路。本方案设计出的万年历可以显示日期时间、世界时、农历,设置闹铃功能。

Java课程设计-万年历

河北科技大学课程设计报告 号:学生姓名:学 专业班级:程序设计课程设计Java课程名称:学期学年第 2 2 015 学年学期: 2 014 — 指导教师:刘伟月年 2 0

的?.................................................................. ................................1?? 2.需求分................................................................... .........析................................1? 3.总体设计................................................................... ........................................1? 4.详细设计................................................................... ........................................1?

5.软件测试................................................................... . (10) 6.课程设计总结................................................................... ................................11. 一、课程设计目的(1)熟练使用java语言编写程序,解决实际问题。? (2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;? (3)学会自己调试程序的方法并掌握一定的技巧。 二、需求分析本程序的要求为: 1.使用图形用户界面;? 2.本程序能够实现日期与星期的查询。 ?三、总体设计(1)可以通过图形界面显示日历。? (2)能以月历形式显示日期与星期。? (3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。? ?四、详细设计1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。 ,0若是取余得几既为星期几,7使总天数除以输出月份第一天为星期几的算法:2. 则为星期日。? 3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。? 4.查询年份必须为四位有效数字,否则不予显示。 程序源代码: import import import import import import; import import import ; import ; import import import java.awt.*; import import java.text.*; import ;

带语音报时功能的万年历的设计毕业设计

毕业设计(论文) 带语音报时功能的的万年历的设计

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

电子万年历课程设计

烟台南山学院单片机课程设计题目电子万年历 姓名: 所在学院:烟台南山学院 所学专业:自动化 班级: 学号: 指导教师: 完成时间:

摘要 单片机作为当今领域应用广泛的电子器件,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由5V直流电源供电,通过数码管能够准确显示时间,日期,调整时间,日期,从而到达学习、设计、开发软、硬件的能力。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本设计由单片机AT89C51芯片和LED数码管为核心,运用DS1302时钟芯片,辅以必要的电路,构成了一个单片机电子时钟。

1 绪论 (1) 2 总体方案设计与论证 (2) 2.1数字时钟方案 (2) 2.2显示方案 (3) 3 硬件系统的方案设计 (4) 3.1 系统框图 (4) 3.2 单片机的选择 (4) 3.3 时钟电路DS1302 (7) 3.4 时钟电路及复位电路 (9) 3.5 驱动电路 (9) 3.6 显示电路 (10) 3.7 按键接口 (11) 4 软件系统设计 (12) 4.1 时间信息获取程序 (12) 4.2 显示程序 (12) 5 系统调试 (13) 5.1 系统调试 (13) 5.2 时钟显示 (13) 5.3 DS1302的调试 (13) 5.4 按键电路调试 (13) 6 总结 (14) 参考文献 (15) 附录:系统程序 (16)

课设万年历..

课程设计Ⅰ设计说明书 万年历的实现 学生姓名 学号 班级 成绩 指导教师 数学与计算机科学学院 2014年3月9日

课程设计任务书 2013—2014 学年第2 学期 专业:学号:姓名: 课程设计名称:课程设计Ⅰ 设计题目:万年历的实现 完成期限:自2014 年2月24 日至2014 年 3 月7 日共 2 周 设计依据、要求及主要内容(可另加附页): 1.任务说明 运用C/ C++结构体、函数、数据结构等基础知识,按以下要求编程实现万年历的功能: 1)阐述设计思想,画出流程图;2)输入任一年,判断该年是否为闰年;输入年月日计算该日为当年的 那一天;3)输入任一年,显示该年的日历,日历包括阳历、星期;4)说明测试方法,写出完整的运行 结果,较好的界面设计。 2.要求 1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什 么; 2)逻辑设计:写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系 图; 3)详细设计:定义相应的存储结构并写出各函数的伪码算法; 4)程序编码:把详细设计的结果进一步求精为程序设计语言程序; 5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数; 6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。 算法的时间、空间复杂性分析; 7)编写课程设计报告。 3.参考资料。 以上要求中前三个阶段的任务完成后,先将算法流程图交指导老师面审,审查合格后方可进入后续 阶段的工作。设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。 指导教师(签字):教研室主任(签字):

基于51单片机温湿度检测+电子万年历的毕业设计论文

毕业设计论文 基于51单片机温湿度检测+电子万年历的设计

[摘要]:温湿度检测是生活生产中的重要的参数。本设计为基于51单片机的温湿度检测与控制系统,采用模块化、层次化设计。用新型的智能温湿度传感器SHT10主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52RC进行数据的分析和处理,为显示提供信号,显示部分采用LCD1602液晶显示所测温湿度值。系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。 [关键字]:STC89C52RC SHT10 LCD1602 按键指示灯蜂鸣器电子万年历Based on 51 single chip microcomputer temperature and humidity detection + electronic calendar design Abstract:Temperature and humidity detection is important parameters in the production of life. This design is based on 51 single chip microcomputer temperature and humidity detection and control system, adopting modular, hierarchical design. With new type of intelligent temperature and humidity sensor SHT10 main realization about the detection of temperature, humidity, temperature humidity signal acquisition is converted into digital signals through the sensor signal, using SCM STC89C52RC for data analysis and processing, provides the signal for display, display part adopts LCD1602 LCD display the measured temperature and humidity values. Simple circuit, high integration, work stability, convenient debugging, high detection precision, has certain practical value. Key words:STC89C52RC SHT10 LCD1602 key indicator light buzzer The electronic calendar

课程设计万年历的设计52503328

课程设计万年历的设计52503328

兰州理工大学 计算机与通信学院 2014年秋季学期 面向对象课程设计 题目:万年历的设计

序言 《面向对象的程序设计》是计算机专业一门重要的专业基础课。此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。通过课程设计,学生在下述各方面的能力应该得到锻炼: (1)进一步巩固、加深学生所学专业课程《C++语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。 (4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象的程序设计方法。 (6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。

目录 摘要 (2) 第一章系统总体设计 (3) 一.理论说明 (3) 二.流程图说明 (4) 1.总体流程说明图 (4) 2.部分流程说明图 (4) 第二章系统详细设计 (7) 一.主要组成部分 (7) 二.源程序 (9) 第三章系统测试 (34) 四软件使用说明书 (40) 一.系统运行环境 (40) 二.系统操作提示 (40) 总结 (41) 参考文献 (42) 致谢 (42)

Java万年历课程设计报告

Java课程设计 设计题目:万年历 系别:计算机科学与工程学院 专业:信息管理与信息系统 学号: 1100340116 姓名:岑少兵 指导教师:汪华澄 时间: 2013-6-29

目录 摘要 (3) 系统功能结构图 (3) 1 系统模块设计 (4) 1.1 需求设计 (4) 1.2 开发和运行环境 (4) 1.3 功能设计 (4) 2 万年历详细设计思路 (4) 2.1 程序设计思路 (5) 2.2 程序运行主界面 (5) 2.3 流程图 (6) 3 各模块功能实现及代码说明 (6) 3.1 MainFramel类 (6) 3.2 Lunar类 (14) 3.3 national类 (22) 3.4 SetClock类 (26) 4 小结 (34) 5 参考文献 (34)

基于Myeclipse的万年历 摘要:万年历是日常生活中不可或缺的小工具,用万年历我们可以准确地查到当前,以后或是过去的日期,极大地方便了我们的生活。在万年历上添加了显示本地时间以后会更加准确地显示时间。无论是对于我们学生还是上班族或是自由职业者需要经常查看和查找万年历来规划自己将要做得一些事情,或是回忆在过去的时间里已经做过的事情,使之更加有利于提升我们的学习或是工作进度。 系统功能结构图:主要描述系统要实现的各个模块的功能。

1系统模块设计 1.1需求分析 本程序的要求为:1.使用图形用户界面 2.能够实现日期与星期的查询 3.能够显示农历 4.能够查看世界时间 5.能够添加闹钟 1.2 开发和运行环境 开发工具:Myeclipse 运行环境: windows 7 1.3功能设计 本程序要构建的万年历程序,其功能有以下几个方面: (1)通过 (2)提供年份、月份的下拉形式菜单来选择年份和月份。 (3)通过Lunar类实现农历日期。 (4)通过national类实现世界时间。 (5)能以月历形式显示日期与星期。 (6)通过SetClock类来实现闹钟功能。 (7)通过点击世界时间按钮查询世界时间 (8)通过点击闹钟按钮设置闹钟 (9)显示系统当前时间和日期。 (10)显示作者信息。 2万年历详细设计思路 2.1程序设计思路 1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,

单片机课程设计报告(万年历)

. . 页脚目录 一、摘要 (2) 二、设计任务 (4) 三、总体方案设计与论证 (4) 1、液晶显示模块 (4) 2、实时时间计算模块 (5) 3、实时环境温度采集模块 (5) 4、报警模块 (6) 5、设置模块 (6) 四、总体方案组成框图 (7) 五、系统硬件设计 (8) 1、LCD显示模块 (8) 2、实时时间计算模块 (12) 3、实时环境温度检测模块 (16) 4、报警模块 (21) 5、设置模块 (22) 六、系统软件设计 (23) 七、系统硬件电路设计 (24) 八、系统硬件PROTEUS仿真原理图 (25) 九、系统硬件仿真运行情况图 (26) 1、显示欢迎界面 (26) 2、显示实时时间 (26) 3、显示当前温度 (27) 4、时间设置 (27) 5、最高报警温度设置 (28) 6、闹钟时间设置 (28) 7、超温 (29) 8、闹钟时间到 (29) 附录一:实物图 (30) 附录二:PCB图 (32) 附录三:源程序代码 (33) 附录四:参考文献 (62)

. . 页脚 摘要 单片机就是微控制器,是面向应用对象设计、突出控制功能的芯 片。单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括三大功能:实时显示年、月、日、时、分、秒;实时监测环境温度(可根据需要启动高温报警功能);电子闹钟。M bn 本设计采用的是AT89S52单片机,该单片机采用的MCU51核,因此具有很好的兼容性,部带有8KB的ROM,能够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便。 计时芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。 温度检测采用DALLAS公司的数字化温度传感器,该芯片采用的是独特的“一线总线”的方式与单片机进行通信,一线总线独特而且经济的特点,是用户可以轻松的组建传感器网络,为测量系统的构建引入全新的概念。实时温度采用一线总线的方式传输大大的提高了信号的抗干扰性,分辨率可通过软件设置,其小巧的体积为各种环境下测量温度提供了方便。 显示器件采用通用型1602液晶,可显示32个字符,如果使用数

电子万年历的毕业设计

毕业设计(论文) 论文题目:基于AT89S51的电子万年历 所属系部: 专业: 学生姓名:班级 指导老师: 二零一一年五月二十七日

电子万年历 摘要:本设计以数字集成电路技术为基础,单片机技术为核心。软件设计采用模块化结构,汇编语言编程。系统通过LED显示数据,可以显示公历日期(年、月、日、时、分、秒)。在内容安排上首先描述系统硬件工作原理,着重介绍了各硬件接口技术和各个接口模块的功能;其次,详细的阐述了程序的各个模块和实现过程。 关键词:单片机;万年历 Electronic calendar LIU TAO Xian aviation technology college Abstract: The design is based on digital integrate circuit, microcontroller technology is the core of the system. The software design uses module structure and adapts microcontroller assemble language. The system can display calendar date, including year, month, week, hour, minute, second and week. The work principle of the system is discussed in this paper, hardware interface and module function are reported primarily in the system. 目录 前言……………………………………………………………………………………...II

万年历C++课程设计报告

徐州师范大学科文学院本科生课程设计 课程名称:计算机程序设计实训 题目:万年历的设计 专业班级:电子信息工程08电信 学生姓名: 学生学号: 日期:2010/12/20 指导教师:姜芳艽 科文学院教务部印制

指导教师签字: 年月日

目录 摘要...................................................错误!未定义书签。 Abstract ...................错误!未定义书签。 1 绪论...................................................错误!未定义书签。 课题的设计......................................................................... 错误!未定义书签。 课题的背景……………………………………………………………………….错误!未定义书签。 课题的目的………………………………………………………………………..错误!未定义书签。 课题的意义………………………………………………………………………..错误!未定义书签。 2 设计方案简述 ..................................................... 错误!未定义书签。 设计总体规划..................................................................... 错误!未定义书签。 实现的功能………………………………………………………………………..错误!未定义书签。 结构模块分析……………………………………………………………………...错误!未定义书签。 3 详细设计 ............................................................. 错误!未定义书签。 设计思路............................................................................. 错误!未定义书签。 设计语言…………………………………………………………………………..错误!未定义书签。 设计程序流程图…………………………………………………………………..错误!未定义书签。 模块详细设计....................................................................... 错误!未定义书签。 大月和小月的定义………………………………………………………………..错误!未定义书签。 闰年与非闰年二月的定义………………………………………………………..错误!未定义书签。 日历表的输出……………………………………………………………………..错误!未定义书签。 4 设计结果及分析.................................................. 错误!未定义书签。 软件测试............................................................................... 错误!未定义书签。 设计成果............................................................................... 错误!未定义书签。 5 总结..................................................错误!未定义书签。 参考文献 ................................................................. 错误!未定义书签。

万年历毕业设计

常州轻工职业技术学院 电子制作论文(设计) 题目:基于51单片机的电子万年历的制作专业:电子信息工程 作者: 指导教师(职称): (副教授)二0一0年五月二十六日

基于51单片机的电子万年历制作 电子信息工程专业 【关键词】单片机万年历温度传感器DS18B20 时钟芯片DS1302 【绪论】万年历,就是记录一定时间范围内(比如100年或更多)的具体阳历与阴历的日期的年历,方便有需要的人查询使用。万年只是一种象征,表示时间跨度大。这次设计通过对万年历系统的设计,详细介绍了51 单片机应用中的按键处理、液晶、定时中断、温度传感器DS18B20原理。该系统能够显示年、月、日、小时、分钟、秒、星期、农历、温度,通过按键可以修改时间和设定闹钟等功能。此系统结构简单、功能齐全,具有一定的推广价值。 1.系统说明 1.1方案选择 ●方案一:采用日历时钟芯片DS1302来产生时间,数据经单片机处理后送到液晶显示。DS1302 内部有晶体振荡器、振荡电路、充电电路和可充电锂电池。此外,片内有114B的RAM。 ●方案二:采用纯单片机制作。 方案一中因为有了日历时钟芯片,这就使得单片机的软件部分简单很多。但是考虑到制作简单,因此采用方案一。 1.2 系统方框图: 如图1-1所示: 1.3 说明 系统由51系列单片机stc89c52、按键、温度采集、液晶显示、闹钟报时,电源等部分构成。单片机部分包括时钟电路、复位电路;按键部分能够实现对时间的调整和定时时间的设定。四个按键的功能分

别为:退出、闹钟、设置、修改。温度采集部分包括温度传感器。传感器采样进来的信号经自身A/D转换后送给单片机,经软件处理后送至液晶1602管显示。 2.电路模块说明 2.1 单片机电路 2.1.1 时钟电路 时钟系统是单片机的心脏,在本次设计中,包括中央处理器在内的所有单片机都是时钟系统所提供的节拍工作的。 时钟电路由外接谐振器的时钟振荡器、时钟发生器及关断控制信号等组成。时钟振荡器是单片机的时钟源,时钟发生器对振荡器的输出信号进行二分频。 CPU的时钟振荡信号有两个来源:一是采用内部振荡器,此时需要在XTAL1和XTAL2脚连接一只频率范围为0—33MHZ的晶体振荡或陶瓷振荡器及两只30pf电容。二是采用外部振荡,此时应将外部振荡器的输出信号接至XTAL1脚,将XTAL2脚浮空。 利用单片机内部的定时功能来实现时钟的走时,通过编程实现每50毫秒产生一次中断,中断20 次后,秒单元加1,秒单元加到60时,跳回到零再继续加,同时分单元加1。以次类推,从而实现秒、分、小时、年的走时。 本次设计中采用的是内部振荡器,频率为12MHZ的晶体振荡器及30pf的瓷片电容。如图2-1所示。 图2-1时钟电路 2.1.2复位电路 复位是指在规定的条件下,单片机自动将CPU以及与程序运行相关的主要功能部件、I/O口等设置为确定初始状态的过程。如果电路参数不符合规定的条件或干扰导致单片机不能正确的复位,系统将无法进行正常的工作,因此,复位电路除了要符合厂家规定的参数外,还要滤除可能的干扰。 AT89S52单片机内部有一个由施密特触发器等组成的复位电路。复位信号是从其9脚,即RST脚输入的。AT89S52单片机规定,当其处于正常工作状态,且振荡器工作稳定后,在RST端有从高电平到低电平,且高电平时间大于两个机器周期的复位信号时,CPU将完成对系统的复位。有两点需要注意:一、复位信号是高电平有效,二、高电平的保持时间必须大于两个机器周期,可见高电平保持时间与振荡频率有关。本次设计中采用上电复位电路,上电复位是指在系统上电时,RST端自动产生复位所需要的信号将单片机复位,本次设计中的上电复位电路如图所示。上电时,RST端高电平的维持时间取决于R(1k)和C(22uF)的值。要使单片机可靠的复位,设计中使其维持的时间足够长。如图2-2所示。

数字万年历课程设计报告

数字万年历课程设计报告

课程名称:微机原理课程设计题目:万年历

摘要 随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。 本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。 本设计是一种基于STC89C51单片机控制,DS1302报时的数字时钟设计。它具有多项显示和控制功能。能用LCD实时显示当前年、月、日、星期、时间;可对时间进行调整;具有调整时间和日期功能。 本设计通过一个基于单片机的能实现万年 历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器

AT89C51、时钟电路DS1302、显示电路、按键电路和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。 关键词:STC89C52单片机、LCD液晶显示、DS1302时钟芯片

目录 一、设计任务与要求 ........................................................................... - 6 - 1.1 设计任务 .............................................................................................. - 6 - 1.2 设计要求 .............................................................................................. - 6 - 1.3 发挥部分 .............................................................................................. - 6 - 二、方案总体设计 ..................................................................................... - 7 - 2.1 显示部分 .............................................................................................. - 7 - 2.2 时钟信号的选择 .................................................................................. - 8 - 2.3 总体方案 .............................................................................................. - 8 - 三、硬件设计 ..................................................................................... - 10 - 3.1 单片机最小系统 ................................................................................ - 10 - 3.2 DS1302时钟电路............................................................................... - 17 - 3.3 LCD液晶显示模块............................................................................ - 19 - 3.4 按键电路 ............................................................................................ - 21 - 3.5 电源指示灯部分 ................................................................................ - 25 - 四、软件设计 ..................................................................................... - 26 - 4.1 主程序流程图显示 ............................................................................ - 26 - 4.2 时间设定程序流程图 ........................................................................ - 27 - 五、系统仿真与调试 ......................................................................... - 29 - 5.1 Proteus仿真软件简介 ....................................................................... - 29 - 5.2 仿真及实物 ........................................................................................ - 31 - 六、设计总结 ..................................................................................... - 34 - 七、参考文献 ..................................................................................... - 35 -

相关文档
最新文档