认证主体:宁夏凯米世纪网络科技有限公司
IP属地:宁夏
统一社会信用代码/组织机构代码
91640100MA774ECW4K
2、个数#definevtl0(65536-msecond*fosc/12*1000)%256)/计算定时器初值#definevth0(65536-msecond*fosc/12*1000)/256)#definesegport(p0)/显示器段码口#defineweiport(p1)/显示器位码口#defineflashhour(1)/小时闪烁判断值#defineflashminute(2)/分钟闪烁判断值#defineflashsecond(3)/秒闪烁判断值#defineflashall(4)/所有位闪烁判断值#defineflashnone(5)/不闪烁判断值#defin
5、序设定为“增键”sbitkey3=p22;/3号按键,以下程序设定为“减键”sbitbeep=p27;/闹铃驱动口线sbitamled=p23;/am指示灯sbitpmled=p24;/pm指示灯typedefstruct/定义一个时钟结构体类型tclockunsignedcharhour;unsignedcharminute;unsignedcharsecond;unsignedintmsecond;/毫秒unsignedchartimemode;/表示时钟模式,是12小时模式还是24小时模式unsignedcharamorpm;/表示当前是上午还是下午
10、nute、flashsecond、flashall、flashnonevoiddisplay(unsignedcharflashwhich)unsignedcharweicode,i;staticunsignedcharnstate=0,flashcount=flashfreq;weicode=0xfe;for(i=0;i0)segport=dispbufi;elseflashcount=flashfreq;nstate=1;break;case1:/offif(-flashcount0)segport=dispbuf10;elseflashcount
11、=flashfreq;nstate=0;break;default:nstate=0;elsesegport=dispbufi;break;caseflashminute:if(i=2)|(i=3)switch(nstate)case0:/onif(-flashcount0)segport=dispbufi;elseflashcount=flashfreq;nstate=1;break;case1:/offif(-flashcount0)segport=dispbuf10;elseflashcount=flashfreq;nstate=0;brea
12、k;default:nstate=0;elsesegport=dispbufi;break;caseflashsecond:if(i=4)|(i=5)switch(nstate)case0:/onif(-flashcount0)segport=dispbufi;elseflashcount=flashfreq;nstate=1;break;case1:/offif(-flashcount0)segport=dispbuf10;elseflashcount=flashfreq;nstate=0;break;default:nstate=0;else
13、segport=dispbufi;break;caseflashall:switch(nstate)case0:/onif(-flashcount0)segport=dispbufi;elseflashcount=flashfreq;nstate=1;break;case1:/offif(-flashcount0)segport=dispbuf10;elseflashcount=flashfreq;nstate=0;break;default:nstate=0;break;default:segport=dispbufi;flashcount=flashf
14、req;weiport=weicode;weicode=1;weicode|=1;xdelay(10);/显示指定时钟的时钟下标(编号)/aclock时钟下标voiddisplayclock(unsignedcharxclock)dispbuf0=0x39;/cdispbuf1=0x38;/ldispbuf2=0x3f;/odispbuf3=0x39;/cdispbuf4=0x00;/熄灭dispbuf5=segcodexclock;/时钟编号display(flashnone);/用于显示所选时钟闹铃的开关状态/onoff开关状态,可取值为alarmon、ala
16、ode12、timemode24voiddisplaytimemode(unsignedcharxtimemode)if(xtimemode=timemode12)dispbuf0=segcode1;/1dispbuf1=segcode2;/2elsedispbuf0=segcode2;/2dispbuf1=segcode4;/4dispbuf2=0x74;/hdispbuf3=0x5c;/odispbuf4=0x1c;/udispbuf5=0x70;/rdisplay(flashnone);/键盘函数,返回值为按键的键值/返回值包括key1,ke
17、y2,key3,nokeyunsignedcharkey(void)staticunsignedcharxcount=0;if(+xcountalarmopen=alarmoff;pclock-timemode=timemode24;amled=ledoff;pmled=ledoff;voidmain(void)unsignedcharnstate=0,akey,temp=0;init();while(1)akey=key();switch(nstate)case0:/时钟正常运行filldispbuf(clock+whichclock);displa
20、if(akey=key1)keywaittime=0;adjusttimeflag=1;nstate=3;if(clockwhichclock.timemode=timemode12)displaytimemode(timemode12);if(clockwhichclock.amorpm=pm)pmled=ledon;amled=ledoff;elsepmled=ledoff;amled=ledon;if(akey=key2)|(akey=key3)keywaittime=0;clockwhichclock.timemode=timemode24;clockwh
21、ichclock.hour+=12;elsedisplaytimemode(timemode24);amled=ledoff;pmled=ledoff;if(akey=key2)|(akey=key3)clockwhichclock.timemode=timemode12;if(clockwhichclock.hour=12)keywaittime=0;clockwhichclock.hour-=12;clockwhichclock.amorpm=pm;elseclockwhichclock.amorpm=am;break;case3:/调整所选时钟的小时key
26、aittime)nstate=0;keywaitflag=0;keywaittime=0;if(akey=key1)keywaittime=0;if(clockwhichclock.alarmopen)nstate=7;elsenstate=0;if(clockwhichclock.alarmopen)displayonoffalarm(alarmon);if(akey=key2)|(akey=key3)keywaittime=0;clockwhichclock.alarmopen=alarmoff;elsedisplayonoffalarm(alarmoff)
28、timemode12)if(clockwhichclock.alarmhour12)clockwhichclock.alarmhour+;elseif(clockwhichclock.alarmamorpm=pm)clockwhichclock.alarmamorpm=am;clockwhichclock.alarmhour=0;elseclockwhichclock.alarmamorpm=pm;clockwhichclock.alarmhour=0;elseif(clockwhichclock.alarmhour0)clockwhichclock.alarmhour-