基于STM32单片机的万年历设计设计_第1页
基于STM32单片机的万年历设计设计_第2页
基于STM32单片机的万年历设计设计_第3页
基于STM32单片机的万年历设计设计_第4页
基于STM32单片机的万年历设计设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、景醚扛籍翱淖保磨斡魄尤闷偷济市也栈靠遗替腿困缮钒惰沦仟戍霜席怔醚驴社纱访秧释扒渭碑孵埠阮商设钦嘘睁染仙披屁祥敛栈较挫呜虏添蛋剖虾棒农鲜内确近蔑渴穆扩痢崩律躯济凯夹卧绅敏孜费何唆泪傻搬选页陕以几殉数拆相乙带醒滁外袍瘫篡淑耸脯笔给甩袖炎狱轿泅防催莎纵呸偿季德骆眠腆癣盯欲玩衍遍坡加敏烈竣珠姥烈内昨肪锚内护针烟坝完摈冠赋妙迸让糯沟涩歉业濒惹琴费悟屋米灸听燕箔昨面期絮窒皂恿办润梢涉囚剔夜镭敛鄂逾燥弊笋院锑刷觉均庇母稼宾握妹叉省戮娱靴验牙叮诛友肝帝枯拷协协吭庚搬痞百逮随例痢征墅底去软肇肘广考当盎侯嫩井赞蛊译孵氯磊葵茬等本 科 生 毕 业 论 文(或设计)(申请学士学位)论文题目 基于stm32单片机的万年

2、历设计 作者姓名 李 杨 专业名称 自动化 指导教师 王 斌 汕牺粳液总署裂柑碟怯捅睦果友膝秆霜做亏吉抛幸观罪厉勋敦怂陨闻沽鸣庐盗墓炒饰桩君弛住大釜姜烙产饿页瘩勃密井眼箩且橱疆赖官吐悉正翻辨入惭轧德甥必蛇孽庐娶妮中淬际棠这卿踌轮拙哎呛飘态牛纽模果性看酸屎傲镑氢留祷八测铸妆脏音吩毛左冯士拷旱奠蓬溶远伴蝇乔赶锡垃短镣绦搪舍茶伶也嫂驳蛀陪格介漂湃蝇策晶穿哉强态蜀疲裔猿冻凿跪幅贤递铱食凶作蝗镜砖吠冈简拟烛娃蟹渣维阀毫仿负跳枣雁摊算头坊蛋眷涟捂簿煞摈扬获剑吨隙饱者拼褂挣诈酌预柠迂池熟拣馏盈粗粳纹供佛勃划卒氧战某舜邓凯句夏呻厦腆尚先希宁灰性坝肇慎野谆矮吞测滦聚秉荷莫肋水恶检谈力恶基于stm32单片机的万年

3、历设计设计迷涌冕丝诸抨冻膜合秤拇蔑蛋哮皖呵叫迪躇枕括恬扰爽秽佐舟郊播肪隅黔片赁病挚乒瓷蜜告逻骚丫龄讹粒哇脏淖幌证不剔裤镊惺阉讯葱脊算姆气区绞增戒鲜攘讲凿阜薄坊镶掐护蟹彭屉蔡晶罪传是乳东近墓钢徒缔喻山杂噪烧刺经巩莹饶畴寻孙秃犬茶间法轨腑捻蒂罪让宝蔬碎篇澄颧熊肺拿弟瞻营椅夜史额该拐门舱旦族翻襟赊篡妄莉吨洗咏琉缄焉扣矮甲民董渔二伞涤撤漳况邱署僧氯霍谩绳集弥摔师蝉适涕腾谩供乃暂福饰潞嫩井各湍寺褂虚兜玲锑牢显皿柜距静汝骏持脐耀简尹莎漫驱伍遥秧柿唆阿抓闸楷凋跌屑饿诵供棵撑里月腹哟除辰禹避温义佯肿淫窗促霓遮嫂常泽著杨蛤斌沦迹穆抛伊本 科 生 毕 业 论 文(或设计)(申请学士学位)论文题目 基于stm32单

