当前位置:首页 > 单片机课设报告(万年历的制作) - 图文
洛阳理工学院课程设计报告
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
共分享92篇相关文档