收藏 分销(赏)

基于STM32的万年历设计.doc

上传人:精**** 文档编号:1285216 上传时间:2024-04-21 格式:DOC 页数:31 大小:244.04KB
下载 相关 举报
基于STM32的万年历设计.doc_第1页
第1页 / 共31页
基于STM32的万年历设计.doc_第2页
第2页 / 共31页
基于STM32的万年历设计.doc_第3页
第3页 / 共31页
基于STM32的万年历设计.doc_第4页
第4页 / 共31页
基于STM32的万年历设计.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

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

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

3、重量轻、功耗低、寿命长、价格低、无辐射、无污染、接口控制方便等优点。 截至目前,我国在液晶显示取得较大进步,我国LCD产业已经走过了近30年的历程.经历几次大的投资浪潮之后,我国内地已经成为世界最大的TN-LCD(扭曲液晶显示器)生产基地和主要的STN-LCD(超扭曲液晶显示器)生产基地,并且从2003年开始,涉足TFT-LCD(薄膜晶体管液晶显示器)领域.本课题设计采用STM32F103VE开发板,实现在LCD显示屏上显示由按键可操控的万年历功能。本实验用到的硬件部分主要有STM32开发板、USB线、LCD液晶模块,在LCD显示屏上显示相关内容。综上所述万年历应具有读取方便、显示直观、功能多

4、样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。本课题利用 STM32 的 RTC 实现一个简易的电子时钟,在液晶显示屏中显示时间值。显示时间格式为XX:XX:XX(时:分:秒),当时间计数为: 23: 59: 59 时将刷新为: 00: 00: 00。1.功能描述 1.1设计要求1.具有数字时钟功能。2.具有简单日历功能。3.具有手动校准时间功能。4.具有闰年识别功能。1.2 RTC(实时时钟)简介实时时钟是一个独立的定时器。 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。RTC 模块和时

5、钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。系统复位后,禁止访问后备寄存器和 RTC,防止对后备区域(BKP)的意外写操作。执行以下操作使能对后备寄存器和 RTC 的访问:1.设置寄存器 RCC_APB1ENR 的 PWREN 和 BKPEN 位来使能电源和后备接口时钟。2.设置寄存器 PWR_CR 的 DBP 位使能对后备寄存器和 RTC 的访问。当我们需要在掉电之后,又需要 RTC 时钟正常运行的话,单片机的 VBAT脚需外接 3.3V 的锂电池。当我们重新上电的时候,主电源给 VBAT 供电,当系统掉电之后 VBAT

6、给 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可选择的

7、芯片方案整个系统用STM32F103VE单片机作为中央控制器,由单片机执行采集内部RTC值,时钟信号通过单片机I/O口传给LCD12864,单片机模块控制驱动模块驱动显示模块,通过显示模块来实现信号的输出、LCD12864的显示及相关的控制功能。系统设有按键模块用于对时间进行调整及扩展多个小键盘。方案一:采用89C51芯片采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时

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

9、0余次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。若采用单片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。这样就实现了直接用单片机来实现电子万年历设计。方案三:采用STM32单片机STM32是一个低功耗,高性能32位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器。主要性能有:与MCS-51单片机产

10、品兼容、全静态操作:0Hz33Hz、 三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符、易编程。从单片机芯片主要性能角度出发,本数字电子钟单片机芯片选择设计采用方案采用STM32F103VE。1.3.2 显示模块选择方案和论证: 方案一:采用ILI9341LED液晶显示屏采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,显示质量高,没有电磁辐射,可视面积大,应用范围广,画面效果好,数字式接口,匀称小巧,功耗小。 方案二:采用点阵式数码管显示动态

11、显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。 点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示. 方案三: 采用LED数码管动态扫描LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 从节省单片机芯片I/O口和

12、降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案一,既ILI9341LED显示。 1.3.3时钟芯片的选择方案和论证:方案一:直接采用单片机定时计数器 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。 方案二:采用DS1302时钟芯片实现时钟采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300n

13、A.方案三:采用STM32的RTC定时器由于STM32自带了实现计时功能的RTC时钟计数器,可以直接使用。1.3.4电路设计最终方案综上各方案所述,对本课题方案选定: 采用STM32F103VE作为主控制芯片; STM32自带的RTC提供时钟;LCD液晶显示作为显示。1.4电源电路 本设计所需电源电压为直流、电压值大小5V的电压源 。从硬件实物设计简易程度与经费方面考虑,用两节电压值大小2.5V干电池与电路电压源引脚相连接即可达到硬件设计要求。即本设计可采用两节电压值大小2.5V干电池做硬件电路电压源。为了方便改写程序,本次实验采用USB线连接电脑进行操作。 1.5按键电路 本设计所需按键用于

