目录

一、项目功能概述

二、原理图设计

三、PCB设计

四、仿真实现

五、程序设计

六、设计资料

资料下载地址:基于51单片机万年历

一、项目功能概述

1、可以显示年、月、日、时、分、秒、星期、农历

2、按键可以设置闹钟及报警

3、可以调整时间

共四个按键:设置、加、减、切换

二、原理图设计

三、PCB设计

四、仿真实现

五、程序设计

部分代码

#include <reg52.h>          //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义   变量范围0~255
#define uint  unsigned int   //无符号整型 宏定义    变量范围0~65535
#include "nongli.h"bit flag_200ms ;
bit flag_100ms ;
sbit beep = P3^7;    //蜂鸣器定义
bit flag_beep_en;
uint clock_value;     //用作闹钟用的void yunyin_boshi();   //语音报时程序sbit dq   = P3^2;   //18b20 IO口的定义/***********************语音模块控制IO口的定义************************/
sbit  VRST = P2^4;
sbit  VBUSY= P2^0;
sbit  VSDA = P2^1;
sbit  VCS  = P2^2;
sbit  VSCL = P2^3;
uchar yujing[3];uint temperature ;    //温度变量
uchar flag_nl;        //农历 阳历显示标志位uchar menu_1,menu_2;uchar key_time,flag_value;      //用做连加的中间变量
bit key_500ms  ;
uchar n_nian,n_yue,n_ri;        //农历显示的函数#include "ds1302.h"
#include "lcd1602.h"/***********100us的延时函数***12M晶振**************/
void delay_100us(uchar z)
{               //12Muchar x,y;for(x=0;x<z;x++)for(y=0;y<30;y++);
}/***********************18b20初始化函数*****************************/
void init_18b20()
{bit q;dq = 1;             //把总线拿高delay_uint(1);       //15usdq = 0;              //给复位脉冲delay_uint(80);      //750usdq = 1;             //把总线拿高 等待delay_uint(10);       //110usq = dq;             //读取18b20初始化信号delay_uint(20);       //200usdq = 1;             //把总线拿高 释放总线
}/*************写18b20内的数据***************/
void write_18b20(uchar dat)
{uchar i;for(i=0;i<8;i++){                     //写数据是低位开始dq = 0;          //把总线拿低写时间隙开始 dq = dat & 0x01; //向18b20总线写数据了delay_uint(5);    // 60usdq = 1;             //释放总线dat >>= 1;}
}if(menu_2 == 3)        //设置秒{if(key_can == 3)  //加{miao+=0x01;if((miao & 0x0f) >= 0x0a)miao = (miao & 0xf0) + 0x10;if(miao >= 0x60)miao = 0;} if(key_can == 4)  //减   {if(miao == 0x00)miao = 0x5a;if((miao & 0x0f) == 0x00)miao = (miao | 0x0a) - 0x10;miao -- ;         }}if(menu_2 == 4)       //设置星期{if(key_can == 3) //加{week+=0x01;if((week & 0x0f) >= 0x0a)week = (week & 0xf0) + 0x10;if(week >= 0x08)week = 1;}     if(key_can == 4)  //减   {if(week == 0x01)week = 0x08;if((week & 0x0f) == 0x00)week = (week | 0x0a) - 0x10;week -- ;}    }if(menu_2 == 5)        //设置年{if(key_can == 3)  //加{nian+=0x01;if((nian & 0x0f) >= 0x0a)nian = (nian & 0xf0) + 0x10;if(nian >= 0x9a)nian = 1;}     if(key_can == 4)  //减   {if(nian == 0x01)nian = 0x9a;if((nian & 0x0f) == 0x00)nian = (nian | 0x0a) - 0x10;nian -- ;     }   }if(menu_2 == 6)        //设置月{if(key_can == 3)  //加{yue+=0x01;if((yue & 0x0f) >= 0x0a)yue = (yue & 0xf0) + 0x10;if(yue >= 0x13)yue = 1;}       if(key_can == 4)  //减   {if(yue == 0x01)yue = 0x13;if((yue & 0x0f) == 0x00)yue = (yue | 0x0a) - 0x10;yue -- ;                   }   }if(menu_2 == 7)        //设置日{if(key_can == 3)  //加{ri+=0x01;if((ri & 0x0f) >= 0x0a)ri = (ri & 0xf0) + 0x10;if(ri >= 0x32)ri = 0;          }       if(key_can == 4)  //减   {if(ri == 0x01)ri = 0x32;if((ri & 0x0f) == 0x00)ri = (ri | 0x0a) - 0x10;ri -- ;         }   }if(menu_2 == 3)        //设置秒{if(key_can == 3)  //加{fen1+=0x01;if((fen1 & 0x0f) >= 0x0a)fen1 = (fen1 & 0xf0) + 0x10;if(fen1 >= 0x60)fen1 = 0;} if(key_can == 4)  //减   {if(fen1 == 0x00)fen1 = 0x5a;if((fen1 & 0x0f) == 0x00)fen1 = (fen1 | 0x0a) - 0x10;fen1 -- ;         }}if(open1 == 1)write_string(2,4,"Y");  else write_string(2,4,"N");   write_sfm2_ds1302(2,7,shi1);       //显示闹钟时write_sfm2_ds1302(2,10,fen1);    //显示闹钟分switch(menu_2)       // 光标显示{case 1:  write_guanbiao(2,4,1);  break;case 2:  write_guanbiao(2,7,1);  break;case 3:  write_guanbiao(2,10,1);  break;}  }
}/***********************小延时函数**************************/
void  delay_us (unsigned int us)
{while(us--){_nop_();}
}/***********************三线发码子程序************************/
void Send_threelines(unsigned char addr,uchar dat)
{unsigned char i;VRST=0;delay_1ms(5);VRST=1;delay_1ms(20); /* 复位拉高20ms*/VCS=0;delay_1ms(5);  /* 片选拉低5ms */for(i=0;i<8;i++){VSCL=0;if(addr&0x01){VSDA=1;}                                else VSDA=0;addr>>=1;delay_us(150); /* 150us */VSCL=1;delay_us(150); /* 150us */}VCS=1;delay_1ms(30);if(dat == 1)while(VBUSY == 0);      //忙等待
}

