还剩38页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
STC51电子钟制作最近做了一件DIY电子钟,自我感觉效果还不错,所以传到网上与大家__一下,大家如果喜欢可以尝试做一下,也可以用作毕业设计这款电子钟可以显示年,月,日,小时,分,秒,星期,还有温度,可以调节时间1,电路原理图我的原理不是很清楚,大家可以看我的PCB图,我把每部分都截图了,效果挺好的2,PCB板图
(1)蜂鸣器部分
(2)DS1302部分和复位电路部分
(3)18B20部分,和单片机晶振部分
(4)调时按键部分
(5)1602部分
(6)电源部分3,元件清单12M晶振1个9015三极管1个DS13021块30pf电容2个蜂鸣器1个STC__c511块100欧1个10pf电容2个1041个按键5个Lcd16021块
5.1k1个10k9个
32.768k晶振1个备用锂电池1块18b201个U__插口1个10uf电容1个
4.7k1个20k滑动变阻器1个电池盒1个8脚插座1个40脚插座14,源程序清单#includereg
52.h#includestdio.h#defineuintunsignedint#defineucharunsignedchar__itLCD_RS=P2^4;//1602__itLCD_RW=P2^5;__itLCD_EN=P2^6;__itrst=P1^7;//DS1302__itio=P1^6;__itsclk=P1^5;__itACC_7=ACC^7;__itK1=P2^3;//按键__itK2=P2^2;__itK3=P2^1;__itK4=P2^0;__itBEEP=P1^0;//蜂鸣器__itDQ=P3^1;//温度传感器bitflag=0;bitflag1=0;ucharyes;//ucharcodetable2[]=SONGyou;//ucharcodetable3[]=zhanpeng;ucharcodetable4[]=01234567__;chartable5
[7];uchartable6
[2];chartable7
[2];charleap;//延时函数部分voidDelay_msuintxms//延时{uintij;fori=xms;i0;i--forj=110;j0;j--;}voidDelayusuchart//延时1用于18b20{while--t;}voidDelaymsuchart//延时2用于18b20{whilet--{//大致延时1mSDelayus245;Delayus245;}}//18b20部分bitinit18b20void//初始化18b20{bitdat=0;DQ=1;Delayus5;DQ=0;Delayus200;Delayus200;DQ=1;Delayus50;dat=DQ;Delayus25;returndat;}ucharread18b20void//读18b20函数{uchari=0dat=0;fori=8;i0;i--{DQ=0;//给脉冲__dat=1;DQ=1;//给脉冲__ifDQdat|=0x80;Delayus25;}returndat;}voidwrite18b20uchardat//写18b20函数{uchari=0;fori=8;i0;i--{DQ=0;DQ=dat0x01;Delayus25;DQ=1;dat=1;}Delayus25;}uintget_18b20void//读取温度函数{uchara=0;uintb=0t=0;init18b20;write18b200xCC;//跳过读序号列号的操作write18b200x44;//启动温度转换Delayms10;init18b20;write18b200xCC;//跳过读序号列号的操作write18b200xBE;//读取温度寄存器等(共可读9个寄存器)前两个就是温度a=read18b20;//低位b=read18b20;//高位b=8;t=a+b;returnt;}//蜂鸣器部分voidbeep{BEEP=0;Delay_ms100;BEEP=1;}//LCD1602部分voidwrite1602uchardat//1602写数据函数{LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;LCD_EN=1;Delay_ms1;LCD_EN=0;}voidwrite1602cucharcom//1602写指令函数{LCD_RS=0;LCD_RW=0;LCD_EN=0;P0=com;LCD_EN=1;Delay_ms1;LCD_EN=0;}voidinit1602//1602初始化{write1602c0x38;//16*2显示write1602c0x0f;//显示光标write1602c0x06;//光标右移write1602c0x01;//清屏write1602c0x80;}//DS1302部分voidwrite1302ucharaddrdat//1302写数据函数{ucharitemp;rst=0;sclk=0;rst=1;fori=0;i8;i++//写地址,写数据{sclk=0;temp=addr;io=bittemp0x01;addr=1;sclk=1;}fori=0;i8;i++//写地址,写数据{sclk=0;temp=dat;io=bittemp0x01;dat=1;sclk=1;}rst=0;}ucharread1302ucharaddr//1302读数据函数{ucharitempdat1dat2;rst=0;sclk=0;rst=1;fori=0;i8;i++{sclk=0;temp=addr;io=bittemp0x01;addr=1;sclk=1;}fori=0;i8;i++{ACC_7=io;sclk=1;ACC=1;sclk=0;}rst=0;dat1=ACC;dat2=dat1%16;dat1=dat1/16;dat1=dat1*10+dat2;returndat1;}voidinit1302//1302初始化函数{write13020x8e0x00;write13020x800x00;//秒初始化write13020x8e0x80;}/*voidinit1602B{uchari=0;write1602c0x80+16;write16020xef;whiletable2[i]!=\0{write1602table2[i];i++;}write16020xef;write1602c0x80+0x40+20;i=0;whiletable3[i]!=\0{write1602table3[i];i++;}fori=0;i16;i++{write1602c0x18;Delay_ms800;}Delay_ms2000;write1602c0x01;write1602c0x06;}*///显示部分voidget_time//获取时间函数{table5
[5]=read13020x8d;table5
[4]=read13020x__;table5
[3]=read13020x87;table5
[2]=read13020x85;table5
[1]=read13020x83;table5
[0]=read13020x81;table5
[6]=read13020x8b;}voidDisplay_timeucharyearyuedayhourminsecxq//显示函数{write1602c0x80;write16022;write16020;write1602table4[year/10];write1602table4[year%10];write1602-;write1602table4[yue/10];write1602table4[yue%10];write1602-;write1602table4[day/10];write1602table4[day%10];write1602;write1602w;write1602e;write1602e;write1602k;write1602table4[xq];write1602c0x80+0x40;write1602table4[hour/10];write1602table4[hour%10];write1602:;write1602table4[min/10];write1602table4[min%10];write1602:;write1602table4[sec/10];write1602table4[sec%10];write1602;write1602;write1602T;write1602;write1602table7
[0];write1602table7
[1];write16020xdf;write1602c;}//调时部分voidKeypro__ss{staticucharnum=0;ucharyear1yue1day1hour1min1xq1;write13020x8e0x00;write13020x800x80;ifK3==0{Delay_ms5;ifK3==0{while!K3;beep;num++;}}ifnum6{num=0;}ifnum{ifK1==0{Delay_ms5;ifK1==0{while!K1;beep;ifnum==1{table5
[1]++;iftable5
[1]==60table5
[1]=0;min1=table5
[1]/10*16+table5
[1]%10;write13020x82min1;}ifnum==2{table5
[2]++;iftable5
[2]==24table5
[2]=0;hour1=table5
[2]/10*16+table5
[2]%10;write13020x84hour1;}ifnum==3{table5
[6]++;iftable5
[6]==8table5
[6]=1;xq1=table5
[6]/10*16+table5
[6]%10;write13020x8axq1;}ifnum==4{iftable5
[5]==0{switchtable5
[4]{case1:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case2:table5
[3]++;iftable5
[3]==30table5
[3]=1;break;case3:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case4:table5
[3]++;iftable5
[3]==31table5
[3]=1;break;case5:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case6:table5
[3]++;iftable5
[3]==31table5
[3]=1;break;case7:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case8:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case9:table5
[3]++;iftable5
[3]==31table5
[3]=1;break;case10:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case11:table5
[3]++;iftable5
[3]==31table5
[3]=1;break;case12:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;}}elseifleaptable5
[4]==2{table5
[3]++;iftable5
[3]==30table5
[3]=1;}elseifleap==0table5
[4]==2{table5
[3]++;iftable5
[3]==29table5
[3]=1;}elseswitchtable5
[4]{case1:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case3:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case4:table5
[3]++;iftable5
[3]==31table5
[3]=1;break;case5:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case6:table5
[3]++;iftable5
[3]==31table5
[3]=1;break;case7:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case8:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case9:table5
[3]++;iftable5
[3]==31table5
[3]=1;break;case10:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;case11:table5
[3]++;iftable5
[3]==31table5
[3]=1;break;case12:table5
[3]++;iftable5
[3]==32table5
[3]=1;break;}day1=table5
[3]/10*16+table5
[3]%10;write13020x86day1;}ifnum==5{table5
[4]++;iftable5
[4]==13table5
[4]=1;yue1=table5
[4]/10*16+table5
[4]%10;write13020x88yue1;}ifnum==6{table5
[5]++;iftable5
[5]==100table5
[5]=0;leap=table5
[5]%4==0table5
[5]%100!=0;year1=table5
[5]/10*16+table5
[5]%10;write13020x8cyear1;}}}ifK2==0{Delay_ms5;ifK2==0{while!K2;beep;ifnum==1{table5
[1]--;iftable5
[1]==-1table5
[1]=59;min1=table5
[1]/10*16+table5
[1]%10;write13020x82min1;}ifnum==2{table5
[2]--;iftable5
[2]==-1table5
[2]=23;hour1=table5
[2]/10*16+table5
[2]%10;write13020x84hour1;}ifnum==3{table5
[6]--;iftable5
[6]==0table5
[6]=7;xq1=table5
[6]/10*16+table5
[6]%10;write13020x8axq1;}ifnum==4{iftable5
[5]==0{switchtable5
[4]{case1:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case2:table5
[3]--;iftable5
[3]==0table5
[3]=29;break;case3:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case4:table5
[3]--;iftable5
[3]==0table5
[3]=30;break;case5:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case6:table5
[3]--;iftable5
[3]==0table5
[3]=30;break;case7:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case8:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case9:table5
[3]--;iftable5
[3]==0table5
[3]=30;break;case10:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case11:table5
[3]--;iftable5
[3]==0table5
[3]=30;break;case12:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;}}elseifleaptable5
[4]==2{table5
[3]--;iftable5
[3]==0table5
[3]=29;}elseifleap==0table5
[4]==2{table5
[3]--;iftable5
[3]==0table5
[3]=28;}elseswitchtable5
[4]{case1:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case3:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case4:table5
[3]--;iftable5
[3]==0table5
[3]=30;break;case5:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case6:table5
[3]--;iftable5
[3]==0table5
[3]=30;break;case7:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case8:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case9:table5
[3]--;iftable5
[3]==0table5
[3]=30;break;case10:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;case11:table5
[3]--;iftable5
[3]==0table5
[3]=30;break;case12:table5
[3]--;iftable5
[3]==0table5
[3]=31;break;}day1=table5
[3]/10*16+table5
[3]%10;write13020x86day1;}ifnum==5{table5
[4]--;iftable5
[4]==0table5
[4]=12;yue1=table5
[4]/10*16+table5
[4]%10;write13020x88yue1;}ifnum==6{table5
[5]--;iftable5
[5]==-1table5
[5]=79;leap=table5
[5]%4==0table5
[5]%100!=0;year1=table5
[5]/10*16+table5
[5]%10;write13020x8cyear1;}}}}ifK4==0{Delay_ms5;ifK4==0;{while!K4;beep;write13020x800x00;write13020x8e0x80;flag=0;}}}voidinit_timer0void//定时器初始化{TMOD|=0x01;TH0=65536-2000/256;TL0=65536-2000%256;EA=1;ET0=1;TR0=1;}void__in{floattemp;init1602;//init1602B;init1302;init_timer0;while1{ifK3==0{Delay_ms10;ifK3==0{while!K3;beep;flag=1;}}get_time;Display_timetable5
[5]table5
[4]table5
[3]table5
[2]table5
[1]table5
[0]table5
[6];ifflagKeypro__ss;ifflag1==1{flag1=0;temp=get_18b20;temp=temp*
0.0625;sprintftable7%
2.0ftemp;}}}voidtimer0interrupt1//定时器函数{staticuintnum2=0;TH0=65536-2000/256;TL0=65536-2000%256;num2++;ifnum2==300{num2=0;flag1=1;}}5,作品效果图。