基于launchpad的爱情万年历.docx_第1页
基于launchpad的爱情万年历.docx_第2页
基于launchpad的爱情万年历.docx_第3页
基于launchpad的爱情万年历.docx_第4页
基于launchpad的爱情万年历.docx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

基于launchpad的爱情万年历一、要实现的功能:1、 精确显示年月日时分秒2、 闰年、二月自动调节时间4、 显示自定义的语句5、 恋爱纪念日提醒,显示不一样的画面(weve been together for xx years!)二、硬件部分:1、 launchpad开发板一块(板载msp430g2553)2、 lcd12864液晶屏一块3、 ds1302数字时钟芯片4、 32.768khz晶振一枚5、 按键四枚6、 二极管一个7、 电容、导线、插针等8、开关一个三、设计思路a、依据题目要求,作品采用德州仪器texas instrument公司的混合信号处理器msp430系列单片机作为控制核心。该芯片以惊人的低功耗性能著称,是一款基于risc指令集的16位mcu,在实现超低功耗的前提下达到较高的性能,是绝对适合本题设计要求(超低功耗、高运算性能、相对低廉价格、相对较低的开发成本)的单片机。考虑到万年历并非高级电子设备,成本不能过高,控制核心单片机一般在低端的msp430fx1xx系列或msp430g2xx系列中选择。我们最终选择了msp430g2553芯片作为控制核心 1、launchpad所采用的g2553芯片存储空间为4k; 2、g2553有20管脚,如果用于开发将不得不设计较为复杂的程序实现管脚的分时复用。基于以上讨论,作品最终采用msp430g2553芯片作为控制核心。 b、实时时钟 由于msp430g2553片内没有实时时钟rtc模块,作品采用外扩实时时钟的方式完成计时功能。不同厂商生产的rtc芯片有许多,性能、价格上相差甚远。出于性价比考虑,dallas公司的ds1302芯片足以满足万年历的计时要求。该芯片具有涓细电流充电能力,利用普通手表晶振实现低功耗运行,利用备用电源(纽扣电池)实现断电计时功能,操作简单,性价比极高,精度足以满足题目要求。基于以上讨论,作品最终采用dallasds1302芯片作为实时时钟模块的核心。c、人机交互根据题目要求,作品采用lcd12864作为主显示器,显示公历的年月日、时分秒及闰年情况,同时实现农历年月日的汉字输出,同时实现温度等数据以及全中文菜单的显示。根据题目要求,作品采用四枚独立按键分别作为上、下、确认、菜单功能按键,足以满足多级菜单间的切换与相应时间、功能、日程安排的设置。d、程序开发语言msp430单片机开发采用c语言较多。但由于开发时间极短、开发人数极少、课业压力大、任务较重,作品采用ieee制定的embeddedc+语言开发,且充分利用了面向对象编程的思想,大大简化了程序设计的过程,也较大程度地提高了代码的复用性(且代码具有很高的可重用性)。代码也适当地利用了iarelectricworkbenchformsp430开发环境对c+泛型编程开发的良好支持,使用了标准模板库stl中的部分函数简化部分算法和数据结构的设计开发工作。由于c+编译的程序将比c效率低,为保证程序仍具有较高效率,编程时充分考虑msp430内部结构,遵循c430编程规范,尽量避免使用不适合msp430架构执行的代码段。为保持较好的可移植性,几乎没有使用embeddedc+语言不支持的特性。e、算法选择万年历主要涉及的算法为公历年月日(涉及闰年补偿)及星期的算法、公历与农历的高效转换算法。基于1.1.2的讨论,作品采用了外连rtc模块的设计方案,而ds1302具有闰年补偿功能,能实现较完整的公历年月日计算,因此只需设计星期的计算方法。作品采用了基于zeller公式的星期计算方法,时间复杂度仅为o(1)。由于中国农历计算依赖于天象等不确定量,无特定算法。因此作品内建了公农历映射表实现公农历间转换。此外,作品在菜单设计部分还利用到了递归算法的思想,在日程设计方面利用了stl提供的快速排序算法。2.总体设计设计总体框架图四、方案描述基于1.1部分的比较分析,作品最终的方案描述如下:1、作品提供了一种基于msp430与ds1302的万年历解决方案。硬件方面,作品控制核心采用msp430g2553单片机,以lcd12864作为显示器,依赖ds1302提供实时时钟信息。软件方面,系统代码采用embeddedc+编写,采用面向对象设计方法实现,设计了利用中断实现的支持多任务时间片轮转调度、高优先级任务抢占调度的伪rtos;设计了功能完善的多级菜单,具有良好的人机交互性能;设计了基于zeller公式与紫金历数据表的万年历算法,能显示判断闰年并自动调整日期。功能与特性包括以下几点:1、 精确显示年月日时分秒2、 闰年、二月自动调节时间3、 两个按键控制调节时间日期等4、 显示自定义的语句5、 恋爱纪念日提醒,显示不一样的画面(weve been together for xx years!)2、理论分析与计算2.1逻辑控制电路设计众所周知,单片机系统发展的趋势是片内集成,通过片上链路实现各类信息的处理转换,利用单片机自身的其他资源实现各类控制。然而由于设计者相关知识与经验的匮乏,作品依然采用了8086时代以单片机为核心、外扩各类模块实现所需功能的设计方法。逻辑控制电路均以单片机管脚为出发点设计,各模块直接或者通过各类总线连接方式连接到相应管脚。具体参见第三章电路设计部分。2.2日程设定和日期计算方法公历的计算方法:由于硬件选择的原因,公历方面不需考虑年月日计算、闰年补偿,只需设计星期算法:最著名也最有效的公历星期算法为zeller公式:1公式都是基于公历的置闰规则来考虑。公式中的符号含义如下:w:星期(计算所得的数值对应的星期:0-星期日;1-星期一;2-星期二;3-星期三;4-星期四;5-星期五;6-星期六)1c:年份前两位数y:年份后两位数m:月(m的取值范围为3至14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)d:日:称作高斯符号,代表向下取整,即,取不大于原数的最大整数。mod:同余(这里代表括号里的答案除以7后的余数)实际编程时考虑c+语言特性,采用了以下修正公式代替zeller公式:其中各变量与zeller公式定义一致,只是采用了char(编译时默认为unsignedchar)类型作为各变量的数据类型,利用c+语言特性可以实现取整。农历算法:由于中国农历是直接利用天体位置定义的历法(区别于利用固定的天体时间平周期定义的历法,如格里历,回历等),它是现今世界上为数不多的天文年历性质的历法,它和一些重要天象是一一对应的2,因此不存在确切的算法。程序内建了一张紫金历与公历的映射表实现了公农历间的转换。五、硬件电路图六、pcb图七、整体思路/*/* 程序说明:直流电压表(串行lcd显示) */* p1.0控制rw,并行的读/写选择信号,串行的数据口 */* p1.1控制e,并行的使能信号,串行的同步时钟 */* p1.4接被测电压信号源,信号源与单片机要共地 */* psb低电平是串行,直接接地;rs接高电平 */* */* p2.3为sclk,p2.4为sda,p2.5为rst */*/#include#define uint unsigned int#define uchar unsigned char#define bit(x) (10;j-) switch(j) case 3:temp=firstbyte;break; case 2:temp=transdata&0xf0;break; case 1:temp=(transdata0;i-) if(temp&0x80) p1out |= bit0; else p1out &= bit0; p1out |= bit1; temp = 1; p1out &= bit1; delay_nms(1); p1out &= bit0;/*定位函数*/void lcd_pos(uchar x,uchar y) int pos; switch(x) case 1:pos=0x80;break; case 2:pos=0x90;break; case 3:pos=0x88;break; case 4:pos=0x98;break; default:pos=0x80; pos += y; lcd_send(0,pos); /*函数功能:字符串显示函数入口参数:*pt ,num出口参数:无函数说明:无*/ void lcd_display_string(const uchar *pt,uchar num) uchar i; for(i = 0;i (num*2);i+) lcd_send(1,*(pt+);void delay_nms(uint n) uchar i; while(n-) for(i=0;i115;i+);/*函数名称:显示函数入口参数:data出口参数:无函数说明:每行最多8个字,2个字母或数字相当于1个字的长度,注意 汉字没法跨格显示。*/ /void lcd_display(long int data)/ lcd_pos(2,0); /第二行/ lcd_display_string(串口数据,4);/ lcd_pos(3,0); /第三行/ lcd_display_string(当前显示:,5);/ lcd_display_digit(data);/*修改*/ void update_disbuf() dis_buf10=2; dis_buf11=0; dis_buf12=year/16 + 0x30; dis_buf13=year%16 + 0x30; dis_buf14=-; dis_buf15=month/16 + 0x30; dis_buf16=month%16 + 0x30; dis_buf17=-; dis_buf18=date/16 + 0x30; dis_buf19=date%16 + 0x30;/ dis_buf110= ;/ dis_buf111= ;/ dis_buf112= ;/ dis_buf113=dayn-10;/ dis_buf114=dayn-11;/ dis_buf115=dayn-12; void update_disbuf1() dis_buf20=hour/16 + 0x30; dis_buf21=hour%16 + 0x30; dis_buf22=:; dis_buf23=minute/16 + 0x30; dis_buf24=minute%16 + 0x30; dis_buf25=:; dis_buf26=second/16 + 0x30; dis_buf27=second%16 + 0x30; void update_disbuf2() dis_buf30=dayn-10; dis_buf31=dayn-11; dis_buf32=dayn-12;/*以下为ds1302的子函数*/ /*/ /向ds1302写一个字节的数据 void ds1302_wbyte(char dat) char s,temp; temp = dat; for(s=0;s1; /数据右移一位为下次输出做准备 sclk_0; /为下一次做准备 /从ds1302读取8位数据 char ds1302_rbyte() char u,temp; p2dir &= bit4; for(u=8; u0;u-) temp=temp1; temp += (p2in&bit4)0x29 & month=0x02) /如果调时时2月超过29 ds1302_write(write_date,0x01); date = ds1302_read(read_date); ds1302_write(write_month,month + 1); month = ds1302_read(read_month);/读取月 year = ds1302_read(read_year); /读取年 hour = ds1302_read(read_hour); /读取时 hour = hour & 0x3f; /屏蔽掉前两位 minute = ds1302_read(read_minute);/读取分 second = ds1302_read(read_second);/读取秒 n = ds1302_read(read_day);/读取星期 ds1302_write(write_protect,0x80);/打开写保护 /*函数名称:主函数入口参数:无出口参数:无函数说明:请看完最上面程序说明再运行程序*/void main() wdtctl = wdtpw + wdthold; p1dir=0xff; p2dir =(bit3+bit4+bit5); delay_nms(100); lcd_init(); ds1302_init(); while(1) _dint(); data_pro(); /读取并处理数据 _eint(); if(minute= 0x00)/纪念日时间 lcd_send(0,0x01); lcd_pos(1,0); lcd_display_string(纪念日,8); lcd_pos(2,0); lcd_display_string(love1,6); lcd_pos(3,0); lcd_display_string(love2,6); delay_nms(10); lcd_pos(4,0); lcd_display_string( 2015-1-2,5); delay_nms(1000000); lcd_send(0,0x01); else lcd_pos(1,0); lcd

温馨提示

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

评论

0/150

提交评论