六、设计资料

基于51单片机万年历相关推荐

  1. 基于51单片机万年历可调电子时钟闹钟温度(实物图+源码+仿真+原理图+论文)

     资料编号:038 硬件构成:51单片机+最小系统+LCD1602液晶显示模块+时钟模块+温度采集模块+蜂鸣器模块+按键模块 1.采用LCD1602液晶屏显示.DS1302时钟芯片和DS18B20温度 ...

  2. 基于51单片机的数字时钟(万年历)

    具体实现功能 系统由STC89C52单片机+DS1302时钟芯片+按键模块+LCD1602显示+电源构成. 具体功能: 1.可以显示年.月.日.时.分.秒.星期.农历: 2.按键可以设置闹钟及报警: ...

  3. 基于51单片机的电子万年历的设计-源代码

    电子万年历的设计目录 电子万年历的设计 电子万年历的系统整体设计框图 所需要的元件 DS18B20模块 DS18B20的特点 DS18B20内部结构 DS18B20管脚排列 DS1302模块 SPI时 ...

  4. 基于51单片机的万年历(包含闹钟,秒表)实现

    开头唠一唠: 趁着寒假的时间,也趁着课程设计正好是做一个万年历.就打算好好从头到尾来一遍.涨涨知识.首先说的是本人也是小白一颗,大神们能帮忙指正错误的话,不胜感激.写博客只是为了总结经验,要是帮到一部 ...

  5. 基于51单片机的DS12C887电子钟万年历带农历温度

    基于51单片机的DS12C887电子钟万年历( proteus仿真+程序+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0028 ...

  6. 基于51单片机的电子万年历设计

    基于51单片机的电子万年历 1)LCD1602显示时间.日期.星期.温度 2)按键可调整时间日期星期 3)整点报时 4)DS1302时钟芯片 5)DS18B20温度传感器 6)闹钟功能 7)判断闰年 ...

  7. 基于51单片机的万年历(算法实现)

    基于51单片机的万年历,用到了单片机独立键盘.数码管.LED灯模块实现. 想要简单还是DS1302好用. 1 /******************************************** ...

  8. 基于51单片机的lcd1602万年历设计_温度+闹钟心得

    基于51单片机的lcd1602万年历设计_温度+闹钟心得 下载地址 https://download.csdn.net/download/weixin_44017446/10908985 当看到这个学 ...

  9. 【002】基于51单片机的电子万年历proteus仿真设计

    一.资料内容(私信获取) (1).基于51单片机的电子万年历proteus仿真设计一份: (2).基于51单片机的电子万年历proteus仿真设计keli源代码一份: (3).基于51单片机的电子万年 ...

最新文章

  1. 通过 Docker 部署 Redis 6.x 集群
  2. 为什么手机网速太慢_为什么手机信号满格,网速却很慢?终于知道为啥了
  3. 机械设计基础第一章绪论精选习题(全覆盖,无死角版)2018-01-06
  4. 解决layui数据表格table固定列行高不一致的情况
  5. php扩展memcached和memcache的安装配置方法
  6. css flex排序居中
  7. Oracle开源Fn,加入Serverless之争
  8. 关于如何查看 EntityValidationErrors 详细信息的解决方法
  9. 【Flask】ORM关系以及一对多
  10. 使用PHP来简单的创建一个RPC服务
  11. 番外篇:R or Python,到底学哪个?这篇文章来告诉你......
  12. 请认真使用没有后悔药的parted分区工具
  13. idea 导出项目结构树
  14. 数据对接利用hutool工具类进行xml解析,xml转换成map,然后进行数据入库
  15. openstack的部署与云主机实例
  16. 12.17-Linux系统定制
  17. libreCAD源码阅读笔记3
  18. 深入理解Java虚拟机 笔记
  19. javabean中bean的含义
  20. ap 目标检测算法map_目标检测的指标AP与mAP

热门文章

  1. 阿里巴巴Java面试题目
  2. java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动
  3. Python中Selenium模块的使用
  4. 计算机的问卷调查的题目,新颖的调查问卷的题目
  5. html显示器对象属性,Web网站中利用JavaScript中ActiveXObject对象获取硬件信息(显示器数量、分辨率)从而进行单双屏跳转...
  6. 轻松一下:python(turtle模块)绘制分形图
  7. python 布莱克舒尔斯_布莱克—舒尔斯期权定价模型
  8. CCF201509-1数列分段(C语言)
  9. 205.自定义菜单[个人公众号未认证无法使用]
  10. 浙江海發進出口股份有限公司官网上线|LTD五金技术行业案例分享