关闭

关闭

关闭

封号提示

内容

首页 电子时钟加日历显示.doc

电子时钟加日历显示.doc

电子时钟加日历显示.doc

上传者: 房Violet 2018-05-15 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《电子时钟加日历显示doc》,可适用于IT/计算机领域,主题内容包含电子时钟加日历显示叶思奇甘肃省天水师范学院物理与信息科学学院电信一班一、任务和要求设计制作一个电子表并且能够显示日历用LED数码管直接显示并且能够通符等。

电子时钟加日历显示叶思奇甘肃省天水师范学院物理与信息科学学院电信一班一、任务和要求设计制作一个电子表并且能够显示日历用LED数码管直接显示并且能够通过按键调整时间、年月日功能为按第一个键被调整的相应调整区域开始闪烁第二个键加一第三个减一第四个确认最后一个在时分秒和年月日中间相互切换。二、方案论证我们在这里选用了CF单片机它是完全集成的混合信号系统级芯片(SoC)具有与兼容的高速CIP内核与MCS指令集完全兼容片内集成了数据采集和控制系统中常用的模拟、数字外设及其他功能部件内置FLASH程序存储器、内部RAM大部分器件内部还有位于外部数据存储器空间的RAM即XRAM。CF单片机具有片内调试电路通过脚的JTAG接口可以进行非侵入式、全速的在系统调试。三、系统硬件电路设计该系统分为两个部分主控电路和扫描电路其中键盘扫描和LED扫描为今后节省IO口线我将键盘的扫描和LED的扫描共用在扫描LED的同时也扫描键盘这样不但方便而且为今后的扩展留下了相当大的余地。主控制器单片机使用cf并且使用它的开发板易于烧录改变程序和外围电路。显示电路显示板因为常用是我自己画出来交给工厂做的采用个两位共阳数码管从P口输出位段码分别和P相接通过定时器实现秒钟的加一又因为有推挽输出所以不必再加外部电路对数码管进行驱动直接将它们与P口相连就可以键盘电路键盘是是与数码管的位选相连通过二极管使它们具有单向性同时将开头最终通过三极管接单片机的P只要有按键按下P就一定会发生变化通过这个变化在去扫描位就可以得出是哪个按键了。附电路图:四、系统程序设计系统和程序主要包括:显示程序键盘扫描程序自动加秒分时日月年附程序:***************************************************************************从左至右键盘依次为keykeykey:预制键key:加key:减key:确认key:时间和年月日相互切换段码备注:位码备注:(从右往左)aP一位PbP二位Pcp三位Pdp四位Pep五位Pfp六位Pgp七位P按键P八位P******************************************************************************#include"cfh"#defineucharunsignedchar#defineuncharunsignedcharucharcodeduan={xa,xbd,x,xc,x,x,x,xad,x,x}段码表ucharcodewei={x,x,x,x,x,x,x,x}位码表ucharcodeweek={xbd,x,xc,x,x,x,xad}星期一到星期日uchardataa,sec,min,hour,ymd,year,year=,year=,month=day=,week=初始值是::,日期是ucharn,cnt,sw=,sw,sw,cnt,swucharkey,key,key,key=,key=sbitP=P^voidscankey(void)voiddelay(ms)****************************开中断子函数***********************************************************************voidinit(void){IE=xATCON=xTMOD=xIP=xATH=()TL=()TH=()TL=()}voidtime(void)interrupt{TH=()TL=()dataaif(sw!=key==)第一个按键按下且第四个没有按下{if(cnt==){cnt=if(sw==sw==){for(n=n<n){P=xP=Pxf闪烁程序P=duansecP=weidelay()P=xP=duansecP=weidelay()P=xP=duanhourP=weidelay()P=xP=duanhourP=weidelay()P=xP=xfP=weidelay()P=xP=weekweekP=weidelay()}scankey()}if(sw==sw==){for(n=n<n){P=xP=PxcfP=duansecP=weidelay()P=xP=duansecP=weidelay()P=xP=duanminP=weidelay()P=xP=duanminP=weidelay()P=xP=xfP=weidelay()P=xP=weekweekP=weidelay()}scankey()}if(sw==sw==){for(n=n<n){P=xP=PxfP=duansecP=weidelay()P=xP=duansecP=weidelay()P=xP=duanminP=weidelay()P=xP=duanminP=weidelay()P=xP=duanhourP=weidelay()P=xP=duanhourP=weidelay()P=xP=xfP=weidelay()}scankey()}if(sw==sw==){for(n=n<n){P=xP=PxfP=duanmonthP=weidelay()P=xP=duanmonthP=weidelay()P=xP=duanyearP=weidelay()P=xP=duanyearP=weidelay()P=xP=duanyearP=weidelay()P=xP=duanyearP=weidelay()}scankey()}if(sw==sw==){for(n=n<n){P=xP=PxfP=duandayP=weidelay()P=xP=duandayP=weidelay()P=xP=duanyearP=weidelay()P=xP=duanyearP=weidelay()P=xP=duanyearP=weidelay()P=xP=duanyearP=weidelay()}scankey()}if(sw==sw==){for(n=n<n){P=xP=PxcP=duandayP=weidelay()P=xP=duandayP=weidelay()P=xP=duanmonthP=weidelay()P=xP=duanmonthP=weidelay()P=xP=duanyearP=weidelay()P=xP=duanyearP=weidelay()}scankey()}if(sw==sw==){for(n=n<n){P=xP=PxcP=duandayP=weidelay()P=xP=duandayP=weidelay()P=xP=duanmonthP=weidelay()P=xP=duanmonthP=weidelay()P=xP=duanyearP=weidelay()P=xP=duanyearP=weidelay()}scankey()}}}}voidtime(void)interrupt{TH=()TL=()if(cnt>)cnt=if(sw==)显示时分秒{switch(cnt){case:P=xP=duansecP=weicntbreakcase:P=xP=duansecP=weicntbreakcase:P=xP=duanminP=weicntbreakcase:P=xP=duanminP=weicntscankey()breakcase:P=xP=duanhourP=weicntscankey()breakcase:P=xP=duanhourP=weicntscankey()breakcase:P=xP=xfP=weicntscankey()breakcase:P=xP=weekweekP=weicntscankey()breakdefault:break}}if(sw==)显示年月日{switch(cnt){case:P=xP=duandayP=weicntbreakcase:P=xP=duandayP=weicntbreakcase:P=xP=duanmonthP=weicntbreakcase:P=xP=duanmonthP=weicntscankey()breakcase:P=xP=duanyearP=weicntscankey()breakcase:P=xP=duanyearP=weicntscankey()breakcase:P=xP=duanyearP=weicntscankey()breakcase:P=xP=duanyearP=weicntscankey()breakdefault:break}}}voidconv(void){if(dataa>=){dataa=sec}if(sec>=){sec=min}if(sw==min>=){min=hour}if(sw==hour>=){if(year==){if(month==){if(day==){day=month}elseday}else{if(month==||month==||month==||month==){if(day==){day=month}elseday}else{if(day==){day=monthif(month==){month=year}}elseday}}}else{if(month==){if(day==){day=month}elseday}else{if(month==||month==||month==||month==){if(day==){day=month}elseday}else{if(day==){day=monthif(month==){month=yearif(year==){year}}}elseday}}}hour=week}if(sw==week>=)week=}voiddelay(ms){uchari,kwhile(ms)for(k=k<k)for(i=i<i)}voidscankey(void){if(cnt==P==){delay()if(cnt==P==){key=key=检查是第一个键按下}}if(sw==key==cnt==P==)按键松手时表示真的按下,sw判断此时是什么显示状态时间还是年月日{sw=闪烁分针}if(sw==key==cnt==P==)若为年月日则闪烁第一二位{sw=}if(sw==P==cnt==)在时间状态第一个键又一次按下{delay()if(sw==P==cnt==){key=在时间状态第一个键的第二种状态}}if(sw==P==cnt==)在年月日状态第一个键第二次按下{delay()if(sw==P==cnt==){key=在年月日状态第一个键的第二种状态}}if(key==cnt==P==)在时间确认第一个键第二次按下{sw=并闪烁时针}if(key==cnt==P==)年月日状态确认第一个键第二次按下{sw=并闪烁月分}if(sw==P==cnt==)在年月日状态第一个键第三次按下{delay()if(sw==P==cnt==){key=在年月日状态第一个键的第三种状态}}if(key==cnt==P==)年月日状态确认第一个键第三次按下{sw=并闪烁年的后两位}if(sw==P==cnt==){delay()if(sw==P==cnt==){key=}}if(sw==P==cnt==)在年月日状态第一个键第四次按下{delay()if(sw==P==cnt==){key=在年月日状态第一个键的第四种状态}}if(key==cnt==P==)年月日状态确认第一个键第四次按下{sw=并闪烁年的前两位}if(sw==P==cnt==){delay()if(sw==P==cnt==){key=}}if(key==cnt==P==){sw=并闪烁星期}if(sw==P==cnt==)检查第二个键是否按下{delay()if(sw==P==cnt==){key=}}if(key==cnt==P==){key=sw=在时间状态确认第二个键按下if(sw==sw==)和sw的值对比加分{minif(min>=)min=}if(sw==sw==)和sw的值对比加时{hourif(hour>=)hour=}if(sw==sw==){weekif(week>)week=}}if(sw==P==cnt==)在年月日检查第二个键是否按下{delay()if(sw==P==cnt==){key=}}if(key==cnt==P==){key=sw=确认第二个键按下if(sw==sw==)和sw的值对比加day{dayif(day>)day=}if(sw==sw==)和sw的值对比加month{monthif(month>)month=}if(sw==sw==){yearif(year>)year=}if(sw==sw==){yearif(year>)year=}}检查时间状态第三个键是否按下if(sw==P==cnt==)检查第三个键是否按下{delay()if(sw==P==cnt==){key=}}if(key==cnt==P==){key=sw=if(sw==sw==){if(min<=)min=min分针减}if(sw==sw==){if(hour<=)hour=hour时针减}if(sw==sw==){if(week<=)week=week}}if(sw==P==cnt==)在年月日检查第三个键是否按下{delay()if(sw==P==cnt==){key=}}if(key==cnt==P==){key=sw=if(sw==sw==){if(day<=)day=dayday减}if(sw==sw==){if(month<=)month=monthmonth减}if(sw==sw==){if(year<=)year=year减year}if(sw==sw==){if(year<=)year=year减year}}if(P==cnt==sw!=sw==){delay()if(P==cnt==sw!=sw==){sw=sec=key=key=}}if(P==cnt==sw!=sw==){delay()if(P==cnt==sw!=sw==){sw=key=key=}}if(P==cnt==){delay()if(P==cnt==){key=}}if(key==P==cnt==){sw=}if(P==sw==cnt==){delay()if(P==sw==cnt==){key=}}if(P==key==cnt==){sw=}}voidmain(void){PCAMD=XBR=xPMDOUT=xFFPMDOUT=xFFinit()while(){conv()year=yearyear*}}

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/26
0下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部