《STC51电子钟制作.pdf》由会员分享,可在线阅读,更多相关《STC51电子钟制作.pdf(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、STC51电子钟制作最近做了一件D I Y 电子钟,自我感觉效果还不错,所以传到网上与大家分享一下,大家如果喜欢可以尝试做一下,也可以用作毕业设计。这款电子钟可以显示年,月,日,小时,分,秒,星期,还有温度,可以调节时间。1,电路原理图:我的原理不是很清楚,大家可以看我的P C B 图,我把每部分都截图了,效果挺好的。2,P C B 板图:aocsiIXkLCS602II-iltti_TJI9 LOkKlO k10kilO k-1 0 kilO kKlO k(1)蜂鸣器部分80c51(2)DS1302部分和复位电路部分DS130210k00110pF69(3)18B20部分,和单片机晶振部分7
2、kDS18B20(4)调时按键部分(5)1602 部分3,元件清单12M 晶振1 个9015 三极管1个DS13021 块30pf 电容2 个蜂鸣器1 个STC89c511 块100欧1 个10pf 电容2 个1041 个按键5 个Lcdl6021 块5.1k1 个10k9 个32.768k晶振1 个备用锂电池1 块18b201 个U S B 插口1个10uf电容1 个4.7k1 个20k 滑动 变 阻器1个电池盒1 个8 脚插座1 个4 0 脚插座14,源程序清单:#include#include#define uint unsigned int#define uchar unsigned
3、charsbit LCD_RS=P2A4;/1602sbit LCD_RW=P2A5;sbit LCD_EN=P2A6;sbit rst=PlA7;/DS1302sbit io=PlA6;sbit sdk=PlA5;sbitACC_7=ACCA7;sbit K1=P2A3;按键sbit K2=P2A2;sbit K3=P2A1;sbit K4=P2A0;sbit BEEP=PO;/蜂鸣器sbit DQ=P3;温度传感器bit flag=O;bit flagl=O;uchar yes;/uchar code tabIe2=SONG you/uchar code table3=zhan pengu
4、char code table4=,0123456789n;char table57;uchar table62;char table72;char leap;延时函数部分void Delay_ms(uint xms)延时|uint ij;for(i=xms;i0;i-)for(j=110;j0;j-);)void Delayus(uchar t)/延时 1 用于 18b20while(-t);)void Delayms(uchar t)延时 2 用于 18b20while(t)(大致延时ImSDelayus(245);Delayus(245);)/18b20 部分bit initl 8b20
5、(void)初始化 18b20(bit dat=0;DQ=1;Delayus(5);DQ=0;Delayus(200);Delay us(200);DQ=1;Delay us(50);dat=DQ;Delayus(25);return dat;)uchar readl8b20(void)/读 18b20 函数(uchar i=O,dat=O;for(i=8;i0;i-)(DQ=0;/给脉冲信号d at=l;DQ=1;/给脉冲信号if(DQ)dat|=0 x80;Delayus(25);)return(dat);)void writel8b20(uchar dat)写 18b20 函数uchar
6、 i=0;for(i=8;i0;i-)(DQ=0;DQ=dat&OxOl;Delay us(25);DQ=1;dat=l;)Delayus(25);)uint get_l8b20(void)/读取温度函数(uchar a=0;uint b=O,t=O;initl8b20();writel8b20(0 xCC);/跳过读序号列号的操作writel8b20(0 x44);/启动温度转换Delayms(lO);initl8b20();writel8b20(0 xCC);跳过读序号列号的操作writel8b20(0 xBE);读取温度寄存器等(共可读9 个寄存器)前两个就是温度a=readl8b20(
7、);低位b=readl8b20();/高位b=8;t=a+b;return(t);)蜂鸣器部分void beep()BEEP=0;DeIay_ms(100);BEEP=1;)/LCD1602 部分void writel602(uchar dat)/1602 写数据函数LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;LCD_EN=1;Delay_ms(l);LCD_EN=0;)void writel602c(uchar com)/1602 写指令函数(LCD_RS=0;LCD_RW=0;LCD_EN=0;P0=com;LCD_EN=1;Delay_ms(l);LCD_EN=0
8、;)void initl602()/1602 初始化writel602c(0 x38);/16*2 显示writel602c(0 x0f);显示光标writel602c(0 x06);光标右移writel602c(0 x01);清屏writel602c(0 x80);)/DS1302 部分void writel302(uchar addr,dat)/1302 写数据函数(uchar i,temp;rst=0;sclk=0;rst=l;for(i=0;i8;i+)写地址,写数据sc!k=0;temp=addr;io=(bit)(temp&0 x01);addr=l;sclk=l;)for(i=0
9、;i8;i+)写地址,写数据(sc!k=O;temp=dat;io=(bit)(temp&0 x01);dat=l;sclk=l;)rst=O;)uchar readl302(uchar addr)/1302 读数据函数(uchar i,temp,datl,dat2;rst=O;sclk=O;rst=l;for(i=0;i8;i+)sclk=O;temp=addr;io=(bit)(temp&0 x01);addr=l;sclk=l;)for(i=0;i8;i+)(ACC_7=io;sclk=l;ACC=1;sclk=O;rst=O;datl=ACC;dat2=datl%16;datl=dat
10、l/16;datl=datl*10+dat2;return(datl);)void initl302()/1302 初始化函数writel302(0 x8e,0 x00);writel302(0 x80,0 x00);秒初始化writel302(0 x8e,0 x80);)/*void initl602B()(uchar i=0;writel602c(0 x80+16);writel602(0 xef);while(table2i!=,0,)(writel602(table2i);i+;)writel602(0 xef);writel602c(0 x80+0 x40+20);i=0;whi!e
11、(table3i!=0)writel602(tabIe3i);i+;)for(i=0;i6)(num=0;)if(num)if(Kl=O)Delay_ms(5);if(Kl=O)(whi!e(!Kl);beep();if(num=l)|table5l+;if(tab!e5l=60)tabie5l=0;minl=tabIe5l/10*16+tabIe5l%10;writel302(0 x82,minl);)if(num=2)|table52+;if(table52=24)tabie52=0;hourl=table52/10*16+table52%10;writel302(0 x84,hourl)
12、;)if(num=3)table56+;if(table56=8)table56=l;xql=tab1e56/10*16+tabIe56%10;writel302(0 x8a,xql);)if(num=4)if(table55=0)(switch(table54)(case 1table53+;if(table53=32)table53=l;break;case 2tabIe53+;if(tab!e53=30)table53=l;break;case 3table53+;if(table53=32)table53=l;break;table53+;if(table53=31)table53=l
13、;break;case4:table53+;if(table53=32)table53=l;break;case5:table53+;if(table53=31)table53=l;break;case6:case 8:table53+;if(table53=32)table53=l;break;case7:table53+;if(table53=32)table53=l;break;case9:table53+;if(table53=31)table53=l;break;case10:table53+;if(table53=32)table53=l;break;case11:table53+
14、;if(table53=31)table53=l;break;case12:table53+;if(table53=32)table53=l;break;)else if(leap&table54=2)table53+;if(table53=30)table53=l;)else if(leap=0&table54=2)(table53+;if(table53=29)table53=l;)elseswitch(table54)|case 1table53+;if(table53=32)table53=l;break;case 3table53+;if(table53=32)table53=l;b
15、reak;case 4table53+;if(table53=31)table53=l;break;case 5table53+;if(table53=32)table53=l;break;case 6table53+;if(table53=31)table53=l;break;case 7:table53+;if(table53=32)table53=l;break;case 8:table53+;if(table53=32)table53=l;break;case 9:table53+;if(table53=31)table53=l;break;case 10:table53+;if(ta
16、ble53=32)table53=l;break;case 11:table53+;if(table53=31)table53=l;break;case 12:table53+;if(table53=32)table53=l;break;)dayl=table53/10*16+table53%10;write1302(0 x86,dayl);if(num=5)(table54+;if(table54=13)table54=l;yuel=table54/10*16+table54%10;write1302(0 x88,yuel);if(num=6)table55+;if(tab!e55=100)
17、table55=0;Ieap=table55%4=0&tabIe55%100!=0;yearl=table55/10*16+tab!e55%10;writel302(0 x8c,yearl);if(K2=0)Delay_ms(5);if(K2=0)whiie(!K2);beep();if(num=l)table5l;if(table5l=-l)table5l=59;minl=tabIe5l/10*16+table5l%10;writel302(0 x82,minl);)if(num=2)(table52;if(table52=-l)table52=23;hourl=table52/10*16+
18、table52%10;writel302(0 x84,hourl);)if(num=3)(table56;if(table56=0)table56=7;xql=table56/10*16+table56%10;writel302(0 x8a,xql);)if(num=4)if(table55=0)switch(table54)case 1:table53;if(tab!e53=0)table53=31;break;case 2:table53;if(tab!e53=0)table53=29;break;case 3:table53;if(table53=0)table5 3=31;break;
19、case 4:table53;if(table53=0)table53=30;break;case 5:table53;if(tab!e53=0)table53=31;break;case 6:table53;if(tab!e53=0)table53=30;break;case 7:table53;if(table53=0)tables 3=31;break;case 8:table53;if(table53=0)table53=31;break;case 9:table53;if(table5 3=0)table53=30;break;table53=31;break;table5 3=30
20、;break;table5 3=31;break;case 10:table53-;if(table53=0)case 11:table53;if(tab!e53=0)case 12:table53;if(table53=0)else if(leap&table54=2)(table53-;if(table53=0)table53=29;)else if(leap=0&table54=2)|table53;if(table53=0)table53=28;elseswitch(table54)case 1:table53;if(table53=0)table5 3=31;break;case 3
21、:table53;if(tabIe53=0)table5 3=31;break;case 4:table53;if(table53=0)table53=30;break;case 5:table53;if(table53=0)table5 3=31;break;case 6:table53;if(tab!e53=0)table53=30;break;case 7:table53;if(tabIe53=0)table5 3=31;break;case 8:tabIe53-;if(tabIe53=0)table53=31;break;table53=31;break;table53=30;brea
22、k;case 9:table53;if(table53=0)case 10:table53-;if(tabIe53=0)case 11:table53;if(tabie53=0)table5 3=30;break;case 12:tabIe53-;if(tabIe53=0)table53=31;break;)dayl=tab1e53/10*16+tabIe53%10;writel302(0 x86,dayl);)if(num=5)(table54;if(table54=0)table54=12;yuel=tabIe54/10*16+table54%10;writel302(0 x88,yuel
23、);if(num=6)(table55;if(table55=-l)table55=79;Ieap=(tabIe55%4=0&tabIe55%100!=0);yearl=table55/10*16+tab!e55%10;writel302(0 x8c,yearl);)if(K4=0)(Delay_ms(5);if(K4=0);(whi!e(!K4);beep();writel302(0 x80,0 x00);writel302(0 x8e,0 x80);flag=0;)void init_timerO(void)/定时器初始化TMOD|=0 x01;TH0=(65536-2000)/256;T
24、L0=(65536-2000)%256;EA=1;ET0=l;TR0=l;)void main()(float temp;initl602();/initl602B();initl302();init_timerO();while(l)if(K3=0)Delay_ms(10);if(K3=0)(while(!K3);beep();flag=l;)get_time();Display_time(table55,table54,table53,table52,table5l,table50,table56);if(flag)Keyprocess();if(flagl=l)(flagl=O;temp=get_18b20();temp=temp*0.0625;sprintf(table7,*%2.Of,temp);)void timerO()interrupt 1 定时器函数(static uint num2=0;TH0=(65536-2000)/256;TL0=(65536-2000)%256;num2+;if(num2=300)(num2=0;flagl=l;)5,作品效果图7 yV”4MdMini*IS音的iS计与制作+_