数码管显示系统时间.c

上传人:kms****20 文档编号:41028020 上传时间:2018-05-28 格式:DOC 页数:13 大小:42KB
返回 下载 相关 举报
数码管显示系统时间.c_第1页
第1页 / 共13页
数码管显示系统时间.c_第2页
第2页 / 共13页
数码管显示系统时间.c_第3页
第3页 / 共13页
数码管显示系统时间.c_第4页
第4页 / 共13页
数码管显示系统时间.c_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《数码管显示系统时间.c》由会员分享,可在线阅读,更多相关《数码管显示系统时间.c(13页珍藏版)》请在金锄头文库上搜索。

1、数码管显示系统时间数码管显示系统时间.c.c#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#include /“f=22.1184MHz“uchar code shu10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/“用于数码管显示 09“uchar code wei44=0x10,0x20,0x40,0x80,0x00,0x00,0x40,0x80,0x10,0x20,0x00,0x00,0,0,0,0;/“数码管位变量,用

2、于控制哪个数码管显示数字,在任意时刻做多显示一位数,0x00 就表示每个数码管都不亮,用于在调整时间时制造闪烁视觉效果“uchar sfm7=0,0,12,1,10,9,20,haomiao=0;/“复位时,默认时间为 2009 年 10 月 1 日 12 时 0 分 0 秒 0 毫秒,这里的毫秒是 1/100s 的意思“uchar yu,zi,tiao=0,kuai,anzhu=0,ttime=0,jitimes=0,twotimes=8;/“yu:m/4 的余数即 yu=m%4(临时变量,1/100s 之内会取到 03 四个值,作为制数码管位变量的指针“/“zi:数组 shu 的指针,用于

3、控制数码管显示哪个数字,(P1=shuzi;)“/“tiao=0 表示没有调时间,tiao=1,2,3,4,5,6 分别表示正在调年、月、日、时、分、秒“/“kuai:用于在调整时间时,控制被调变量的增/减的快慢“/“anzhu=0 表示没有长按任何一个键,anzhu=1,2,3,4,5,6,7,8 分别表示正在长按第一、二、三、四、五、六、七、八个键,anzhu=9表示按住的键不止一个“/“ttime:正在调时间时,放弃按键的时间,单位为妙,放弃时间过长,系统就应该认为时间已经调整完毕“/“jitimes:在 0.5 妙内点击按键的次数,是为了实现双击功能而设定的变量“/“twotimes=

4、07 分别表示双击了第一八个键,=8 表示没有双击任何键,=9 表示连按的两个键不是同一个键“uint m=0,n,i=1,k,l=199,o,ktime=0,daijitime=0,jitime=0;/“m:每 1/400s 就 m+(1/400s 为定时器周期)“/“n,i,j,k:公用变量,用于很多地方,不同的地方有不同的意义“/“l:用于控制被调变量的增减速度“/“o:用于控制花样跑马灯的亮法,每 20s 变化一次“/“ktime:长按某键的时间,单位为 1/100s“/“daijitime:没有调时间且没有按任何键这种待机状态的持续时间,单位为 1/100s“/“jitime:连某键

5、的总时间,包括在非待机状态下按下、弹起、再按下、再弹起四个阶段的时间,单位为 1/100s,是专为实现双击功能而设定的变量“bit daiji=1,paomiao=0,lunliu=0;/“daiji:系统是否处在待机状态即没有调时间没有按任何键的一般状态“/“paomiao:显示跑秒的状态“/“lunliu:轮流显示年、月日、时分、分秒的状态“uchar zuo6=0,1,0,1,0,0,run=0,days=31,lunci;/“zuo=1 表示控制闪烁数码管显示器左两位,zuo=0 表示右两位“/“run:是否是闰年“/“days:每个月的天数(它是变量) ,复位时,2009 年 10

6、月的天数是 31“/“lunci:控制花样跑马灯的显示类型“uchar jilu2=8,8,ji2=8,8;/“jilu0,jilu1:相邻两 1/100s 的按键扫描纪录“/“在 0.5s 内按下的两个键的键值记录,用于实现双击功能“uchar deng2;/“用于实现花样跑马灯“uchar code sudu20=100,90,81,73,66,59,53,48,43,39,35,31,28,25,23,21,19,17,15,14;/“用于实现花样跑马灯的变速“void shuaxin()/“每一秒刷新一次数据,用于实现数据的归零和进位“if(haomiao=100)/“如果毫秒溢出“h

7、aomiao=0;sfm0+;if(lunliu)lunci=sfm0%10/2;/“毫秒归零,秒进 1,如果处在轮流显示状态,就让秒的个位决定轮流显示的轮次“if(sfm0=60)/“秒溢出“sfm1+;/“分进位“if(sfm1=60)/“分溢出“sfm2+;/“时进位“if(sfm2=24)/“时溢出“sfm3+;/“日进位“if(sfm3=days+1)/“日溢出“sfm4+;/“月进位“if(sfm4=13)/“月溢出“sfm5+;/“年进位“if(sfm5%4=0)/“判断是否为闰年“if(sfm5%100=0)if(sfm5%400=0)run=1;else run=0;else

8、 run=1;else run=0;sfm4=1;/“月归位“sfm3=1;/“日归位“sfm2=0;/“时归位“sfm1=0;/“分归位“sfm0=0;/“秒归位“if(tiao/“如果正在调时间且没有按住任何键,就让放弃按键的时间加 1s“if(ttime=9)/“如果放弃按键的时间长达 9s“ttime=0;tiao=0;/“让放弃按键的时间归零,系统认为时间已经调整完毕“void shuaxin2()/“正在调时间时,每一秒刷新一次数据,用于实现数据的归零归满进位退位“if(sfm5%4=0)/“判断是否为润年“if(sfm5%100=0)if(sfm5%400=0)run=1;els

9、e run=0;else run=1;else run=0;days=30+(sfm47/“计算本月天数“if(sfm0=-1)sfm0=59;if(sfm1=-1)sfm1=59;if(sfm2=-1)sfm2=23;if(sfm3=0)sfm3=days;if(sfm4=0)sfm4=12;if(sfm5=8)sfm5=99;if(sfm0=60)sfm0=0;if(sfm1=60)sfm1=0;if(sfm2=24)sfm2=0;if(sfm3days)sfm3=1;if(sfm4=13)sfm4=1;if(sfm5=100)sfm5=9;uchar saoan()/“扫描按键“P0=0

10、xff;/“关数码管灯,且按键置位(在电路中,数码管和按键公用了 P0 口)“P2=0xfe;/“P2.7 是八个按键的共阴端,它置零才可使按键有效“k=255-P0;/“k 的 8 个位中,为 0 的位表示对应的键没有被按到,为 1 的位表示对应的键被按到了“P2=0xff;/“p2.7 置位,使按键失效,免得长按某键时数码管的某段选位常亮“for(n=0;n1)k=9;/“9 表示按下的键不止一个“else k=n;/“07 表示有对应何键被按下,8 表示未按下任何键“return(k);void lishijilu()/“记录两相邻 1/100s 的按键输入情况“jilu1=jilu0;

11、jilu0=n;void lishiji()/“记录连续两次点击的按键“if(jilu1=8/“如果记录点击总时间达到 0.5s 时未按任何键,就进入待机状态“if(jitimes=2)/“如果点击次数达到 2“if(jitime=30)sfm1+;if(tiao3)sfm6-tiao=0;/“键 5 实现清零,若调秒,分就随秒而四舍五入“if(tiao=6haomiao=0;/“如果正在调秒,调大调小或清零都使跑秒清零“if(anzhu)shuaxin2();/“数据刷新“ if(!tiao)twotimes=shuangji();else twotimes=8;/“如果没有调时间,记下双击

12、的键“if(twotimes=0/“双击键 0 就开启跑秒显示功能,“/ else if(twotimes=1sfm2=12;else if(twotimes=1)lunliu=!lunliu;/“双击键 1 就开启轮流显示功能“/ else if(twotimes=2)sfm2-;if(sfm2=-1)sfm2=23;/ else if(twotimes=4)sfm2+;if(sfm2=24)sfm2=0;/ else if(twotimes=3)sfm1-;if(sfm1=-1)sfm1=59;sfm2-;if(sfm2=-1)sfm2=23;sfm0=30;/ else if(twoti

13、mes=5)sfm1+;sfm0=30;/ else if(twotimes=6)sfm2=0;/ else if(twotimes=7)sfm1=0;sfm0=30;void liushui()/“流水灯花样一“deng0=deng0/128+deng0*2;deng1=deng1*128+deng1/2;P1=255-(deng0|deng1); void liushui2()/“流水灯花样二“if(deng1)deng0=deng0*2;if(deng0/128)deng1=0;else deng0=deng0/2;if(deng0%2)deng1=1;P1=255-deng0;void

14、 liushui3()/“流水灯花样三“deng0=deng07;P1=255-deng0;void dengP1()/“P1 口接 8 个共阳 lcd,此段程序控制灯的亮法“ if(!lunliu|lunci3) void xianzi()yu=mif(lunliu)/“如果正在使用轮流显示模式“if(lunci=0)goto nianfen;else if(lunci=1)goto yueri;else if(lunci=2|lunci=3)goto shijian;else goto pao;if(!tiao)if(jilu0=7)goto nianfen;else if(jilu0=6

15、)goto yueri;else if(paomiao)pao:zi=(yu=0)*(haomiao%10)+(yu=1)*(haomiao/10)+(yu=2)*(sfm0%10)+(yu=3)*(sfm0/10);elsezi=(yu=0)*(sfmi%10)+(yu=1)*(sfmi/10)+(yu=2)*(sfm1+i%10)+(yu=3)*(sfm1+i/10);elseif(tiao=1)/“如果正在调年份“nianfen:zi=(yu=0)*(sfm5%10)+(yu=1)*(sfm5/10)+(yu=2)*(sfm6%10)+(yu=3)*(sfm6/10);else if(tiao=2|ti

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号