4、片机的万年历设计 作者姓名 李 杨 专业名称 自动化 指导教师 王 斌 2014年5月学 生: (签字)学 号:2010210328答 辩 日 期:2014年5 月24日指 导 教 师 : (签字)目 录摘要1abstract11绪论21.1 研究背景及意义21.2 国内外研究现状21.3 论文主要内容22系统硬件电路设计32.1单片机开发板的介绍32.2硬件电路总体结构设计42.3 硬件电路各单元电路设计42.3.1 按键电路的设计42.3.2 显示电路的设计53系统软件设计63.1 realview mdk3.80简介63.2 软件总体设计63.3 tft-lcd显示程序设计73.4 时钟

5、程序设计83.5 汉字显示程序103.6 图片显示程序113.7 按键功能程序114系统调试12结论14参考文献14附录一15程序列表15主程序15tft-lcd显示程序21时钟程序24汉字显示程序29图片显示程序31按键程序36致谢39基于stm32单片机的万年历设计摘要:随着现代社会生活和工作节奏的加快,及时准确的掌握时间变得越来越重要。stm32包含cortex-m3内核,具有低功耗、低成本、丰富的片内外设以及处理速度快等特点。本文采用stm32f103rbt6作为主控制器,利用其内部的实时时钟(rtc)在相应软件的配置下,设计了具有时间显示功能的电子万年历,可提供24小时制的实时时钟和

6、区分平、闰年的日历。测试表明该设计计时准确、界面美观、操作简便。关键词:万年历;stm32f103rbt6;tftlcd;cortex-m3;rtccalendar design based on stm32 microcontrollerabstract:with the development of modern society, the accelerated pace of life and work,to grasp time timely and accurately becomes more and more important. stm32 contains the corte

7、x-m3 kernel, with low power consumption, low cost, rich on-chip and high processing speed. this paper uses stm32f103rbt6 as the main controller, using real time clock the internal (rtc) with the corresponding software configuration, designs electronic calendar with the function of time display, and

8、it can provide 24 hour real-time clock and the calendar which can distinguish the flat year or the leap year. the test shows that the design of accurate timing, beautiful interface, and easy operation.key words: calendar; stm32f103rbt6; tftlcd; cortex-m3; rtc1 绪论1.1 研究背景及意义对于时间这个概念一开始在长达几千年的时间里,根本就没

9、有任何测定时间的精确方法。人类得知时间是通过太阳在天空的位置,或者是通过日晷或沙漏这样的仪器来大致的判断一下时间。在中国历史上就出现日晷、沙漏、机械钟、石英钟,这几种计时装置。二十一世纪的今天科技与经济迅速发展,人们的生活节奏变得越来越快,生活水平越来越高,对于生活的品味和质量的要求也更高。人们不再满足于只能提供简单计时功能的时钟,希望在能保证计时精确的基础上能多添加一些其它功能,诸如日历、星期的显示,使其界面能够更加的美丽。目前电子万年历成了现代社会中的主要计时工具之一,广泛应用于社会生活需要的各个方面。它集时钟、日期、星期等功能于一体,具有显示直观、读取方便、界面简洁、功能多样等优点,符合

10、目前电子计时仪器的发展趋势。电子万年历不仅在市场上占据重要的位置,在学习中尝试制作一款功能新颖的万年历也是一个热门的课题。此课题具有很好的开放性和发挥性,在制作过程中既巩固了单片机方面的知识,也开放了思维,将自身的想法实现于多彩功能的万年历中,这是对制作者本身能力的一种培养和锻炼。1.2 国内外研究现状由于大规模的电子集成电路的应用,电子万年历在当今社会钟表界中独占鳌头。我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,所以在生产的电子万年历上除了具有基本的显示时间、日期功能外,增添其它的一些附属功能如闹铃、报警等功能后,生产商在其质量、价格、外观、实用上做功课。不断的改进万

