还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
51单片机实现万年历利用AT__S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减原理图HYPERLINKhttp://b
17.photo.store.qq.com/http_imgload.cgi/rurl4_b=5f55ae3a4eaef2aac5c3c184ac7c6c8bbdd8f93629e8229a7d36c4a0ecce45cb6d9b01c5d5209cd2a81693d206ea7b3cbdff832591becafe283a8230446941ea415ebc996e642f75cb11cfe8a79f9f2a00ee35e9\t_blankINCLUDEPICTUREhttp://b
17.photo.store.qq.com/http_imgload.cgi/rurl4_b=5f55ae3a4eaef2aac5c3c184ac7c6c8bbdd8f93629e8229a7d36c4a0ecce45cb6d9b01c5d5209cd2a81693d206ea7b3cbdff832591becafe283a8230446941ea415ebc996e642f75cb11cfe8a79f9f2a00ee35e9\*MERGEFORMATpcb图HYPERLINKhttp://b
19.photo.store.qq.com/http_imgload.cgi/rurl4_b=5f55ae3a4eaef2aac5c3c184ac7c6c8bf56e2fef118df0ea8011fe2710c15f2114cd84eb33131ba293fdac462ec80b43e43443da44f06d46faf89dcd61cec2a38b5f72b227251167c5ff8f9ec04084f179237cf5\t_blankINCLUDEPICTUREhttp://b
19.photo.store.qq.com/http_imgload.cgi/rurl4_b=5f55ae3a4eaef2aac5c3c184ac7c6c8bf56e2fef118df0ea8011fe2710c15f2114cd84eb33131ba293fdac462ec80b43e43443da44f06d46faf89dcd61cec2a38b5f72b227251167c5ff8f9ec04084f179237cf5\*MERGEFORMAT源程序#includereg
52.h#defineuintunsignedint#defineucharunsignedchar__itbeep=P2^0;//蜂鸣器控制口__ittimeadd=P2^1;//调节时间加__ittimesub=P2^2;//调节时间减__ittimeclk=P2^3;//闹钟设定键__ittimefun=P2^4;//时间设定键__itlcdrs=P2^5;//液晶的命令和数据控制口__itledrw=P2^6;//液晶的写数据口__itlcden=P2^7;//液晶显示模块的使能端__ittimeds=P3^3;//时钟芯片地址闸__ittimerw=P3^4;//时钟芯片读写__ittimeas=P3^5;//时钟芯片地址闸__ittimeen=P3^6;//时钟芯片片选ucharcodetable[]=20 - - week;ucharcodetable1[]= : : ;//要显示的字符串charnumshifenmiaonian=2000yueriweeknumfunanumfunflagflag1;ucharleap;voiddelayuintx{ ucharij; fori=x;i0;i-- forj=110;j0;j--;}voiddidi{ beep=0; delay1000; beep=1; delay1000;}voidwrite_comucharcom{ lcdrs=0; P0=com; delay5; lcden=1; delay20; lcden=0;}voidwrite_dateuchardate{ lcdrs=1; P0=date; delay5; lcden=1; delay20; lcden=0;}voidwrite_sfmucharadduchardate{ ucharshige; shi=date/10; ge=date%10; write_com0x80+0x40+add; write_date0x30+shi; write_date0x30+ge;}voidwrite_nyrucharadduchardate{ ucharshige; shi=date/10; ge=date%10; write_com0x80+add; write_date0x30+shi; write_date0x30+ge;}voidwrite_zhouucharadduchardate{ write_com0x80+add; write_date0x30+date;}voidwrite_dsucharadduchardate{ timeen=0; timeas=1; timeds=1; timerw=1; P1=add; timeas=0; timerw=0; P1=date; timerw=1; timeas=1; timeen=1; }ucharread_dsucharadd{ uchards_date; timeas=1; timeds=1; timerw=1; timeen=0; P1=add; timeas=0; timeds=0; P1=0xff; ds_date=P1; timeds=1; timeas=1; timeen=1; returnds_date;}voidkeyscan{ ifflag1==1//用来关闭闹钟__ { iftimeadd==0 { delay5; iftimeadd==0 { while!timeadd==0; flag1=0; } } iftimesub==0 { delay5; iftimesub==0 { while!timesub==0; flag1=0; } } } iftimefun==0 { delay5; iftimefun==0 { while!timefun; flag=1; numfun++; ifnumfun==1 { write_com0x80+0x40+0x0a; write_com0x0f; } ifnumfun==2 { write_com0x80+0x40+0x07; write_com0x0f; } ifnumfun==3 { write_com0x80+0x40+0x04; write_com0x0f; } ifnumfun==4 { write_com0x80+0x0f; write_com0x0f; } ifnumfun==5 { write_com0x80+0x09; write_com0x0f; } ifnumfun==6 { write_com0x80+0x06; write_com0x0f; } ifnumfun==7 { write_com0x80+0x03; write_com0x0f; } ifnumfun==8 { numfun=0; flag=0; } } } ifnumfun!=0 { iftimeadd==0 { delay5; while!timeadd; ifnumfun==1 { miao++; ifmiao==60 miao=0; write_sfm9miao; write_com0x80+0x40+9; write_ds0miao; } ifnumfun==2 { fen++; iffen==60 fen=0; write_sfm6fen; write_com0x80+0x40+6; write_ds2fen; } ifnumfun==3 { shi++; ifshi==24 shi=0; write_sfm3shi; write_com0x80+0x40+3; write_ds4shi; } ifnumfun==4 { week++; ifweek==8 week=1; write_zhou0x0fweek; write_com0x80+0x0f; write_ds6week; } ifnumfun==5 { ifnian==0 { switchyue{ case1:ri++;ifri==32ri=1;break; case2:ri++;ifri==30ri=1;break; case3:ri++;ifri==32ri=1;break; case4:ri++;ifri==31ri=1;break; case5:ri++;ifri==32ri=1;break; case6:ri++;ifri==31ri=1;break; case7:ri++;ifri==32ri=1;break; case8:ri++;ifri==32ri=1;break; case9:ri++;ifri==31ri=1;break; case10:ri++;ifri==32ri=1;break; case11:ri++;ifri==31ri=1;break; case12:ri++;ifri==32ri=1;break; } } elseifleapyue==2 { ri++; ifri==30 ri=1; } elseifyue==2leap==0 { ri++; ifri==29 ri=1; } else switchyue{ case1:ri++;ifri==32ri=1;break; case3:ri++;ifri==32ri=1;break; case4:ri++;ifri==31ri=1;break; case5:ri++;ifri==32ri=1;break; case6:ri++;ifri==31ri=1;break; case7:ri++;ifri==32ri=1;break; case8:ri++;ifri==32ri=1;break; case9:ri++;ifri==31ri=1;break; case10:ri++;ifri==32ri=1;break; case11:ri++;ifri==31ri=1;break; case12:ri++;ifri==32ri=1;break; } write_nyr8ri; write_com0x80+0x08; write_ds7ri; } ifnumfun==6 { yue++; ifyue==13 yue=0; write_nyr5yue; write_com0x80+0x05; write_ds8yue; } ifnumfun==7 { nian++; ifnian==100 nian=0; leap=nian%4==0nian%100!=0; write_nyr2nian; write_com0x80+2; write_ds9nian; } } iftimesub==0 { delay5; while!timesub; ifnumfun==1 { miao--; ifmiao==-1 miao=59; write_sfm9miao; write_com0x80+0x40+9; write_ds0miao; } ifnumfun==2 { fen--; iffen==-1 fen=59; write_sfm6fen; write_com0x80+0x40+6; write_ds2fen; } ifnumfun==3 { shi--; ifshi==-1 shi=23; write_sfm3shi; write_com0x80+0x40+3; write_ds4shi; } ifnumfun==4 { week--; ifweek==0 week=7; write_zhou0x0fweek; write_com0x80+0x0f; write_ds6week; } ifnumfun==5 { ifnian==0 { switchyue{ case1:ri--;ifri==0ri=31;break; case2:ri--;ifri==0ri=29;break; case3:ri--;ifri==0ri=31;break; case4:ri--;ifri==0ri=30;break; case5:ri--;ifri==0ri=31;break; case6:ri--;ifri==0ri=30;break; case7:ri--;ifri==0ri=31;break; case8:ri--;ifri==0ri=31;break; case9:ri--;ifri==0ri=30;break; case10:ri--;ifri==0ri=31;break; case11:ri--;ifri==0ri=30;break; case12:ri--;ifri==0ri=31;break; } } elseifleapyue==2 { ri--; ifri==0 ri=29; } elseifyue==2leap==0 { ri--; ifri==0 ri=28; } else switchyue{ case1:ri--;ifri==0ri=31;break; case3:ri--;ifri==0ri=31;break; case4:ri--;ifri==0ri=30;break; case5:ri--;ifri==0ri=31;break; case6:ri--;ifri==0ri=30;break; case7:ri--;ifri==0ri=31;break; case8:ri--;ifri==0ri=31;break; case9:ri--;ifri==0ri=30;break; case10:ri--;ifri==0ri=31;break; case11:ri--;ifri==0ri=30;break; case12:ri--;ifri==0ri=31;break; } write_nyr8ri; write_com0x80+0x08; write_ds7ri; } ifnumfun==6 { yue--; ifyue==-1 yue=12; write_nyr5yue; write_com0x80+0x05; write_ds8yue; } ifnumfun==7 { nian--; ifnian==-1 nian=99; leap=nian%4==0nian%100!=0; write_nyr2nian; write_com0x80+2; write_ds9nian; } } }}voidset_alarm{ucharashiafenamiao;iftimeclk==0//判断是否按下闹钟设定键 { delay5;//延时消抖 iftimeclk==0 { while!timeclk; anumfun++;//按键次数加1 ifanumfun==1 { flag=1; write_com0x80+0x40+0x0a; write_com0x0f; } ifanumfun==2 { flag=1; write_com0x80+0x40+0x07; write_com0x0f; } ifanumfun==3 { flag=1; write_com0x80+0x40+0x04; write_com0x0f; } ifanumfun==4 { flag=0; anumfun=0; } } }ifanumfun!=0 { iftimeadd==0//如果加功能键按下 { delay5; while!timeadd; ifanumfun==1//设定秒 { amiao++; ifamiao==60 amiao=0; write_sfm9amiao; write_com0x80+0x40+9; write_ds1amiao; } ifanumfun==2 { afen++; ifafen==60 afen=0; write_sfm6afen; write_com0x80+0x40+6; write_ds3afen; } ifanumfun==3 { ashi++; ifashi==24 ashi=0; write_sfm3ashi; write_com0x80+0x40+3; write_ds5ashi; } } }ifanumfun!=0 { iftimesub==0 { delay5; while!timesub; ifanumfun==1 { amiao--; ifamiao==-1 amiao=59; write_sfm9amiao; write_com0x80+0x40+9; write_ds1amiao; } ifanumfun==2 { afen--; ifafen==-1 afen=59; write_sfm6afen; write_com0x80+0x40+6; write_ds3afen; } ifanumfun==3 { ashi--; ifashi==-1 ashi=23; write_sfm3ashi; write_com0x80+0x40+3; write_ds5ashi; } } }}voidinit{ EA=1;//开总中断 EX0=1;//开外部中断0 IT0=1;//设定触发方式为负跳变沿有效 lcden=0;//选通液晶显示屏 ledrw=0;//设定液晶显示屏的读写方式为读 write_com0x38;//设置液晶显示模式为16*2显示,5*7点阵,8位数据接口 write_com0x0c;//打开显示,并使光标不显示也不闪烁 write_com0x06;//光标指针每次自动加1 write_com1;//清屏 write_com0x80;//送地址指针 fornum=0;num16;num++ { write_datetable[num]; delay5; } write_com0x80+0x40;//写到第二行 fornum=0;num11;num++ { write_datetable1[num]; delay5; } write_ds0x0a0x20;//开启时钟芯片振荡器 write_ds0x0b0x26;//开启闹钟 read_ds0x0c;//读取时钟芯片c寄存器}void__in{ init; while1 { keyscan; set_alarm; ifflag1==1 didi; ifflag==0 { //读取时间 miao=read_ds0x00; fen=read_ds0x02; shi=read_ds0x04; yue=read_ds0x08; ri=read_ds0x07; nian=read_ds0x09; week=read_ds0x06; //写入液晶显示屏 write_sfm9miao; write_sfm6fen; write_sfm3shi; write_nyr2nian; write_nyr5yue; write_nyr8ri; write_zhou0x0fweek; } }}voidexterinterrupt0{ flag1=1; read_ds0x0c;//读时钟芯片c寄存器清除irp}最终实验板HYPERLINKhttp://b
16.photo.store.qq.com/http_imgload.cgi/rurl4_b=5f55ae3a4eaef2aac5c3c184ac7c6c8b42715f3746df4adf688469e23b6fb67a154ff7e3701969a0c6e7149847bccdea16d32d5ce3e7d7ceea3aa094d96ca05310e7b0cd1c5fcf4372f533751c9b49151cc27677\t_blankINCLUDEPICTUREhttp://b
16.photo.store.qq.com/http_imgload.cgi/rurl4_b=5f55ae3a4eaef2aac5c3c184ac7c6c8b42715f3746df4adf688469e23b6fb67a154ff7e3701969a0c6e7149847bccdea16d32d5ce3e7d7ceea3aa094d96ca05310e7b0cd1c5fcf4372f533751c9b49151cc27677\*MERGEFORMATHYPERLINKhttp://b
16.photo.store.qq.com/http_imgload.cgi/rurl4_b=5f55ae3a4eaef2aac5c3c184ac7c6c8ba0ae7c4d203f00d0c5b324559e29a3e443c5a3e6d53281d9998ea7480631185e9b77739b281e7973ce97b4711db22940c3105199c4990cef067b30a182ab48020a7cfe9a\t_blankINCLUDEPICTUREhttp://b
16.photo.store.qq.com/http_imgload.cgi/rurl4_b=5f55ae3a4eaef2aac5c3c184ac7c6c8ba0ae7c4d203f00d0c5b324559e29a3e443c5a3e6d53281d9998ea7480631185e9b77739b281e7973ce97b4711db22940c3105199c4990cef067b30a182ab48020a7cfe9a\*MERGEFORMAT。