ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:80.71KB ,
资源ID:8178371      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8178371.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于Launchpad爱情万年历.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于Launchpad爱情万年历.docx

1、基于Launchpad爱情万年历本来是在准备重庆市TI 电子设计大赛,这块launchpad的板子也是自己买的。学习过程中越来越感觉得到launchpad的强大,一边学一边做东西,做到万年历的时候花了三天时间,终于调试成功,心里那个美啊。后来想到女朋友在培训不在身边,就有了制作这个万年历的想法。一、首先说一下硬件:1、 launchpad开发板一块板载MSP430G2553)2、 LCD1602液晶屏一块3.3V)3、 DS1302数字时钟芯片4、 32.768KHz晶振一枚5、 按键两枚6、 电位器一枚7、 电容、导线等二、要实现的功能:1、 精确显示年月日时分秒2、 闰年、二月自动调节时间

2、3、 两个按键控制调节时间日期等4、 显示自定义的语句5、 恋爱纪念日提醒,显示不一样的画面作为LCD1602的控制端口。/配置P2.3为SCLK,P2.4为SDA,P2.5为RST(都配置为输出作为DS1302的控制端/P2.6、P2.7接两个按键,配置为输入,下降沿中断,中断处理函数void key_pro(,P2、6接key1(控制光标,P2.7接key2,控制调节/grace配置中设置P2.0-P2.5为输出,MCLK=1MHz,关闭看门狗/在做DS1302的硬件时应该特别注意:数据线RST、SCLK、SDA一定上拉电阻,晶振添加负载电容,连接线尽量短先列写出主函数,是思路清晰点:vo

3、idmain (voidCSL_init(。 /初始化单片机lsd1602_init(。 /初始化LCD1602ds1302_init(。 /初始化DS1302while(1_DINT(。 /关闭中断data_pro(。 /从DS1302中读取并处理数据_EINT(。if(month= 0x03 & date= 0x07/3月7日是我们的纪念日jww(。 /如果是3月7号则显示不同的画面。 /更新LCD1602显示空间。 /控制LCD1602显示时间if(month= 0x03 & date= 0x07/3月7日纪念日_delay_cycles(1000000。就这样很简单的思路,全部使用了子

4、程序调用,所以看起来清晰点,下面贴出来整个函数。注释的挺多了,有什么建议或者交流的直接回复帖子。五、程序说一下阅读方法,先看懂了上边的主函数,然后对应主函数调用的子函数,一个一个来看,逐个看懂,就很简单。/P2.0为rs,P2.1为rw,P2.2为e(都配置为输出/P2.67配置为输入,下降沿中断,中断处理函数void key_pro(,P2。6接key1(控制光标,P2.7接key2,控制调节增加)/grace配置中设置P2.345为输出,MCLK=1MHz,/本程序将数据用ASCII表示,方便LCD1602显示/在做DS1302的硬件时应该特别注意:数据线RST。SCLK、SDA一定上拉电

5、阻,晶振添加负载电容,连接线尽量短/date代表日,day代表星期几#include#include/定义全局变量年月日时分秒charyear,month,date,hour,minute,second,n。/n代表周几charlove_years。 /恋爱纪念年charday73=MON,TUE,WED,THI,FRI,SAT,SUN。chari=0。 /用来记录key1按下的次数chardis_buf116。 /lcd上排显示缓冲区chardis_buf216。 /lcd下排显示缓冲区charweiwei116=weiwei: I love u。charweiwei216=so much!

6、 by xuxu。charlove116=Weve been toget。charlove216=her for years。/LCD1602控制位#definers_0 (P2OUT &= BIT0#definers_1 (P2OUT |= BIT0#definerw_0 (P2OUT &= BIT1#definerw_1 (P2OUT |= BIT1#definee_0 (P2OUT &= BIT2#definee_1 (P2OUT |= BIT2/DS1302控制位#defineSCLK_0 (P2OUT &= BIT3#defineSCLK_1 (P2OUT |= BIT3#defin

7、eSDA_0 (P2OUT &= BIT4#defineSDA_1 (P2OUT |= BIT4#defineRST_0 (P2OUT &= BIT5#defineRST_1 (P2OUT |= BIT5#defineSDA (P2IN &= BIT4/宏定义DS1302数据地址#definewrite_second 0x80#defineread_second 0x81#definewrite_minute 0x82#defineread_minute 0x83#definewrite_hour 0x84#defineread_hour 0x85#definewrite_date 0x86#

8、defineread_date 0x87#definewrite_month 0x88#defineread_month 0x89#definewrite_year 0x8c#defineread_year 0x8d#definewrite_day 0x8a#defineread_day 0x8b#definewrite_protect 0x8e#definewrite_power 0x90/*以下为LCD1602的子函数*/*/查询是否忙碌charbusyc。rs_0。rw_1。e_1。_delay_cycles(1000。P1DIR = 0x00。 /P1口置为输入,读取LCD状态busy

9、c = P1IN & BIT7。 /从P1输入是否忙碌while(busy(。 /判断LCD是否忙碌rs_0。rw_0。P1OUT = command。_delay_cycles(1。 /时间间隔MIN=30nSe_1。_delay_cycles(1。 /MIN=150nSe_0。/向LCD1602写数据命令voidwrite_data(chardatawhile(busy(。 /判断LCD是否忙碌rs_1。rw_0。_delay_cycles(1。e_1。P1OUT=data。_delay_cycles(1。e_0。/LCD1602初始化函数voidlsd1602_init(e_0。writ

10、e_command(0x38。_delay_cycles(15000。write_command(0x0c。write_command(0x06。write_command(0x01。voidupdate_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%

11、16 + 0x30。dis_buf110= 。dis_buf111= 。dis_buf112= 。dis_buf113=dayn-10。dis_buf114=dayn-11。dis_buf115=dayn-12。dis_buf20= 。dis_buf21=j。dis_buf22=w。dis_buf23=w。dis_buf24=&。dis_buf25=z。dis_buf26=x。dis_buf27= 。dis_buf28=hour/16 + 0x30。dis_buf29=hour%16 + 0x30。dis_buf210=:。dis_buf211=minute/16 + 0x30。dis_buf

12、212=minute%16 + 0x30。dis_buf213=:。dis_buf214=second/16 + 0x30。dis_buf215=second%16 + 0x30。voiddisplay(chart。write_command(0x80。for(t=0。twrite_data(dis_buf1t。write_command(0xc0。for(t=0。twrite_data(dis_buf2t。/*以下为DS1302的子函数*/*/向DS1302写一个字节的数据voidds1302_Wbyte(chardatchars,temp。temp = dat。for(s=0。sif(te

13、mp & 0x01 /从低位开始传输数据SDA_1。elseSDA_0。SCLK_1。 /上升沿锁存数据temp = temp1。 /数据右移一位为下次输出做准备SCLK_0。 /为下一次做准备/从DS1302读取8位数据chards1302_Rbyte(charu,temp。P2DIR &= BIT4。for(u=8。 u0。u-temp=temp1。temp += (P2IN&BIT4。/向DS1302写入地址然后读取数据chards1302_Read(charcmdchardat。RST_0。 /初始化RST为低SCLK_0。 /SLK=0RST_1。 /开始传输数据ds1302_Wby

14、te(cmd。 /传输命令字,写入要读取的时间、日期地址dat = ds1302_Rbyte(。 /读取八位数据RST_0。 /结束数据传输SCLK_0。 /拉高时钟线return(dat。/向DS1302写入地址后写入数据voidds1302_Write(charcmd,chardatRST_0。SCLK_0。 /在RST的上升沿,SCLK必须为0RST_1。 /开始传输数据ds1302_Wbyte(cmd。 /写入要修改的地址ds1302_Wbyte(dat。 /写入数据SCLK_1。 /拉高时钟线RST_0。 /拉低RST/初始化DS1302的程序voidds1302_init(void

15、ds1302_Write(write_protect,0x00。/关闭写保护ds1302_Write(write_second,0x00。/初始化秒为00,不暂停时钟(BIT7ds1302_Write(write_minute,0x59。/初始化分为00ds1302_Write(write_hour,0x23。 /初始化时为23,设置为24小时制(BIT7ds1302_Write(write_date,0x01。 /初始化日期为01ds1302_Write(write_month,0x01。/初始化月为01ds1302_Write(write_year,0x12。 /初始化年为(2012ds1

16、302_Write(write_day,0x07。 /周日ds1302_Write(write_power,0x0a5。/一个二极管压降,电阻4Kds1302_Write(write_protect,0x80。/打开写保护/DS1302数据处理函数,此函数将个位、十位分别用char表示,方便用数码管显示voiddata_pro(voidds1302_Write(write_protect,0x00。/关闭写保护date = ds1302_Read(read_date。/读取日if(date0x29 & month=0x02 /如果调时时2月超过29ds1302_Write(write_date

17、,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。/读取

18、星期ds1302_Write(write_protect,0x80。/打开写保护/按键中断处理程序(使用grace配置voidkey_pro(voidcharj。 /用于复制自定义的显示计数。 /延时去抖动if(!(P2IN & BIT6 /判断是否有按键按下i+。switch(icase1:write_command(0x83。 /显示光标到年write_command(0x0f。break。case2:write_command(0x86。 /显示光标到月write_command(0x0f。break。case3:write_command(0x89。 /显示光标到日write_comm

19、and(0x0f。break。case4:write_command(0x8f。 /显示光标到周write_command(0x0f。break。case5:write_command(0xc9。 /显示光标到时write_command(0x0f。break。case6:write_command(0xcc。 /显示光标到分write_command(0x0f。break。case7:write_command(0xcf。 /显示光标到秒write_command(0x0f。break。default:break。if(i7i=0。write_command(0x0c。 /关闭光标显示P2I

20、FG=0。 /软件复位标志while(!(P2IN & BIT6ds1302_Write(write_protect,0x00。/关闭写保护while(!(P2IN & BIT7 /如果按键2被按下switch(i /根据i的值来确定某变量进行加1case0: /显示自定义的语句for(j=0。jdis_buf1j = weiwei1j。dis_buf2j = weiwei2j。display(。break。case1: /此事处理全局变量yearyear+。 /year加1if(year0x99 /如果year大于99则置0year=0。if(year & 0x0f0x09 /如果year低

21、四位大于9。/将变化后的year写入DS1302year = ds1302_Read(read_year。/读出来year显示。 /更新显示字符while(!(P2IN & BIT7display(。break。case2: /此时处理全局变量monthmonth+。if(month0x12month=1。if(month & 0x0f0x09month +=0x10。month &=0xf0。ds1302_Write(write_month,month。month = ds1302_Read(read_month。update_disbuf(。 /更新显示字符while(!(P2IN & B

22、IT7display(。break。case3: /此时处理全局变量datedate+。if( (date0x29 & month=0x02| (month=0x04 | month=0x06 | month=0x09 | month=0x11& date0x30| date0x31 date=0x01。if(date & 0x0f0x09date +=0x10。date &=0xf0。ds1302_Write(write_date,date。date = ds1302_Read(read_date。update_disbuf(。 /更新显示字符while(!(P2IN & BIT7displ

23、ay(。break。case4: /此时处理全局变量dayn+。if(n0x07n=1。ds1302_Write(write_day,n。n = ds1302_Read(read_day。update_disbuf(。 /更新显示字符while(!(P2IN & BIT7display(。break。case5: /此时处理全局变量hourhour+。if(hour0x23hour=0。if(hour & 0x0f0x09hour +=0x10。hour &=0xf0。ds1302_Write(write_hour,hour。hour = ds1302_Read(read_hour。updat

24、e_disbuf(。 /更新显示字符while(!(P2IN & BIT7display(。break。case6: /此时处理全局变量minuteminute+。if(minute0x59minute=0。if(minute & 0x0f0x09minute +=0x10。minute &=0xf0。ds1302_Write(write_minute,minute。minute = ds1302_Read(read_minute。update_disbuf(。 /更新显示字符while(!(P2IN & BIT7display(。break。case7: /此时处理全局变量secondsec

25、ond+。if(second0x59second=0。if(second & 0x0f0x09second +=0x10。second &=0xf0。ds1302_Write(write_second,second。second = ds1302_Read(read_second。update_disbuf(。 /更新显示字符while(!(P2IN & BIT7display(。break。default:break。ds1302_Write(write_protect,0x80。/打开写保护/纪念日处理程序voidjww(voidcharww_xx。for(ww_xx=0。ww_xxdis_buf1ww_xx = love1ww_xx。dis_buf2ww_xx = love2ww_xx。love_years= year - 0x11。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1