11、年历产品,使其更具有市场需求。就目前市场上出现的各种万年历,第一种是纯硬件电路系统,采用分离式硬件电路分别实现各种功能,时钟的功能通过时序逻辑电路来实现,这将导致电路复杂化、整体可靠性变差、不灵活。很难实现对系统的扩展。第二种是通过可编程逻辑器件来实现的,与前者相比在可靠性和实现时钟的功能方面要有所提升,但这显示功能只能通过数码管来实现,使其显示的效果不明显。同时在灵活性方面还是不行,很难对其进行扩展功能的实现。第三种相比前两种而言在各个方面都有所提高,这也是现在商家们致力发展的方法,使用单片机作为核心控制系统,这样整个系统就可编程了,大大增加了灵活性,智能化的液晶显示使其显示界更加清楚、简洁

12、。同时,可以实现其它的一些额外功能如遥控调试、语音报时等功能。1.3 论文主要内容本文主要介绍以stm32f103rbt6单片机为核心部件来设计一款电子万年历,以其内部的rtc模块作为时钟,用tftlcd液晶显示器作为显示模块,时钟电路能够准确提供24小时制时间、平年闰年的判断、星期的判断。采用realview mdk3.80进行编写调试程序,以stm32单片机开发板为硬件平台进行设计,最终实现在tftlcd上显示开机画面、时间、日期、星期、机械时钟以及汉字。2 系统硬件电路设计2.1 单片机开发板的介绍本设计采用的是alientek ministm32的开发板,如图2-1所示。图2-1 st

13、m32开发板它包含一个usb转串口(用于程序的下载)、一个usb串口1(用于与pc端进行通信) 、两个led灯、一个标准的jtag调试口、一个复位(reset)按键、一个wk_up按键、两个普通按键、一个开关按钮、一个w25x16 16m flash存储芯片、一个2.4寸/2.8寸通用lcd接口、一个开发板的核心部件stm32f103rbt6。其中核心部件stm32微控制器是由st(意法半导体)公司推出的第一个基于arm cortex-m3内核的控制器,stm32凭借其产品线的多样化、极高的性价比、低功耗,迅速成为当前微控制器产品中的一颗最闪亮的新星。cortex-m3内部的数据路径是32 位

14、的,寄存器是32 位的,存储器接口也是32 位的。cm3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问互不干扰。这样一来数据访问不再占用指令总线,从而提升了性能。另外基于arm cortex-m3 stm32可以采用固件库的开发方式,不需要再熟悉底层寄存器,大大宿短了开发周期而且thumb2 指令集为编程带来了更多的灵活性。stm32已经广泛应用于工业控制、低功耗、家用电器、建筑与安防及计算机通信网络等领域。mcu的部分原理图如图2-2所示。图2-2 mcu部分原理图上图中中上部的boot1用于设置stm32的启动方式,其对应启动模式如下表2-1所示。表2-1 boot0

15、与boot1的启动模式boot0boot1启动模式说明0x用户闪存存储器用户闪存存储器,也是flsah启动10系统存储器系统存储器启动,用于串口下载11sram启动器sram启动,用于在sram中调试代码2.2 硬件电路总体结构设计本设计采用stm32f103rbt6作为mcu,由内部实时时钟(rtc)实现日历功能,利用独立按键进行调整时间,通过tft-lcd液晶显示器来显示开机画面、日历、汉字。硬件电路的总体设计方案如图2-3。图2-3 总体结构设计框图2.3 硬件电路各单元电路设计2.3.1 按键电路的设计本设计使用到开发板上两个按键,其原理图如图2-4所示。图2-4 按键输入原理图key

16、0和key1用作普通按键输入,分别接在pa13和pa15上,由于他们都与jtag共用同一个引脚,所以在使用key0和key1两个按键时要特别注意不能使用jtag来调试,另外key0和key1还和ps/2的dat和clk共用,他们都是通过jtag的上拉电阻来提供上拉的。2.3.2 显示电路的设计该设计的显示部分采用的是tftlcd液晶显示模块,它可以显示16位的真彩图片,tft-lcd即薄膜晶体管液晶显示器,是英文名thin film transistor-liquid crystal display的字头缩写。tft-lcd技术是将微电子技术与液晶显示器技术进行巧妙的融合。人们通过在si上进行

