基于51单片机万年历
目录
一、项目功能概述
二、原理图设计
三、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单片机万年历相关推荐
- 基于51单片机万年历可调电子时钟闹钟温度(实物图+源码+仿真+原理图+论文)
资料编号:038 硬件构成:51单片机+最小系统+LCD1602液晶显示模块+时钟模块+温度采集模块+蜂鸣器模块+按键模块 1.采用LCD1602液晶屏显示.DS1302时钟芯片和DS18B20温度 ...
- 基于51单片机的数字时钟(万年历)
具体实现功能 系统由STC89C52单片机+DS1302时钟芯片+按键模块+LCD1602显示+电源构成. 具体功能: 1.可以显示年.月.日.时.分.秒.星期.农历: 2.按键可以设置闹钟及报警: ...
- 基于51单片机的电子万年历的设计-源代码
电子万年历的设计目录 电子万年历的设计 电子万年历的系统整体设计框图 所需要的元件 DS18B20模块 DS18B20的特点 DS18B20内部结构 DS18B20管脚排列 DS1302模块 SPI时 ...
- 基于51单片机的万年历(包含闹钟,秒表)实现
开头唠一唠: 趁着寒假的时间,也趁着课程设计正好是做一个万年历.就打算好好从头到尾来一遍.涨涨知识.首先说的是本人也是小白一颗,大神们能帮忙指正错误的话,不胜感激.写博客只是为了总结经验,要是帮到一部 ...
- 基于51单片机的DS12C887电子钟万年历带农历温度
基于51单片机的DS12C887电子钟万年历( proteus仿真+程序+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0028 ...
- 基于51单片机的电子万年历设计
基于51单片机的电子万年历 1)LCD1602显示时间.日期.星期.温度 2)按键可调整时间日期星期 3)整点报时 4)DS1302时钟芯片 5)DS18B20温度传感器 6)闹钟功能 7)判断闰年 ...
- 基于51单片机的万年历(算法实现)
基于51单片机的万年历,用到了单片机独立键盘.数码管.LED灯模块实现. 想要简单还是DS1302好用. 1 /******************************************** ...
- 基于51单片机的lcd1602万年历设计_温度+闹钟心得
基于51单片机的lcd1602万年历设计_温度+闹钟心得 下载地址 https://download.csdn.net/download/weixin_44017446/10908985 当看到这个学 ...
- 【002】基于51单片机的电子万年历proteus仿真设计
一.资料内容(私信获取) (1).基于51单片机的电子万年历proteus仿真设计一份: (2).基于51单片机的电子万年历proteus仿真设计keli源代码一份: (3).基于51单片机的电子万年 ...
最新文章
- 通过 Docker 部署 Redis 6.x 集群
- 为什么手机网速太慢_为什么手机信号满格,网速却很慢?终于知道为啥了
- 机械设计基础第一章绪论精选习题(全覆盖,无死角版)2018-01-06
- 解决layui数据表格table固定列行高不一致的情况
- php扩展memcached和memcache的安装配置方法
- css flex排序居中
- Oracle开源Fn,加入Serverless之争
- 关于如何查看 EntityValidationErrors 详细信息的解决方法
- 【Flask】ORM关系以及一对多
- 使用PHP来简单的创建一个RPC服务
- 番外篇:R or Python,到底学哪个?这篇文章来告诉你......
- 请认真使用没有后悔药的parted分区工具
- idea 导出项目结构树
- 数据对接利用hutool工具类进行xml解析,xml转换成map,然后进行数据入库
- openstack的部署与云主机实例
- 12.17-Linux系统定制
- libreCAD源码阅读笔记3
- 深入理解Java虚拟机 笔记
- javabean中bean的含义
- ap 目标检测算法map_目标检测的指标AP与mAP
热门文章
- 阿里巴巴Java面试题目
- java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动
- Python中Selenium模块的使用
- 计算机的问卷调查的题目,新颖的调查问卷的题目
- html显示器对象属性,Web网站中利用JavaScript中ActiveXObject对象获取硬件信息(显示器数量、分辨率)从而进行单双屏跳转...
- 轻松一下:python(turtle模块)绘制分形图
- python 布莱克舒尔斯_布莱克—舒尔斯期权定价模型
- CCF201509-1数列分段(C语言)
- 205.自定义菜单[个人公众号未认证无法使用]
- 浙江海發進出口股份有限公司官网上线|LTD五金技术行业案例分享