欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    51单片机电子日历课程设计kqg.docx

    • 资源ID:63052999       资源大小:53.44KB        全文页数:27页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    51单片机电子日历课程设计kqg.docx

    51单片片机电子子日历课课程设计计程序代码码:/*/* 电电子日历历,有时时间显示示、闹铃铃、日期期、秒表表及键盘盘设置功功能 */* 功功能键AA: 设置置位数字字+1 闹闹钟模式式下为闹闹钟开关关 秒秒表模式式下为记记时开关关 */* 功功能键BB: 设置置位数字字-1 闹闹钟模式式下为闹闹钟开关关 */* 功功能键CC:设置置模式及及设置位位选择 秒表表模式下下为清零零键 */ /* 功功能键DD:在四四种工作作模式下下切换 设置闹闹钟开关关 */ /* 曹宇 033电子 022010029 */* 20006.66.3 更新新 */*/#inccludde #inccludde /*这里设设置程序序初始化化时显示示的时间间*/#deffinee SEET_HHOURR 122 /*设置置初始化化小时*/#deffinee SEET_MMINUUTE 00 /*设置初初始化分分钟*/#deffinee SEET_SSECOOND 00 /*设置初初始化秒秒数*/*系统统地址*/#deffinee BAASE_PORRT 00x80000 /*选选通基地地址*/#deffinee KEEY_LLINEE BAASE_PORRT+11 /*键盘行行线地址址*/#deffinee KEEY_CCOLUUMN BASSE_PPORTT+2 /*键键盘列线线地址*/#deffinee LEED_SSEG BASSE_PPORTT+4 /*数数码管段段选地址址*/#deffinee LEED_BBIT BASSE_PPORTT+2 /*数数码管位位选地址址*/#deffinee LEED_OON(xx) XXBYTTELLED_BITT=(0x001<#deffinee LEED_OOFF XBYYTELEDD_SEEG=0x000 /*LLED显显示空*/*在在设置模模式下对对秒分时时的宏定定义*/#deffinee SEECONND 00 /*对对应数码码管右边边两位*/#deffinee MIINUTTE 11 /*对对应数码码管中间间两位*/#deffinee HOOUR 2 /*对对应数码码管左边边两位*/*定定义四种种工作模模式*/#deffinee CLLOCKK cllockkstrr /*时钟模模式*/#deffinee ALLARTT allarttstrr /*闹钟模模式*/#deffinee DAATE dattesttr /*日期模模式*/#deffinee TIIMERR tiimerrstrr /*秒表模模式*/*以下下是所有有子函数数的声明明*/voidd syys_iinitt(vooid); /*系系统的初初始化程程序*/voidd diispllay(voiid); /*动动态刷新新一次数数码管子子程序*/voidd cllockkpluus(vvoidd); /*时间间加1SS的子程程序*/voidd uppdatte_ccloccksttr(vvoidd); /*更新时时间显示示编码*/voidd uppdatte_aalarrtsttr(vvoidd); /*更更新闹钟钟时间的的显示编编码*/voidd uppdatte_ddateestrr(vooid); /*更更新日期期显示编编码*/voidd uppdatte_ttimeersttr(vvoidd); /*更更新秒表表时间的的显示编编码*/voidd deeleyy(innt); /*延时子子程序*/voidd uppdatte_ddisppbuff(unnsiggnedd chhar *); /*更新新显示缓缓冲区*/unsiigneed ccharr geetkeeycoode(voiid); /*获取取键值子子程序*/voidd keeyprroceess(unssignned chaar); /*键值值处理子子程序*/unsiigneed ccharr geetmoonthhdayys(uunsiigneed iint,unssignned chaar);/*计计算某月月的天数数子程序序*/*功能能键功能能子函数数*/voidd Akkey(voiid); /*当前设设置位+1 开开关闹钟钟 开关关秒表*/voidd Bkkey(voiid); /*当前设设置位-1 开开关闹钟钟 */voidd Ckkey(voiid); /*设置位位选择 秒表表清零*/voidd Dkkey(voiid); /*切换四四种工作作模式*/*全局局变量声声明部分分*/unsiigneed ccharr leed110=0xx3F,00x066,0xx5B,0x44F,00x666,0xx6D,0x77D,00x077,0xx7F,00x6FF;/*从009的的LEDD编码*/unsiigneed ccharr leedchhar3=0xx5c,00x544,0xx71;/*o nn f*/unnsiggnedd chhar keyy244= /* 键键值代码码数组 对应键键位:*/ 00x700,0xx71,0x772,00x733,0xx74,0x775, /* 7 8 9 A TTRACCE RRESEET*/ 00xb00,0xxb1,0xbb2,00xb33,0xxb4,0xbb5, /* 4 5 6 B STEEP MOON */ 00xd00,0xxd1,0xdd2,00xd33,0xxd4,0xdd5, /* 1 2 3 C HERRE LASST */ 00xe00,0xxe1,0xee2,00xe33,0xxe4,0xee5; /* 00 FF EE DD EXXEC NEEXT */struuct /*时间间结构体体变量*/ unssignned chaar ss;unsiigneed ccharr m; unssignned chaar hh; cllockk=SSET_SECCONDD,SEET_MMINUUTE,SETT_HOOUR;struuct /*闹铃时时间结构构体变量量*/ unssignned chaar mm; unssignned chaar hh; allartt=SSET_MINNUTEE,SEET_HHOURR;struuct /*日日期结构构体变量量*/ uunsiigneed iint yeaar; unnsiggnedd chhar monnth; unnsiggnedd chhar dayy; ddatee=66,1,1;struuct /*秒秒表时间间结构体体变量*/ unnsiggnedd chhar ms; unnsiggnedd chhar s; unnsiggnedd chhar m; ttimeer=0,00,0;unsiigneed ccharr diispbbuf6; /*显示缓缓冲区数数组*/unsiigneed ccharr cllockkstrr6; /*时间间显示的的数码管管编码数数组*/unsiigneed ccharr allarttstrr6; /*闹钟钟显示的的数码管管编码数数组*/unsiigneed ccharr daatesstr6; /*日期显显示的数数码管编编码数组组*/unsiigneed ccharr tiimerrstrr6; /*秒表显显示的数数码管编编码数组组*/unsiigneed iint itiime=0,iidott; /*定时时器0中中断计数数*/unsiigneed ccharr ittimee1=00; /*定定时器11中断计计数*/sbitt P33_1=P31; /*外接接蜂鸣器器的管脚脚*/bdatta bbit IsSSet=0; /*设置模模式标志志位 00:正常常走时 1:设设置模式式*/bdatta bbit Alaart_EN=0; /*闹铃功功能允许许位 0:禁禁止闹铃铃 1:允许闹闹铃*/bdatta bbit IsBBeepp=0; /*响铃标标志位 00:未响响铃 1:正在响响铃*/unsiigneed ccharr SeetSeelecct=00; /*在设设置模式式IsSSet=1时,正正在被设设置的位位,对应应上面的的宏*/unsiigneed ccharr *CCurrrenttModde; /*标标志当前前正设置置的功能能,如CCurrrenttModde=CCLOCCK或CCurrrenttModde=AALARRT等*/voidd tiimerrpluus(vvoidd);/*函函数部分分*/voidd maain(voiid) syys_iinitt(); whiile(1) XBBYTEEKEEY_CCOLUUMN,0x000; /*给给键盘列列线赋全全零扫描描码,判判断是否否有键按按下 */ whhilee(XXBYTTEKKEY_LINNE&&0x00f)=0xx0f) /*检检测是否否有键按按下,无无则一直直进行LLED的的刷新显显示*/ iff(Allartt_ENN&&(cloock.h=alaart.h)&&&(cclocck.mm=aalarrt.mm) IssBeeep=11; ellse IsBBeepp=0; PP3_11=0; diispllay(); keeyprroceess(gettkeyycodde(); /*有键按按下时得得到键值值,并送送入键值值处理程程序*/ dissplaay(); /*可要要可不要要*/ voidd syys_iinitt(vooid) TMOOD=00x222; /*定定时器00和1都都设置为为工作方方式2,基准定定时2550×25500uus=00.5mms*/ TH00=6; /*定时器器0中断断服务用用来产生生1秒时时钟定时时及闹钟钟蜂鸣器器蜂鸣脉脉冲*/ TL00=6; /*定时器器1中断断服务留留给秒表表使用,产产生1/1000秒定时时*/ THH1=66; TLL1=66; ETT0=11; ETT1=11; EAA=1; TR00=1; uppdatte_ccloccksttr(); /*初初始化时时钟显示示编码数数组*/ uppdatte_aalarrtsttr(); /*初始始化闹钟钟显示编编码数组组*/ uppdatte_ddateestrr(); /*初始始化日期期显示编编码数组组*/ uppdatte_ttimeersttr(); /*初始始化秒表表显示编编码数组组*/ uppdatte_ddisppbuff(cllockkstrr);/*初始始化显示示缓冲数数组*/ CuurreentMModee=CLLOCKK; /*默认认的显示示摸式为为时钟*/ P33_1=0; /*蜂鸣鸣器接线线引脚复复位*/voidd tiimerr0(vvoidd) iinteerruupt 1 uusinng 11 /*定时时器0中中断服务务器,用用来产生生1秒定定时*/ itiime+; if(itiime=10000) if(IsSSet) /*在设设置模式式下,对对正在设设置的位位闪烁显显示*/ ddisppbuffSeetSeelecct*22=00; /*对对正在设设置的位位所对应应的显示示缓冲区区元素赋赋0,使使LEDD灭*/ disspbuufSSetSSeleect*2+11=00; if(IsBBeepp) PP3_11=!PP3_11; /*闹钟钟模式时时,产生生峰鸣器器响脉冲冲*/ if(CurrrenntMoode=CLLOCKK) ddisppbuff2=diispbbuf2&&0x77f; ddisppbuff4=diispbbuf4&&0x77f; if(itiime=20000) /*两两千次计计数为11S 20000×0.55ms=1s*/ iitimme=00; /*定时11s时间间到,软软计数清清零*/ cclocckpllus(); /*时间间结构体体变量秒秒数加11 */ uupdaate_cloocksstr(); /* 更新新时间显显示编码码数组 */ if(CurrrenntMoode!=TIIMERR) uupdaate_disspbuuf(CCurrrenttModde); /* 用时时间编码码数组更更新显示示缓冲区区 */ voidd tiimerr1(vvoidd) iinteerruupt 3 uusinng 22 /*定时器器1中断断服务器器,用来来产生11/1000秒定定时*/ idoot+; if(+iitimme1=200) /*200*0.5mss=100ms*/ ittimee1=00; tiimerrpluus(); uppdatte_ttimeersttr(); iff(CuurreentMModee=TTIMEER) uupdaate_disspbuuf(ttimeersttr); ddisppbuff2=diispbbuf2&&0x77f; /*关关闭小数数点的显显示*/ ddisppbuff4=diispbbuf4&&0x77f; iif(iidott<10000) /*闪闪烁显示示小数点点*/ disspbuuf22=ddisppbuff2|0xx80; disspbuuf44=ddisppbuff4|0xx80; elsse disspbuuf22=ddisppbuff2&0xx7f; disspbuuf44=ddisppbuff4&0xx7f; if(idoot=20000) idoot=00;/*功能能模块子子函数*/voidd cllockkpluus(vvoidd) /*时时间加11s判断断分,时时子函数数*/ if(+cclocck.ss=660) /*秒位判判断*/ cllockk.s=0; if(+cclocck.mm=660) /*分分位判断断*/ cllockk.m=0; iff(+cloock.h=24) /*时位判判断*/ cloock.h=00; if(+ddatee.daay=(geetmoonthhdayys(ddatee.yeear,datte.mmontth)+1) daate.dayy=1; iff(+datte.mmontth=13) daate.monnth=1; voidd tiimerrpluus() /*秒表表1/1100秒秒位加11,判断断秒、分分子程序序*/ if(+ttimeer.mms=1000) tiimerr.mss=0; iff(+timmer.s=60) ttimeer.ss=0; iif(+tiimerr.m=600) timmer.m=00; voidd uppdatte_ccloccksttr(vvoidd) /*更新新时钟显显示代码码数组ccloccksttr*/ cloocksstr0=leddcllockk.s%10; /*给给元素00赋相应应数码管管显示编编码,编编码序号号是秒数数的个位位*/ cloocksstr1=ledd(iint)(cllockk.s/10); /*给给元素11赋相应应数码管管显示编编码,编编码序号号是秒数数的十位位*/ cloocksstr2=leddcllockk.m%10; /*以以下类推推*/ cloocksstr3=ledd(iint)(cllockk.m/10); cloocksstr4=leddcllockk.h%10; cloocksstr5=ledd(iint)(cllockk.h/10);voidd uppdatte_aalarrtsttr(vvoidd) /*更新闹闹钟显示示代码数数组allarttstrr*/ /*右边两两位显示示on:闹钟开开启 of:闹钟关关闭*/ iff(Allartt_ENN) aalarrtsttr00=lledccharr1;/*显示字字母n*/ ellse alaartsstr0=leddchaar22; /*显示字字母f*/ allarttstrr1=leedchhar0; /*显示字字母o*/ allarttstrr2=leedaalarrt.mm%100; allarttstrr3=leed(intt)(aalarrt.mm/100); allarttstrr4=leedaalarrt.hh%100; allarttstrr5=leed(intt)(aalarrt.hh/100);voidd uppdatte_ddateestrr(vooid) /*更新日日期显示示代码数数组daatesstr*/ daatesstr0=ledddaate.dayy%100; daatesstr1=ledd(iint)(daate.dayy/100); daatesstr2=ledddaate.monnth%10; daatesstr3=ledd(iint)(daate.monnth/10); daatesstr4=ledddaate.yeaar%110; daatesstr5=ledd(iint)(daate.yeaar/110);voidd uppdatte_ttimeersttr(vvoidd) /*更新秒秒表显示示代码数数组tiimerrstrr*/ tiimerrstrr0=leedttimeer.mms%110; tiimerrstrr1=leed(intt)(ttimeer.mms/110); tiimerrstrr2=leedttimeer.ss%100; tiimerrstrr3=leed(intt)(ttimeer.ss/100); tiimerrstrr4=leedttimeer.mm%100; tiimerrstrr5=leed(intt)(ttimeer.mm/100);voidd diispllay(voiid) /*刷新显显示六位位LEDD一次*/ unssignned chaar ii; forr(i=0;ii<6;i+) LEED_OON(ii); /*选通通相应位位*/ XBBYTEELEED_SSEG=diispbbufi; /*写显示示段码*/ delley(50); /*延时显显示*/ LEED_OOFF; /*写写LEDD全灭段段码*/ voidd uppdatte_ddisppbuff(unnsiggnedd chhar *sttr) /*更更新显示示缓冲区区子函数数,参数数为要用用来更新新缓冲区区的源字字符数组组的首地地址*/ diispbbuf0=strr0; /*将要要更新的的源字符符数组内内容COOPY至至disspbuuf数组组,用作作显示缓缓冲区*/ diispbbuf1=strr1; diispbbuf2=strr2|0xx80; /*默认把把时位和和分位后后面的小小数点显显示出来来,根据据需要再再取舍*/ diispbbuf3=strr3; diispbbuf4=strr4|0xx80; diispbbuf5=strr5;voidd deeleyy(innt ii) /*延延时子函函数*/ whhilee(i-);unsiigneed ccharr geetkeeycoode(voiid) /*键键盘扫描描子程序序,返回回获得的的键码*/ unssignned chaar kkeyccodee; /*键键码变量量,一开开始存行行码*/ unssignned chaar sscanncodde=00x200; /*列扫扫描码*/ unssignned chaar iicollumnn=0; /*键的的列号*/ diispllay(); /*用用刷新数数码管显显示的时时间去抖抖*/ XBBYTEEKEEY_CCOLUUMN=0xx00; keyycodde=XXBYTTEKKEY_LINNE&&0x00f; /*从从行端口口读入四四位行码码*/ whiile(sccanccodee&0xx3f)!=0) /*取sccanccodee的低六六位,只只要没变变为全00,则执执行循环环*/ XBBYTEEKEEY_CCOLUUMN=(scaancoode)&0xx3f; /*给给列赋扫扫描码,第第一次为为01111111*/ iff(XXBYTTEKKEY_LINNE&&0x00f)=keeycoode) brreakk; /*检测测按键所所在的列列跳出循循环*/ scaancoode=scaancoode>>>1; /*列扫描描码右移移一位*/ iccoluumn+; /*列号加加1*/ keyycodde=kkeyccodee<<44; /*把把行码移移到高四四位*/ keyycodde=kkeyccodee|iccoluumn; /*由行码码和列码码组成键键码*/ /等等待按键键放开 XBYYTEKEYY_COOLUMMN=0x000; whiile(XBBYTEEKEEY_LLINEE&00x0ff)!=0x00f) dissplaay(); retturnn keeycoode;voidd keeyprroceess(unssignned chaar kkeyccodee) /*键值值处理函函数*/ swiitchh (kkeyccodee) caase 0x773: Akeey(); breeak; caase 0xBB3: Bkeey(); bbreaak; caase 0xDD3: Ckeey(); bbreaak; casse 00xE33: DDkeyy(); bbreaak; deefauult: breeak; uppdatte_ddisppbuff(CuurreentMModee);unsiigneed ccharr geetmoonthhdayys(uunsiigneed iint yeaar,uunsiigneed ccharr moonthh)/*得到某某月的天天数*/ unssignned chaar ddayss; swiitchh (mmontth) caase 4: caase 6: caase 9: caase 11:dayys=330; breeak; caase 2: if(yeaar%44=00) ddayss=299; eelsee daays=28; breeak; deefauult:dayys=331; breeak; retturnn daays;/*功能能键子函函数部分分*/voidd Akkey(voiid) /*对对当前设设置位进进行加一一操作,如如果设置置秒位,则则给秒位位清零*/ iff(CuurreentMModee=TTIMEER) /*秒表模模式下启启闭走时时*/ TR11=!TTR1; retturnn; iff(!IIsSeet) retturnn; /*如如果不是是设置模模式退出出*/ swiitchh (SSetSSeleect) caase SECCONDD:iff(CuurreentMModee=CCLOCCK) cllockk.s=0; /*如果当当前被设设置位是是秒位,则则清零秒秒位*/ uppdatte_ccloccksttr(); if(CurrrenntMoode=ALLARTT) Allartt_ENN=!AAlarrt_EEN; uppdatte_aalarrtsttr(); if(CurrrenntMoode=DAATE)

    注意事项

    本文(51单片机电子日历课程设计kqg.docx)为本站会员(you****now)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开