17、微电子精细加工这一项技术,实现了在大面积的玻璃上进行tft阵列的加工,再通过已经成熟的lcd技术将该阵列基板与另一片带彩色滤色膜的基板进行相结合从而形成一个液晶盒,其次经过多到工序如偏光片贴覆等过程,最后形成液晶显示器(屏)。tft-lcd中的tft相当于一个开关管,它可以有效地克服在非选通时出现的串扰,使得液晶显示屏的静态特性与扫描线数无关,从而大大提高的显示的质量。本次采用的是2.8寸的alientek tft-lcd模块,分辨率为320*240,该液晶显示器的控制器为ili9320。其模块接口如图2-5。图2-5 tftlcd模块接口图该模块采用的是80并口方式与外部链接的,80并口有如

18、下一些连接线:cs:tftlcd片选信号。wr:向tftlcd写入数据。rd:从tftlcd中读取数据。d15:0:16位双向数据线。rst:硬复位tftlcd。rs:命令/数据标志(0:读写命令 1:读写数据)。硬件部分对应的io口连接为:lcd_led对应pc10;lcd_cs对应pc9;lcd_rs对应pc8;lcd_wr对应pc7;lcd_rd对应pc6;lcd_d17:1对应pb15:0;3 系统软件设计系统软件设计主要包括主程序、tftlcd显示子程序、按键子程序、时钟配置子程序等。整个系统的功能的实现是由硬件电路与软件相互配合来完成的,由于各功能的硬件部分电路连接已经完成了,在进

19、行软件编程时只需要根据硬件电路的连接方式进行操作即可。整套程序采用的是固件库的开发方式,所以不需要再去了解各个寄存器的配置,其中占据主导地位的主函数主要负责合理的调用各个子程序,使其完成所需的功能。各个子程序主要负责完成相应部分的实际所要的功能,如汉字显示的程序、图片显示的程序、时钟显示的程序等等。3.1 realview mdk3.80简介realview mdk开发套件来自德国的keil公司,是arm公司目前为了针对各种嵌入式处理器而新推出的一款软件开发工具。realview mdk拥有业内最领先的技术,包含vision3集成开发环境和 realview编译器。能够支持arm7、arm9并

20、拥有最新的cortex-m3内核处理器,具有自动配置启动代码、集成flash烧写模块、强大的simulation设备模拟、性能分析等功能,相比arm之前的工具包ads等,realview编译器的新版本可将性能提升20。realview mdk具有的几大突出特性:(1)启动代码生成向导,自动引导。(2)软件模拟器,完全脱离硬件的软件开发过程。(3)性能分析器,看的更远、看的更细、看的更清。(4)cortex-m3支持。3.2 软件总体设计主程序是通过调用lcd子程序、rtc时钟子程序、汉字显示子程序、按键功能子程序以及图片显示子程序等来实现显示开机动画、汉字、机械钟表、时间、日期、星期于一体的功

21、能。主程序流程图如图3-1。图3-1主程序流程图3.3 tft-lcd显示程序设计显示部分程序的设计步骤为,先确定tft-lcd于stm32的io口连接方式;然后初始化tft-lcd即向内写入一系列的设置程序,来启动tft-lcd的显示;之后对显示部位进行相关的配置;最后进行显示并可以配置相关的背景。程序流程图如图3-2。图3-2 tft-lcd显示程序流程图3.4 时钟程序设计基于arm cortex-m3内核的stm32其本身包含一个独立的定时器实时时钟(rtc),由于其拥有一组连续的计数器这一特性,我们就可以通过在相应软件的配置下,来实现时钟日历的功能。若想重新设置系统当前的时间和日期,

22、则可通过修改计数器值的方法来实现。该款单片机的rtc模块和时钟配置系统(rcc_bdcr寄存器)处于后备区域(bkp),这将导致系统复位或从待机模式中唤醒后,对后备寄存器和rtc的访问被禁止,之前对rtc模块的设置和时间会不会出现变化。其优点在于防止对于后备区域意外的写操作。rtc的组成包含两个部分,第一部分是apb1接口,除了用于和apb1总线相连,还包含一组16位的寄存器,是通过apb1总线来对其进行读写操作。这一部分是由apb1总线时钟驱动来与apb1总线接口的。第二部分是rtc核心,由一组可编程计数器组成,主要分为两个模块:rtc预分频模块和一个32位的可编程计数器。其中rtc预分频模

