STC51单片机DS130218b20实现万年历.docx

上传人:scccc 文档编号:13262114 上传时间:2021-12-20 格式:DOCX 页数:40 大小:2.40MB
返回 下载 相关 举报
STC51单片机DS130218b20实现万年历.docx_第1页
第1页 / 共40页
STC51单片机DS130218b20实现万年历.docx_第2页
第2页 / 共40页
STC51单片机DS130218b20实现万年历.docx_第3页
第3页 / 共40页
STC51单片机DS130218b20实现万年历.docx_第4页
第4页 / 共40页
STC51单片机DS130218b20实现万年历.docx_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《STC51单片机DS130218b20实现万年历.docx》由会员分享,可在线阅读,更多相关《STC51单片机DS130218b20实现万年历.docx(40页珍藏版)》请在三一文库上搜索。

1、.STC51电子钟制作 最近做了一件DIY电子钟,自我感觉效果还不错,所以传到网上与大家分享一下,大家如果喜欢可以尝试做一下,也可以用作毕业设计。 这款电子钟可以显示年,月,日,小时,分,秒,星期,还有温度,可以调节时间。1,电路原理图:我的原理不是很清楚,大家可以看我的PCB图,我把每部分都截图了,效果挺好的。2,PCB板图:(1)蜂鸣器部分(2)DS1302部分和复位电路部分(3)18B20部分,和单片机晶振部分(4)调时按键部分(5)1602部分(6)电源部分3,元件清单12M晶振1个9015三极管1个DS13021块30pf电容2个蜂鸣器1个STC89c511块100欧1个10pf电容

2、2个1041个按键5个Lcd16021块5.1k1个10k9个32.768k晶振1个备用锂电池1块18b201个USB插口1个10uf电容1个4.7k1个20k滑动变阻器1个电池盒1个8脚插座1个40脚插座14,源程序清单:#include<reg52.h>#include<stdio.h>#define uint unsigned int#define uchar unsigned char sbit LCD_RS=P24;/1602sbit LCD_RW=P25;sbit LCD_EN=P26;sbit rst=P17; /DS1302sbit io=P16;sbi

3、t sclk=P15;sbit ACC_7=ACC7;sbit K1=P23;/按键sbit K2=P22;sbit K3=P21;sbit K4=P20;sbit BEEP=P10;/蜂鸣器sbit DQ=P31;/温度传感器bit flag=0;bit flag1=0;uchar yes;/uchar code table2=" SONG you "/uchar code table3=" zhan peng "uchar code table4="0123456789"char table57;uchar table62;cha

4、r table72;char leap;/延时函数部分void Delay_ms(uint xms)/延时 uint i,j; for(i=xms;i>0;i-) for(j=110;j>0;j-);void Delayus(uchar t)/延时1用于18b20 while(-t);void Delayms(uchar t)/延时2用于18b20 while(t-) /大致延时1mS Delayus(245); Delayus(245); /18b20部分bit init18b20(void)/初始化18b20 bit dat=0; DQ = 1; Delayus(5); DQ