14、进行显示时间的调整与设置扩展的小键盘。 单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求。2.硬件设计2.1设计组成框图电 脑USB线STM32开发板LCD液晶模块按键区 图 设计的组成框图2.2 STM32F103VE实验板STM32F103系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K

15、)。芯片集成定时器,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 晶振,提供

16、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 接口

17、的16位总线-FSMC。 3路共16通道的12位AD输入,2路共2 通道的12位 DA 输出.支持片外独立电压基准.CPU操作电压范围:2.0-3.6V2.3 USB线USB开发涉及主机和设备,为了避免开发驱动程序,使用Windows自带的驱动程序。所以设备枚举成HID类设备。USB鼠标就是标准的USB-HID设备。不过操作系统阻止了应用程序直接访问USB鼠标返回的报告。所以本例使用自定义HID设备。一来免去了开发驱动程序,二来自定义的HID设备应用程序和设备可以自由收发数据(仅指数据内容)。 USB是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口即插即用和热插拔功能。USB

18、接口可连接127种外设,如鼠标和键盘等。USB是在1994年底由英特尔等多家公司联合在1996年推出后,已成功替代串口和并口,已成为当今电脑与大量智能设备的必配接口。USB版本经历了多年的发展,到如今已经发展为3.0版本。对于大多数工程师来说,开发USB2.0 接口产品主要障碍在于:要面对复杂的USB2.0协议、自己编写USB设备的驱动程序、熟悉单片机的编程。这不仅要求有相当的VC编程经验、还能够编写USB接口的硬件(固件)程序。所以大多数人放弃了自己开发USB产品。为了将复杂的问题简单化,西安达泰电子特别设计了USB2.0协议转换模块。USB20D模块可以被看作是一个USB2.0协议的转换器

19、,将电脑的USB2.0接口转换为一个透明的并行总线,就象单片机总线一样。从而几天之内就可以完成USB2.0产品的设计。2.4液晶显示器LCD控制器简介 LCD液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。LCM(LCD Module)即LCD显示模组、液晶模块,是指将液晶显示器件,连接,控制与驱动等外围电路,PCB电路板,背光源,结构件等装配在一起的组件。由于液晶显示屏功耗低、体积小,承载的信息量大,因而被广泛用于信息输出、与

20、用户进行交互。由于 STM32 内部没有集成专用的液晶屏和触摸屏的控制接口,所以在显示面板中应自带含有驱动芯片的驱动电路(液晶屏和触摸屏的驱动电路是独立的),STM32 芯片通过驱动芯片来控制液晶屏和触摸屏。以本实验3.2 寸液晶屏(240*320)为例,它使用 ILI9341 芯片控制液晶屏,通过 XPT2046 芯片控制触摸屏。LCD 为非发光性的显示装置,它需要借助背光源才能达到显示功能,LED 控制器就是用来控制液晶屏中的 LED 背光源。 2.4.1液晶显示器在内部电路结构上主要构成1.驱动板(也叫主板):主要是用以接收、处理从外部送进来的模拟(VGA)或者数字(DVI)视频信号,并

21、通过屏线送出信号去控制液晶屏(PANEL)正常工作。驱动板上含有MCU单元,它是液晶显示器的检测控制中心和大脑。 2.电源板:用于将90240V 的交流电压转变为12V、5V、3V 等的直流电供给显示器工作。3.背光板(也叫高压板):用于将主板或电源板输出的12V 的直流电压转变为PANEL 需要的高频的15001800V 的高压交流电,用于点亮PANEL的背光灯。电源板和背光板有时会做在一起也就是所谓的电源背光二合一板。 4.液晶屏:液晶显示用模块,它是液晶显示器的核心部件,其包含液晶板和驱动电路。其中,液晶屏是液晶显示器内部最为关键的部件,它对液晶显示器的性能和价格具有决定性的作用。2.4

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

23、同比例的混合可以得出各种色彩。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