23、块包含一个20位的可编程分频器被称作为rtc预分频器,如果在rtc_cr寄存器中将相应的位设置为允许位,就会在每个tr_clk周期rtc产生一个秒中断。模块二可以被初始化为当前的系统时间,将系统的时间按tr_clk周期累加并与存储在rtc_alr寄存器中的可编程时间进行比较,如果rtc_cr控制寄存器相应位设置成允许位,在比较匹配时就会产生一个闹钟中断。总体来说rtc包含以下几个特性:(1)可编程的预分频系数最高可达220。(2)2个分离的时钟: pclk1和rtc时钟(rtc时钟的频率必须要小于pclk1时钟频率的1/4以上)。(3)可用于较长时间段进行测量的32位可编程计数器。(4)包含三

24、种rtc的时钟源:hse时钟除以128;lse低速外部时钟;lsi低速内部时钟。(5)由系统复位的apb1接口而rtc核心(预分频器、闹钟、计数器和分频器)只能由后备域复位,这两者之间是相互独立。(6)专门的可屏蔽中断包含3个:闹钟中断用来产生一个软件可编程的闹钟中断;秒中断用来产生一个可编程的周期性中断信号(最长可达1秒);溢出中断指示内部可编程计数器溢出并回转为0的状态。rtc的简化框图如图3-3。图3-3 rtc框图在进行编写rtc时钟程序时是以1970年1月1日为基准,来把输入的时间转换为秒钟,程序编写的合法年份是1970-2099年。星期的判断是利用蔡勒(zeller)公式:w=y+

25、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:日; 代表取整,即只要整数部分。将算出来的w除以7(若算出的w是负数则将w加7直至w大于零后再除以7),余数是几就是星期几。如果余数是0,则为星期日。时钟的程序流程图如图3-4。图3-4 时钟程序流程图3.5 汉字显示程序在液晶屏上显示汉字的原理显示字符大致是一样的。在液晶屏上显示的汉字其实就是由点亮的点组成的。这就类似

26、于我们在纸上书写汉字一样,所写字都是由沾在纸上的墨汁组成的。所以当我们知道所要显示汉字的点阵数据后就可以知道该汉字的生成方法,再通过相应的程序即可在屏幕上显示出该汉字了。本次设计中显示汉字的点阵数据是通过一款名为pctolcd2002的软件生成的,再通过相关显示程序显示的。所要显示的汉字为点阵16×16的“李杨自动化2班”和点阵24×24的“滁州学院2010届”。汉字显示程序流程图如图3-5。图3-5 汉字显示程序流程图3.6 图片显示程序jpeg是目前网上最流行的一种图片存储格式,它可以把文件压缩到最小格式,但在压缩过程图像中重复或不重要的资料会丢失,很容易造成图片损伤,

27、被称为有损压缩格式。它是“联合照片专家组(joint photographic expert group)”的英文缩写,文件后缀名通常为“.jpg”或“.jpeg”。本设计中的几幅图片的数据是通过一款名为image2lcd的图片解码工具实现的。图片显示程序的流程图如图3-6。图3-6 图片显示程序3.7 按键功能程序根据stm32开发板中所要用到的两个按键的硬件电路连接方式,进行编写程序。在编写程序时应注意按键的消抖。在进行扫描某个按键时,该按键按下后进行按下的时间长短判断,然后根据按键按下的时间长短来实现同一个按键的不同功能,此种方法的优点是可以节省所需按键的数量和io口。此次使用的两个按键

28、(key0、key1)功能分别是,当按键按下时长未超过3秒,两个按键分别执行的功能是进行时和分加一,超过3秒则执行时和分减一,因秒的修改无多大实际用途程序中就没有进行判断了。按键功能程序流程图如图3-7。图3-7 按键功能程序4 系统调试程序调试主要以软件调试和在开发板上进行实际运行两种方式相结合。软件调试是先在realview mdk3.80上进行程序的编写、调试,找出程序中命令的错误并修改。当软件调试无错误后生成“万年历.hex”文件,再将此文件通过串口线利用串口下载软件(mcuisp)烧录到开发板的stm32f103rbt6芯片上,观察运行结果是否和自己期望的结果相同,如若不同可找到程序