5、= 0; Delayus(200); Delayus(200); DQ = 1; Delayus(50); dat=DQ; Delayus(25); return dat;uchar read18b20(void)/读18b20函数uchar i=0,dat=0;for (i=8;i>0;i-) DQ = 0; / 给脉冲信号 dat>>=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; Delayus(25); return(dat);void write18b20(uchar dat)/写18b20函数 uchar i=0; for (i=8; i

6、>0; i-) DQ = 0; DQ = dat&0x01; Delayus(25); DQ = 1; dat>>=1; Delayus(25);uint get_18b20(void)/读取温度函数uchar a=0;uint b=0,t=0;init18b20();write18b20(0xCC); / 跳过读序号列号的操作write18b20(0x44); / 启动温度转换Delayms(10);init18b20();write18b20(0xCC); /跳过读序号列号的操作 write18b20(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就

7、是温度a=read18b20(); /低位b=read18b20(); /高位b<<=8;t=a+b;return(t);/蜂鸣器部分void beep() BEEP=0; Delay_ms(100); BEEP=1;/LCD1602部分void write1602(uchar dat)/1602写数据函数 LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;LCD_EN=1;Delay_ms(1);LCD_EN=0;void write1602c(uchar com)/1602写指令函数 LCD_RS=0;LCD_RW=0;LCD_EN=0;P0=com;LCD_

8、EN=1;Delay_ms(1);LCD_EN=0;void init1602()/1602初始化 write1602c(0x38); /16*2显示 write1602c(0x0f); /显示光标 write1602c(0x06); /光标右移 write1602c(0x01);/清屏 write1602c(0x80);/DS1302部分void write1302(uchar addr,dat)/1302写数据函数 uchar i,temp; rst=0; sclk=0; rst=1; for(i=0;i<8;i+) /写地址,写数据 sclk=0;temp=addr;io=(bit

9、)(temp&0x01);addr>>=1;sclk=1; for(i=0;i<8;i+) /写地址,写数据 sclk=0;temp=dat;io=(bit)(temp&0x01);dat>>=1;sclk=1; rst=0;uchar read1302(uchar addr)/1302读数据函数 uchar i,temp,dat1,dat2;rst=0;sclk=0;rst=1;for(i=0;i<8;i+) sclk=0; temp=addr; io=(bit)(temp&0x01); addr>>=1; sclk=1

10、; for(i=0;i<8;i+) ACC_7=io; sclk=1; ACC>>=1; sclk=0; rst=0;dat1=ACC;dat2=dat1%16;dat1=dat1/16;dat1=dat1*10+dat2;return(dat1);void init1302()/1302初始化函数 write1302(0x8e,0x00);write1302(0x80,0x00);/秒初始化 write1302(0x8e,0x80);/*void init1602B() uchar i=0; write1602c(0x80+16); write1602(0xef); whi

11、le(table2i!='0') write1602(table2i); i+; write1602(0xef); write1602c(0x80+0x40+20); i=0; while(table3i!='0') write1602(table3i); i+; for(i=0;i<16;i+) write1602c(0x18); Delay_ms(800) ; Delay_ms(2000); write1602c(0x01); write1602c(0x06);*/显示部分void get_time()/获取时间函数 table55=read1302(

12、0x8d); table54=read1302(0x89); table53=read1302(0x87); table52=read1302(0x85); table51=read1302(0x83); table50=read1302(0x81); table56=read1302(0x8b); void Display_time(uchar year,yue,day,hour,min,sec,xq)/显示函数 write1602c(0x80); write1602('2'); write1602('0'); write1602(table4year/10)

13、; write1602(table4year%10); write1602('-'); write1602(table4yue/10); write1602(table4yue%10); write1602('-'); write1602(table4day/10); write1602(table4day%10); write1602(' '); write1602('w'); write1602('e'); write1602('e'); write1602('k'); writ

14、e1602(table4xq); write1602c(0x80+0x40); write1602(table4hour/10); write1602(table4hour%10); write1602(':'); write1602(table4min/10); write1602(table4min%10); write1602(':'); write1602(table4sec/10); write1602(table4sec%10); write1602(' '); write1602(' '); write1602(&#

15、39;T'); write1602(' '); write1602(table70); write1602(table71); write1602(0xdf); write1602('c');/调时部分void Keyprocess() static uchar num=0; uchar year1,yue1,day1,hour1,min1,xq1; write1302(0x8e,0x00); write1302(0x80,0x80); if(K3=0) Delay_ms(5); if(K3=0) while(!K3); beep(); num+; if

16、(num>6) num=0; if(num) if(K1=0) Delay_ms(5); if(K1=0) while(!K1); beep(); if(num=1) table51+; if(table51=60) table51=0; min1=table51/10*16+table51%10; write1302(0x82,min1); if(num=2) table52+; if(table52=24) table52=0; hour1=table52/10*16+table52%10; write1302(0x84,hour1); if(num=3) table56+; if(

17、table56=8) table56=1; xq1=table56/10*16+table56%10; write1302(0x8a,xq1); if(num=4) if(table55=0) switch(table54) case 1 : table53+;if(table53=32) table53=1;break; case 2 : table53+;if(table53=30) table53=1;break; case 3 : table53+;if(table53=32) table53=1;break; case 4 : table53+;if(table53=31) tabl

18、e53=1;break; case 5 : table53+;if(table53=32) table53=1;break; case 6 : table53+;if(table53=31) table53=1;break; case 7 : table53+;if(table53=32) table53=1;break; case 8 : table53+;if(table53=32) table53=1;break; case 9 : table53+;if(table53=31) table53=1;break; case 10 : table53+;if(table53=32) tab

19、le53=1;break; case 11 : table53+;if(table53=31) table53=1;break; case 12 : table53+;if(table53=32) table53=1;break; else if(leap&&table54=2) table53+; if(table53=30) table53=1; else if(leap=0&&table54=2) table53+; if(table53=29) table53=1; else switch(table54) case 1 : table53+;if(ta

20、ble53=32) table53=1;break; case 3 : table53+;if(table53=32) table53=1;break; case 4 : table53+;if(table53=31) table53=1;break; case 5 : table53+;if(table53=32) table53=1;break; case 6 : table53+;if(table53=31) table53=1;break; case 7 : table53+;if(table53=32) table53=1;break; case 8 : table53+;if(ta

21、ble53=32) table53=1;break; case 9 : table53+;if(table53=31) table53=1;break; case 10 : table53+;if(table53=32) table53=1;break; case 11 : table53+;if(table53=31) table53=1;break; case 12 : table53+;if(table53=32) table53=1;break; day1=table53/10*16+table53%10; write1302(0x86,day1); if(num=5) table54

22、+; if(table54=13) table54=1; yue1=table54/10*16+table54%10; write1302(0x88,yue1); if(num=6) table55+; if(table55=100) table55=0; leap=table55%4=0&&table55%100!=0; year1=table55/10*16+table55%10; write1302(0x8c,year1); if(K2=0) Delay_ms(5); if(K2=0) while(!K2); beep(); if(num=1) table51-; if(

23、table51=-1) table51=59; min1=table51/10*16+table51%10; write1302(0x82,min1); if(num=2) table52-; if(table52=-1) table52=23; hour1=table52/10*16+table52%10; write1302(0x84,hour1); if(num=3) table56-; if(table56=0) table56=7; xq1=table56/10*16+table56%10; write1302(0x8a,xq1); if(num=4) if(table55=0) s

24、witch(table54) case 1 : table53-;if(table53=0) table53=31;break; case 2 : table53-;if(table53=0) table53=29;break; case 3 : table53-;if(table53=0) table53=31;break; case 4 : table53-;if(table53=0) table53=30;break; case 5 : table53-;if(table53=0) table53=31;break; case 6 : table53-;if(table53=0) tab

25、le53=30;break; case 7 : table53-;if(table53=0) table53=31;break; case 8 : table53-;if(table53=0) table53=31;break; case 9 : table53-;if(table53=0) table53=30;break; case 10 : table53-;if(table53=0) table53=31;break; case 11 : table53-;if(table53=0) table53=30;break; case 12 : table53-;if(table53=0)

26、table53=31;break; else if(leap&&table54=2) table53-; if(table53=0) table53=29; else if(leap=0&&table54=2) table53-; if(table53=0) table53=28; else switch(table54) case 1 : table53-; if(table53=0) table53=31;break; case 3 : table53-;if(table53=0) table53=31;break; case 4 : table53-;if

27、(table53=0) table53=30;break; case 5 : table53-;if(table53=0) table53=31;break; case 6 : table53-;if(table53=0) table53=30;break; case 7 : table53-;if(table53=0) table53=31;break; case 8 : table53-;if(table53=0) table53=31;break; case 9 : table53-;if(table53=0) table53=30;break; case 10 : table53-;if(table53=0) table53=31;break; case 11 : table53-;if(table53=0) table53=30;break; case 12 : table53-;if(table53=0) table53=31;break; day1=table53/10*16+table53%10; write1302(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1