




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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个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#include#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;sbit 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;char table72;char leap;/延时函数部分void Delay_ms(uint xms)/延时 uint i,j; for(i=xms;i0;i-) for(j=110;j0;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 = 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;i0;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; i0; 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个寄存器) 前两个就是温度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_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=1;sclk=1; for(i=0;i=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=1; sclk=1; for(i=0;i=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); while(table2i!=0) write1602(table2i); i+; write1602(0xef); write1602c(0x80+0x40+20); i=0; while(table3i!=0) write1602(table3i); i+; for(i=0;i6) 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(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) 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(table53=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; 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(table53=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(table53=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+; 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(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) switch(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) 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; 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(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(0x86,day1); if(num=5) table54-; if(table54=0) table54=12; yue1=table54/10*16+table54%10; write1302(0x88,yue1); if(num=6) table55-; if(table55=-1) table55=79; leap=(table55%4=0&table55%100!=0);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建厦门外图集团有限公司17个岗位招聘若干人笔试历年参考题库附带答案详解
- 2025浙江绍兴兰亭国有控股集团有限公司招聘(派遣制岗位)笔试以及人员笔试历年参考题库附带答案详解
- 2025年济宁市任城区事业单位公开招聘工作人员(教育类)(125人)模拟试卷及一套完整答案详解
- 2025广东广州花都产融建设发展投资有限公司第二次招聘项目用工人员及安排笔试历年参考题库附带答案详解
- 2025广西玉林北流市山围镇卫生院公开招聘5人考前自测高频考点模拟试题及1套参考答案详解
- 2025江苏南京交通职业技术学院招聘高层次人才14人考前自测高频考点模拟试题及1套完整答案详解
- 2025湖南长沙市生态环境局芙蓉分局招聘编外合同制工作人员考前自测高频考点模拟试题有答案详解
- 2025黑龙江哈尔滨市五常市万宝学校9大岗位招聘28人模拟试卷及答案详解(网校专用)
- 2025广东深圳市宝安区陶园中英文实验学校招聘精英教师16人考前自测高频考点模拟试题及一套答案详解
- 2025年度哈尔滨“丁香人才周”(春季)事业单位引才招聘1347人考前自测高频考点模拟试题有完整答案详解
- 介绍莫兰迪的课件
- 进位制完整版本
- DB32/T+4860-2024+电镀园区环境管理技术规范
- 室内安装标识标牌施工方案
- GB/T 17775-2024旅游景区质量等级划分
- 小学数学情境教学设计案例分析
- 《福建省整体装配式卫浴间标准设计图集》
- 中药冷敷技术操作方法及常见疾病的中药冷敷技术
- 地方政府的组织结构课件
- 【公开课教案】《蹲踞式起跑》教案
- 病毒性脑炎临床路径(2016年版)
评论
0/150
提交评论