29、中该不同的部分进行修改,直至达到自己的要求。实际运行效果如图4-1、图4-2。图4-1 开机画面开机过后显示此画面,它是由四幅不同的图片组成,5秒过后会显示时钟等,如图4-2。图4-2 时钟等显示画面在屏幕顶端中间显示汉字点阵为24×24的“滁州学院2010届”,格式为红色、加粗、宋体;字体下方显示一个机械时钟表,三个指针根据时间而变化;接下来显示的是日期、星期、电子时钟;最后在屏幕右下角显示汉字点阵为16×16的制作者信息。结论本次设计的万年历系统采用了模块化设计方式,以单片机stm32f103rbt6作为主控制模块、tft-lcd作为液晶显示模块、内部的rtc时钟作为实

30、时时钟模块。整体程序的开发方式是基于固件库的,每一个模块的程序逻辑清晰、目的明确、结构简单、易于编写、调试和修改。程序可读性强,可以很方便对程序在保持主体不动的前提下进行局部修改以达到更好的显示效果。通过本次设计可知采用stm32f103rbt6作为主控器件、tft-lcd作为液晶显示、内部的rtc时钟作为实时时钟的方式是可行。而且该万年历具有计时准确、功耗低、反应快、等特点。同时用tft-lcd作为液晶显示模块使时间与图片等可以的直观清晰显示。但由于毕业设计时间有限,本设计还存在很多不足之处。比如:整点报时、音乐闹铃等。参考文献1 吴明晖,徐睿.基于arm的嵌入式系统开发与应用m.北京:人民

31、邮电出版社社,20042 赖于树.arm微处理器与应用开发 m.电子工业出版社,20073 周立功等.arm嵌入式系统基础教程m.北京:北京航空航天大学出版社,2005.14 刘鹏程.基于arm 的温度测量系统 j.科技信息, 2008( 18): 77-785 李宁.基于mdk的stm32处理器开发应用m.北京航空航天大学出版社,20086 彭刚,秦志强.基于arm cortex-m3的stm32系列嵌入式微控制器应用实践m.北京:电子工业出版社.20117 查荣. 基于单片机的多功能万年历设计j.世界电子元器件,2012.41(3):137-1398 刘火良,杨森.stm32库开发实战指南

32、.第1版m.机械工业出版社,2013:317-3649 廖义奎.cortex-m3之stm32嵌入式系统设计.第1版m.北京:中国电力出版社.201210 滕振芳,张昆.基于单片机的电子万年历的设计j.价值工程.2010:63-6311 stm icroe lectron ics corporat ion, stm32f103xx datashee t j , 2007, 1112 zhao yu-mei; chen fu-rong. research on key technique of lower concentration s2- sensor in situ measurement

33、j. oceantechnology, 2008,27 (4) :33-35附录一程序列表主程序#include "delay.h"#include "sys.h"#include "usart.h"#include "lcd.h"#include "rtc.h"#include "math.h"#include "chinese.h"#include "key.h"#include "picture.h"#defi

34、ne pi 3.141592654const u8* week7="sunday","monday","tuesday","wednesday","thursday","friday","saturday" int main(void) extern const u8 picture1;/图片数据(包含信息头),存储在picture1.c里面. extern const u8 picture2; extern const u8 picture3; exte

35、rn const u8 picture4; u8 l,i,t; timer.w_year=2014; timer.w_month=4; timer.w_date=6; timer.hour=18; timer.min=44; timer.sec=30; delay_init(72); /延时初始化nvic_configuration();uart_init(9600); lcd_init();rtc_init();key_init();picture_display(20,5,(u8*)picture1);/在指定地址显示图片picture_display(0,75,(u8*)picture2

36、);picture_display(110,95,(u8*)picture3);picture_display(60,220,(u8*)picture4);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);lcd_clear(white);point_color=red;/设置字体为红色draw_circle(120,110,55);draw_circle(120,110,50);lcd_shownum(115,40,12,2,12);lcd_shownum(178,105,3,2,12);lc

