单片机课设报告(万年历的制作) - 图文 联系客服

发布时间 : 星期五 文章单片机课设报告(万年历的制作) - 图文更新完毕开始阅读19275e2bb4daa58da0114a0d

洛阳理工学院课程设计报告

24C02。} }

}

{nz_min++; //调整分加1。

if(nz_min==60) //如果满60后将清0。 nz_min=0;

write_hms(7,nz_min); //每调节一次送液晶显示一下。 write_com(0x80+0x40+7); //显示位置重新回到调节处。 write_add(9,nz_min); //数据改变立即存入if(key4num==3)

{nz_hour++; //调整时加1。 if(nz_hour==24) nz_hour=0;

write_hms(4,nz_hour); //每调节一次送液晶显示一下。 write_com(0x80+0x40+4); //显示位置重新回到调节处。 write_add(10,nz_hour); //数据改变立即存入24C02。} if(key4num==4)

{nz_week++; if(nz_week==8) nz_week=1;

write_week(nz_week); write_com(0x80+15);

write_add(11,nz_week); } if(key4num==5) {nz_day++;

if(nz_day==32) nz_day=1;

write_ymd(8,nz_day); write_com(0x80+9);

write_add(12,nz_day); } if(key4num==6) {nz_month++;

if(nz_month==13) nz_month=1;

write_ymd(5,nz_month); write_com(0x80+5);

write_add(13,nz_month);} if(key4num==7) {nz_year++;

if(nz_year==100) nz_year=0;

write_ymd(2,nz_year); write_com(0x80+2);

write_add(14,nz_year);}

20

洛阳理工学院课程设计报告

if(key3==0) {delayms(5); 24C02。}

24C02。}

if(key3==0)

{while(!key3); //按键释放。

beep(); //每当有按键释放蜂鸣器发出滴声。 if(key4num==1)

{if(nz_sec==0) //调整秒减1。 nz_sec=60; nz_sec--;

write_hms(10,nz_sec); //每调节一次送液晶显示一下。 write_com(0x80+0x40+10); //显示位置重新回到调节处。 write_add(8,nz_sec); //数据改变立即存入 if(key4num==2)

{if(nz_min==0) //调整分减1。 nz_min=60; nz_min--;

write_hms(7,nz_min); //每调节一次送液晶显示一下。 write_com(0x80+0x40+7); //显示位置重新回到调节处。 write_add(9,nz_min); //数据改变立即存入 if(key4num==3)

{if(nz_hour==0) //调节时减1。 nz_hour=24; nz_hour--;

write_hms(4,nz_hour); //每调节一次送液晶显示一下。 write_com(0x80+0x40+4); //显示位置重新回到调节处。 write_add(10,nz_hour); //数据改变立即存入24C02。} if(key4num==4) {nz_week--;

if(nz_week==0) nz_week=7;

write_week(nz_week); write_com(0x80+15); write_add(11,nz_week);} if(key4num==5) {nz_day--;

if(nz_day==0) nz_day=31;

write_ymd(8,nz_day); write_com(0x80+8); write_add(12,nz_day);} if(key4num==6) {nzmonth--;

21

洛阳理工学院课程设计报告

if(nz_month==0) nz_month=12;

write_ymd(5,nz_month); write_com(0x80+5);

write_add(13,nz_month);} if(key4num==7) {nz_year--;

if(nz_year==-1) nz_year=99;

write_ymd(2,nz_year); write_com(0x80+2);

write_add(14,nz_year);} } } } }

//主程序。 void main()

{init(); //首次初始化各数据。 while(1) {uchar i,j; keyscan(); //不停的检测按键是否被按下。

if((sec==nz_sec)&&(min==nz_min)&&(hour==nz_hour)&&(week==nz_week)&&(day==nz_day)&&(month==nz_month)&&(year==nz_year)) soundflag=1; //标志闹钟定时时间到了。 if(soundflag==1)

{for(i=15,j=0;i<29;i++,j++)

{write_add(i,Song_24C02[j]); //向24C02写入音符表。} while(1) //反复读取音符并播放。 { //这里用来取消闹钟报警,按任一键取消报警 。

if((key1==0)||(key2==0)||(key3==0)||(key4==0)) {delayms(10);

if((key1==0)||(key2==0)||(key3==0)||(key4==0)) {while(!(key1&&key2&&key3&&key4)); beep();

soundflag=0; //消除报警的标志。 TR1=0; //关闭定时器1。 break;} }

for(i=15;i<30;i++) {

index=read_add(i); //从24C02中读取音符。 TR1=1; //开始计时并播放音乐。

22

洛阳理工学院课程设计报告

delayms(200);} } } } }

//定时器0中断服务程序。 void time0()interrupt 1 {

TH0=(65536-50000)/256; //再次装定时器初值。 TL0=(65536-50000)%6;

count++; //中断计数。

if(count==20) //如果到了20次(1秒)时。 {

count=0; sec++;

if(sec==60) //秒加到60则进位分钟。 {sec=0; //同时秒数清0。 min++;

if(min==60) //分钟加到60则进位小时。 {min=0; //同时分钟数清0。 hour++;

if(hour==24) //小时加到24则进位日期。

{hour=0;min=0;sec=0; //同时秒,分,时清0。 week++; day++;

if(week==8) week=1;

if(day==32) //日期加到32则进位月份。 {day=1; //同时日期数回1。 month++;

if(month==13) //月份加到13则进位年份。 {month=1; //同时月份回1。 year++;

if(year==100) //年份加到100则年,月,日清0。 {year=0;month=0;day=0;}

write_ymd(2,year); //年份若改变则重新写入。 write_add(7,year); //数据改变立即存入24C02。} write_ymd(5,month); //月份若变化则重新写入。 write_add(6,month); //数据改变立即存入24C02。} write_ymd(8,day); //日期若改变则重新写入。 write_add(5,day); //数据改变立即存入24C02。 write_week(week); //星期若变化则重新写入。 write_add(4,week); //数据改变立即存入24C02。} write_hms(4,hour); //小时若变化则重新写入。

23