24、软件来制作中文字库。打开软件,点击“自动批量生成字库”按钮选项,点击选择“二级汉字库”按钮。在“源字体”选项里面做如下设置,需要注意的是大小问题,因为我们本次的设计目标是实现16*16的汉字,所以在此选择小四字体。设置好之后如下点击“开始转换进程”按钮.就会在安装目录下或者你设置好的目录下生成.c后缀的字库文件。对LCD显示来说,只要能够在指定的位置描写制定颜色的点,那么就能够很好地根据汉字字模信息来描写汉字。在此,为了能够更好的清楚字模的取向和高低位的排列顺序,可以现先在pc测试刚才制作好的库文件。回到“字模III-增强版v3.91”软件,采用与之前同样的方式生成bin格式的字库文件(即“生

25、成格式”选项设置为“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 = O

26、STaskCreateExt(AppTaskUserIF,(void *)0,(OS_STK*)&AppTaskUserIFStkAPP_TASK_USER_IF_STK_SIZE-1,APP_TASK_USER_IF_PRIO,APP_TASK_USER_IF_PRIO,(OS_STK *)&AppTaskUserIFStk0,APP_TASK_USER_IF_STK_SIZE,(void *)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR); /触摸屏任务- os_err = OSTaskCreateExt(AppTaskKbd, (void *)0,

27、(OS_STK *)&AppTaskKbdStkAPP_TASK_KBD_STK_SIZE-1, APP_TASK_KBD_PRIO, APP_TASK_KBD_PRIO, (OS_STK *)&AppTaskKbdStk0, 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_StkClock_Updata_STK_SIZE-1,Cloc

28、k_Updata_PRIO,Clock_Updata_PRIO,(OS_STK *)&Clock_Updata_Stk0,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(); /* 触摸屏校准

29、*/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(五

30、,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); /

31、设置中文字体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(日);/

32、显示日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 str15; / 字符串暂存 u8 i,k; static flag=0; #if (GUI_SUPPORT_CURSOR|GUI_SUPPORT_TOUCH)GUI_CURSOR_Show();/鼠标显示 #endif WM_SetCreateFlags(WM_CF_MEMDEV);

33、 /* Automatically use memory devices on all windows */ if(flag=0)/初始化按键,只执行一次。 /建立按键F1-F5 _ahButton0 =BUTTON_Create(5, 0, 32,13, GUI_KEY_F1 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);_ahButton1=BUTTON_Create(5, 29, 32,13, GUI_KEY_F2 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);_ahButton2=BUTTO

34、N_Create(53, 0, 16,13, GUI_KEY_F3 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);_ahButton3=BUTTON_Create(53,29,16,13, GUI_KEY_F4 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);_ahButton4=BUTTON_Create(85, 0, 16,13, GUI_KEY_F5, WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);_ahButton5=BUTTON_Create(85

35、,29, 16,13, GUI_KEY_F6, WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV); /按键字体设置 BUTTON_SetFont(_ahButton0,&GUI_Font6x8);/GUI_Font16_ASCII BUTTON_SetFont(_ahButton1,&GUI_Font6x8);/GUI_Font16_ASCII BUTTON_SetFont(_ahButton2,&GUI_Font6x8);/GUI_Font16_ASCII BUTTON_SetFont(_ahButton3,&GUI_Font6x8);/GUI_Fon

36、t16_ASCII BUTTON_SetFont(_ahButton4,&GUI_Font6x8);/GUI_Font16_ASCIIBUTTON_SetFont(_ahButton5,&GUI_Font6x8);/GUI_Font16_ASCII /按键背景色设置 BUTTON_SetBkColor(_ahButton0,0,GUI_DARKMAGENTA); /按键背景颜色BUTTON_SetBkColor(_ahButton1,0,GUI_DARKMAGENTA); BUTTON_SetBkColor(_ahButton2,0,GUI_DARKMAGENTA); BUTTON_SetBk

37、Color(_ahButton3,0,GUI_DARKMAGENTA); BUTTON_SetBkColor(_ahButton4,0,GUI_DARKMAGENTA); BUTTON_SetBkColor(_ahButton5,0,GUI_DARKMAGENTA); /按键前景色设置 BUTTON_SetTextColor(_ahButton0,0,GUI_WHITE); BUTTON_SetTextColor(_ahButton1,0,GUI_WHITE);BUTTON_SetTextColor(_ahButton2,0,GUI_WHITE);BUTTON_SetTextColor(_ah

38、Button3,0,GUI_WHITE);BUTTON_SetTextColor(_ahButton4,0,GUI_WHITE);BUTTON_SetTextColor(_ahButton5,0,GUI_WHITE);/按键显示字符BUTTON_SetText(_ahButton0, +); BUTTON_SetText(_ahButton1, -);BUTTON_SetText(_ahButton2, +); BUTTON_SetText(_ahButton3, -); BUTTON_SetText(_ahButton4, +);BUTTON_SetText(_ahButton5, -);f

39、lag=1; u8 key = GUI_GetKey(); /实时获得触摸按键的值if(key=40) /年数增加按钮s_time.tm_year+; /F1if(s_time.tm_year2099)/超过范围处理s_time.tm_year=1970;else if(key=41)/年数减小按钮s_time.tm_year-; /F2if(s_time.tm_year12)/超过范围处理s_time.tm_mon=1;else if(key=43) /月数减小按钮s_time.tm_mon-; /F4if(s_time.tm_mongetDays(s_time.tm_year,s_time

40、.tm_mon)/超过范围处理s_time.tm_mday=1;else if(key=45) /日数减小按钮s_time.tm_mday-; /F6if(s_time.tm_mday0)/超过范围处理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(&GU

41、I_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);./

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服