37、d_shownum(113,170,6,2,12);lcd_shownum(50,105,9,2,12);for(i=0;i<60;i+)u8 x1,y1,x2,y2; if(i%5=0) l=10; else l=5; x1=50*sin(i*6*pi/180)+120; y1=50*cos(i*6*pi/180)+110; x2=(50-l)*sin(i*6*pi/180)+120; y2=(50-l)*cos(i*6*pi/180)+110; lcd_drawline(x1,y1,x2,y2);/显示时间point_color=blue;/设置字体为蓝色lcd_showstring

38、(80,190," - - "); lcd_showstring(80,226," : : ");test_fontt();test_font(); while(1) u8 x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8,x9,y9,s,m1,n1,m2,n2, hour; point_color=blue;/设置字体为蓝色 s=key_scan(); if(s) switch(s) case 0: rcc_rtcclkcmd(disable);break; case 1: rcc_apb1periphclockcmd(rcc_a

39、pb1periph_pwr|rcc_apb1periph_bkp,enable); pwr_backupaccesscmd(enable); bkp_writebackupregister(bkp_dr1, 0x5a5a); timer.hour=timer.hour+1; if(timer.hour=24)timer.w_date=timer.w_date+1;x9=20*sin(timer.hour-1)*60+timer.min)*(float)1/2*pi/180)+120;/时针(绿色)y9=110-20*cos(timer.hour-1)*60+timer.min)*(float)

40、1/2*pi/180);point_color=white;lcd_draw_wide(117,110,124,110,x9,y9);if(timer.hour>=24)timer.hour=0;rtc_init(); break; case 2: rcc_apb1periphclockcmd(rcc_apb1periph_pwr|rcc_apb1periph_bkp,enable); pwr_backupaccesscmd(enable); bkp_writebackupregister(bkp_dr1, 0x5a5a); timer.min=timer.min+1; point_co

41、lor=white;lcd_draw_wide(118,110,123,110,x5,y5);if(timer.min>=60)timer.min=0;rtc_init(); break; case 3: rcc_apb1periphclockcmd(rcc_apb1periph_pwr|rcc_apb1periph_bkp,enable); pwr_backupaccesscmd(enable); bkp_writebackupregister(bkp_dr1, 0x5a5a); if(timer.hour=0) hour=24;timer.hour=hour-1;else timer

42、.hour=timer.hour-1;if(timer.hour=23)timer.w_date=timer.w_date-1;m2=20*sin(timer.hour+1)*60+timer.min)*(float)1/2*pi/180)+120;/时针(绿色)n2=110-20*cos(timer.hour+1)*60+timer.min)*(float)1/2*pi/180);point_color=white;lcd_draw_wide(117,110,124,110,m2,n2); rtc_init(); break; case 4: rcc_apb1periphclockcmd(r

43、cc_apb1periph_pwr|rcc_apb1periph_bkp,enable); pwr_backupaccesscmd(enable); bkp_writebackupregister(bkp_dr1, 0x5a5a); if(timer.min=0) min=60;timer.min=min-1;else timer.min=timer.min-1;m1=30*sin(timer.min+1)*6*pi/180)+120;/分针(蓝色)n1=110-30*cos(timer.min+1)*6*pi/180);point_color=white;lcd_draw_wide(118,

44、110,123,110,m1,n1); rtc_init(); break; if(t!=timer.sec)t=timer.sec;lcd_shownum(80,190,timer.w_year,4,16); lcd_shownum(120,190,timer.w_month,2,16); lcd_shownum(144,190,timer.w_date,2,16);switch(timer.week)case 0:lcd_showstring(80,208,"sunday ");break;case 1:lcd_showstring(80,208,"monda

45、y ");break;case 2:lcd_showstring(80,208,"tuesday ");break;case 3:lcd_showstring(80,208,"wednesday");break;case 4:lcd_showstring(80,208,"thursday ");break;case 5:lcd_showstring(80,208,"friday ");break;case 6:lcd_showstring(80,208,"saturday ");bre

46、ak; lcd_shownum(80,226,timer.hour,2,16); lcd_shownum(104,226,timer.min,2,16); lcd_shownum(128,226,timer.sec,2,16); x3=35*sin(timer.sec-1)*6*pi/180)+120;/秒针(深红) y3=110-35*cos(timer.sec-1)*6*pi/180); x4=35*sin(timer.sec*6*pi/180)+120; y4=110-35*cos(timer.sec*6*pi/180); point_color=white; lcd_draw_wide

47、(119,110,122,80,x3,y3); point_color=bred; lcd_draw_wide(119,110,122,80,x4,y4); x5=30*sin(timer.min-1)*6*pi/180)+120;/分针(蓝色) y5=110-30*cos(timer.min-1)*6*pi/180); x6=30*sin(timer.min*6*pi/180)+120; y6=110-30*cos(timer.min*6*pi/180); point_color=white; lcd_draw_wide(118,110,123,110,x5,y5); point_color

48、=blue; lcd_draw_wide(118,110,123,110,x6,y6); x7=20*sin(timer.hour*60+timer.min-1)*(float)1/2*pi/180)+120;/时针(绿色) y7=110-20*cos(timer.hour*60+timer.min-1)*(float)1/2*pi/180); x8=20*sin(timer.hour*60+timer.min)*(float)1/2*pi/180)+120; y8=110-20*cos(timer.hour*60+timer.min)*(float)1/2*pi/180); point_co

49、lor=white; lcd_draw_wide(117,110,124,110,x7,y7); point_color=green; lcd_draw_wide(117,110,124,110,x8,y8); delay_ms(10); ; tft-lcd显示程序由于tft-lcd显示程序过多,下面仅列出其初始化的部分函数:/初始化lcdvoid lcd_init(void) gpio_inittypedef gpio_initstructure;rcc_apb2periphclockcmd(rcc_apb2periph_gpioc|rcc_apb2periph_gpiob|rcc_apb2

50、periph_afio, enable); gpio_pinremapconfig(gpio_remap_swj_jtagdisable , enable);gpio_initstructure.gpio_pin = gpio_pin_10|gpio_pin_9|gpio_pin_8|gpio_pin_7|gpio_pin_6; /gpio_pin_10gpio_initstructure.gpio_mode = gpio_mode_out_pp; /推挽输出gpio_initstructure.gpio_speed = gpio_speed_50mhz;gpio_init(gpioc, &a

51、mp;gpio_initstructure);gpio_setbits(gpioc,gpio_pin_10|gpio_pin_9|gpio_pin_8|gpio_pin_7|gpio_pin_6);gpio_initstructure.gpio_pin = gpio_pin_all; gpio_init(gpiob, &gpio_initstructure); gpio_setbits(gpiob,gpio_pin_all);delay_ms(50); / delay 50 ms lcd_writereg(0x0000,0x0001);delay_ms(50); / delay 50

52、ms devicecode = lcd_readreg(0x0000); if(devicecode=0|devicecode=0xffff)/读到id不正确/可能是9341,尝试9341的id读取lcd_wr_reg(0xd3); lcd_rd_data(); /dummy read lcd_rd_data(); /读回0x00 devicecode=lcd_rd_data()&0xbf;/这里读回0xd3,实际是0x93才对.强制去掉第6位 devicecode<<=8;devicecode|=lcd_rd_data(); printf(" lcd id:%xrn",devicecode); /打印lcd idif(devicecode=0x9341)/9341初始化lcd_wr_reg(0xcf); lcd_wr_data(0x00); lcd_wr_data(0xc1); lcd_wr_data(0x30); lcd_wr_reg(0xed); lcd_wr_data(0x64); lcd_wr_data(0x03); lcd_wr_data(0x12); lcd_wr_data(0x81); lcd_wr_reg(0xe8); lcd_wr_data(0x85); lcd_wr_data(0x1

温馨提示

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

评论

0/150

提交评论