功能介绍:
0.本系统采用STC89C52作为单片机
1.LCD1602液晶显示当前时间和温湿度
2.按键可切换页面,显示农历,显示闹钟设置
3.当时间到达设定闹钟时间时,蜂鸣器报警

原理图:

PCB:

主程序:

#include <reg52.h>
//#include"DS18B20_3.H"
#include <string.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define wd 1 //定义是否有温湿度功能  =0时无温度,=1时有温湿度
#include "eeprom52.h"//复位脚
#define RST_CLR RST=0//电平置低
#define RST_SET RST=1//电平置高//双向数据
#define IO_CLR  IO=0//电平置低
#define IO_SET  IO=1//电平置高
#define IO_R    IO  //电平读取s//时钟信号
#define SCK_CLR SCLK=0//时钟信号
#define SCK_SET SCLK=1//电平置高#define yh 0x80           // LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)
#define er 0x80 + 0x40 // LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)
sbit en = P2^6;
sbit rw = P2^1; //如果硬件上rw接地,就不用写这句和后面的rw=0了
sbit rs = P2^7;//校时按键与C51的引脚连接定义sbit set = P3^5;      //设置键
sbit add = P3^6;       //加键
sbit dec = P3^4;       //减键
sbit seeNL_NZ = P3^7; //查看农历/闹钟sbit DHT11_0 = P1^1; //温湿度传感器
sbit buzzer = P2^0; //蜂鸣器,通过三极管8550驱动,端口低电平响bit NZ_sdgb = 1;
int temperature = 0;
int humidity = 0;// DS1302时钟芯片与C51之间的引脚连接定义
sbit IO = P2^4;
sbit SCLK = P2^5;
sbit RST = P2^3;char a, miao, shi, fen, ri, yue, nian, week, setn, temp;
uint flag;
// flag用于读取头文件中的温度值,和显示温度值
bit c_moon;char nz_shi, nz_fen, setNZn;    //定义闹钟变量
uchar shangyimiao, bsn, temp_hour; //记录上一秒时间
uchar T_NL_NZ;                     //计数器
bit timerOn = 0;                  //闹钟启用标志位
bit baoshi = 0;                       //整点报时标志位
bit p_r = 0;                      //平年/润年  =0表示平年,=1表示润年
data uchar year_moon, month_moon, day_moon;unsigned char U8FLAG, k; //温湿度变量采
unsigned char U8count, U8temp;
unsigned char U8T_data_H, U8T_data_L, U8RH_data_H, U8RH_data_L, U8checkdata;
unsigned char U8T_data_H_temp, U8T_data_L_temp, U8RH_data_H_temp, U8RH_data_L_temp, U8checkdata_temp;
unsigned char U8comdata;sbit ACC0 = ACC ^ 0;
sbit ACC7 = ACC ^ 7;
/************************************************************
ACC累加器=A
ACC.0=E0HACC.0就是ACC的第0位。Acc可以位寻址。累加器ACC是一个8位的存储单元,是用来放数据的。但是,这个存储单元有其特殊的地位,
是单片机中一个非常关键的单元,很多运算都要通过ACC来进行。以后在学习指令时,
常用A来表示累加器。但有一些地方例外,比如在PUSH指令中,就必须用ACC这样的名字。
一般的说法,A代表了累加器中的内容、而ACC代表的是累加器的地址。
***************************************************************//******************把数据保存到单片机内部eeprom中******************/
void write_eeprom()
{SectorErase(0x2000);byte_write(0x2000, nz_shi);byte_write(0x2001, nz_fen);byte_write(0x2002, timerOn);byte_write(0x2060, a_a);
}/******************把数据从单片机内部eeprom中读出来*****************/
void read_eeprom()
{nz_shi = byte_read(0x2000);nz_fen = byte_read(0x2001);timerOn = byte_read(0x2002);a_a = byte_read(0x2060);
}/**************开机自检eeprom初始化*****************/
void init_eeprom()
{read_eeprom(); //先读if (a_a != 1)  //新的单片机初始单片机内问eeprom{nz_shi = 12;nz_fen = 30;timerOn = 0;a_a = 1;write_eeprom(); //保存数据}
}//********阳历转换阴历表************************************
code uchar year_code[597] = {0x04, 0xAe, 0x53, // 1901 00x0A, 0x57, 0x48, // 1902 30x55, 0x26, 0xBd, // 1903 60x0d, 0x26, 0x50, // 1904 90x0d, 0x95, 0x44, // 1905 120x46, 0xAA, 0xB9, // 1906 150x05, 0x6A, 0x4d, // 1907 180x09, 0xAd, 0x42, // 1908 210x24, 0xAe, 0xB6, // 19090x04, 0xAe, 0x4A, // 19100x6A, 0x4d, 0xBe, // 19110x0A, 0x4d, 0x52, // 19120x0d, 0x25, 0x46, // 19130x5d, 0x52, 0xBA, // 19140x0B, 0x54, 0x4e, // 19150x0d, 0x6A, 0x43, // 19160x29, 0x6d, 0x37, // 19170x09, 0x5B, 0x4B, // 19180x74, 0x9B, 0xC1, // 19190x04, 0x97, 0x54, // 19200x0A, 0x4B, 0x48, // 19210x5B, 0x25, 0xBC, // 19220x06, 0xA5, 0x50, // 19230x06, 0xd4, 0x45, // 19240x4A, 0xdA, 0xB8, // 19250x02, 0xB6, 0x4d, // 19260x09, 0x57, 0x42, // 19270x24, 0x97, 0xB7, // 19280x04, 0x97, 0x4A, // 19290x66, 0x4B, 0x3e, // 19300x0d, 0x4A, 0x51, // 19310x0e, 0xA5, 0x46, // 19320x56, 0xd4, 0xBA, // 19330x05, 0xAd, 0x4e, // 19340x02, 0xB6, 0x44, // 19350x39, 0x37, 0x38, // 19360x09, 0x2e, 0x4B, // 19370x7C, 0x96, 0xBf, // 19380x0C, 0x95, 0x53, // 19390x0d, 0x4A, 0x48, // 19400x6d, 0xA5, 0x3B, // 19410x0B, 0x55, 0x4f, // 19420x05, 0x6A, 0x45, // 19430x4A, 0xAd, 0xB9, // 19440x02, 0x5d, 0x4d, // 19450x09, 0x2d, 0x42, // 19460x2C, 0x95, 0xB6, // 19470x0A, 0x95, 0x4A, // 19480x7B, 0x4A, 0xBd, // 19490x06, 0xCA, 0x51, // 19500x0B, 0x55, 0x46, // 19510x55, 0x5A, 0xBB, // 19520x04, 0xdA, 0x4e, // 19530x0A, 0x5B, 0x43, // 19540x35, 0x2B, 0xB8, // 19550x05, 0x2B, 0x4C, // 19560x8A, 0x95, 0x3f, // 19570x0e, 0x95, 0x52, // 19580x06, 0xAA, 0x48, // 19590x7A, 0xd5, 0x3C, // 19600x0A, 0xB5, 0x4f, // 19610x04, 0xB6, 0x45, // 19620x4A, 0x57, 0x39, // 19630x0A, 0x57, 0x4d, // 19640x05, 0x26, 0x42, // 19650x3e, 0x93, 0x35, // 19660x0d, 0x95, 0x49, // 19670x75, 0xAA, 0xBe, // 19680x05, 0x6A, 0x51, // 19690x09, 0x6d, 0x46, // 19700x54, 0xAe, 0xBB, // 19710x04, 0xAd, 0x4f, // 19720x0A, 0x4d, 0x43, // 19730x4d, 0x26, 0xB7, // 19740x0d, 0x25, 0x4B, // 19750x8d, 0x52, 0xBf, // 19760x0B, 0x54, 0x52, // 19770x0B, 0x6A, 0x47, // 19780x69, 0x6d, 0x3C, // 19790x09, 0x5B, 0x50, // 19800x04, 0x9B, 0x45, // 19810x4A, 0x4B, 0xB9, // 19820x0A, 0x4B, 0x4d, // 19830xAB, 0x25, 0xC2, // 19840x06, 0xA5, 0x54, // 19850x06, 0xd4, 0x49, // 19860x6A, 0xdA, 0x3d, // 19870x0A, 0xB6, 0x51, // 19880x09, 0x37, 0x46, // 19890x54, 0x97, 0xBB, // 19900x04, 0x97, 0x4f, // 19910x06, 0x4B, 0x44, // 19920x36, 0xA5, 0x37, // 19930x0e, 0xA5, 0x4A, // 19940x86, 0xB2, 0xBf, // 19950x05, 0xAC, 0x53, // 19960x0A, 0xB6, 0x47, // 19970x59, 0x36, 0xBC, // 19980x09, 0x2e, 0x50, // 1999 2940x0C, 0x96, 0x45, // 2000 2970x4d, 0x4A, 0xB8, // 20010x0d, 0x4A, 0x4C, // 20020x0d, 0xA5, 0x41, // 20030x25, 0xAA, 0xB6, // 20040x05, 0x6A, 0x49, // 20050x7A, 0xAd, 0xBd, // 20060x02, 0x5d, 0x52, // 20070x09, 0x2d, 0x47, // 20080x5C, 0x95, 0xBA, // 20090x0A, 0x95, 0x4e, // 20100x0B, 0x4A, 0x43, // 20110x4B, 0x55, 0x37, // 20120x0A, 0xd5, 0x4A, // 20130x95, 0x5A, 0xBf, // 20140x04, 0xBA, 0x53, // 20150x0A, 0x5B, 0x48, // 20160x65, 0x2B, 0xBC, // 20170x05, 0x2B, 0x50, // 20180x0A, 0x93, 0x45, // 20190x47, 0x4A, 0xB9, // 20200x06, 0xAA, 0x4C, // 20210x0A, 0xd5, 0x41, // 20220x24, 0xdA, 0xB6, // 20230x04, 0xB6, 0x4A, // 20240x69, 0x57, 0x3d, // 20250x0A, 0x4e, 0x51, // 20260x0d, 0x26, 0x46, // 20270x5e, 0x93, 0x3A, // 20280x0d, 0x53, 0x4d, // 20290x05, 0xAA, 0x43, // 20300x36, 0xB5, 0x37, // 20310x09, 0x6d, 0x4B, // 20320xB4, 0xAe, 0xBf, // 20330x04, 0xAd, 0x53, // 20340x0A, 0x4d, 0x48, // 20350x6d, 0x25, 0xBC, // 20360x0d, 0x25, 0x4f, // 20370x0d, 0x52, 0x44, // 20380x5d, 0xAA, 0x38, // 20390x0B, 0x5A, 0x4C, // 20400x05, 0x6d, 0x41, // 20410x24, 0xAd, 0xB6, // 20420x04, 0x9B, 0x4A, // 20430x7A, 0x4B, 0xBe, // 20440x0A, 0x4B, 0x51, // 20450x0A, 0xA5, 0x46, // 20460x5B, 0x52, 0xBA, // 20470x06, 0xd2, 0x4e, // 20480x0A, 0xdA, 0x42, // 20490x35, 0x5B, 0x37, // 20500x09, 0x37, 0x4B, // 20510x84, 0x97, 0xC1, // 20520x04, 0x97, 0x53, // 20530x06, 0x4B, 0x48, // 20540x66, 0xA5, 0x3C, // 20550x0e, 0xA5, 0x4f, // 20560x06, 0xB2, 0x44, // 20570x4A, 0xB6, 0x38, // 20580x0A, 0xAe, 0x4C, // 20590x09, 0x2e, 0x42, // 20600x3C, 0x97, 0x35, // 20610x0C, 0x96, 0x49, // 20620x7d, 0x4A, 0xBd, // 20630x0d, 0x4A, 0x51, // 20640x0d, 0xA5, 0x45, // 20650x55, 0xAA, 0xBA, // 20660x05, 0x6A, 0x4e, // 20670x0A, 0x6d, 0x43, // 20680x45, 0x2e, 0xB7, // 20690x05, 0x2d, 0x4B, // 20700x8A, 0x95, 0xBf, // 20710x0A, 0x95, 0x53, // 20720x0B, 0x4A, 0x47, // 20730x6B, 0x55, 0x3B, // 20740x0A, 0xd5, 0x4f, // 20750x05, 0x5A, 0x45, // 20760x4A, 0x5d, 0x38, // 20770x0A, 0x5B, 0x4C, // 20780x05, 0x2B, 0x42, // 20790x3A, 0x93, 0xB6, // 20800x06, 0x93, 0x49, // 20810x77, 0x29, 0xBd, // 20820x06, 0xAA, 0x51, // 20830x0A, 0xd5, 0x46, // 20840x54, 0xdA, 0xBA, // 20850x04, 0xB6, 0x4e, // 20860x0A, 0x57, 0x43, // 20870x45, 0x27, 0x38, // 20880x0d, 0x26, 0x4A, // 20890x8e, 0x93, 0x3e, // 20900x0d, 0x52, 0x52, // 20910x0d, 0xAA, 0x47, // 20920x66, 0xB5, 0x3B, // 20930x05, 0x6d, 0x4f, // 20940x04, 0xAe, 0x45, // 20950x4A, 0x4e, 0xB9, // 20960x0A, 0x4d, 0x4C, // 20970x0d, 0x15, 0x41, // 20980x2d, 0x92, 0xB5, // 2099
};///月份数据表
code uchar day_code1[9] = {0x0, 0x1f, 0x3b, 0x5a, 0x78, 0x97, 0xb5, 0xd4, 0xf3};
code uint day_code2[3] = {0x111, 0x130, 0x14e};/*
函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)
调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)
如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);
c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世
纪,c_sun=1为19世纪
调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据
*/

仿真演示视频:
https://www.bilibili.com/video/BV1LP4y1F73G/

实物演示视频:
https://www.bilibili.com/video/BV1F14y1E71J/

基于51单片机的万年历(带温湿度)带闹钟功能proteus仿真原理图PCB相关推荐

  1. 基于51单片机的大棚环境土壤湿度光强监测系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统实时监测当前温湿度/土壤湿度/环境光强并显示 2.温湿度超过设定阈值范围,蜂鸣器响,同时开启对应控制继电器 3.土壤湿度低于设定下限,开启 ...

  2. 基于51单片机的数字电容容值测量仪proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统支持15pF~450uF电容测量 2.按键可更改测量量程 3.除了采用LCD1602可以实时显示测量参数,同时具有LED可以显示各个档位 ...

  3. 基于51单片机的三路超声测距仪设计wifi通信proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时循环显示3路超声波探测距离,同时WIFI串口上报 2.带有WiFi模块,可与手机实现数据交互,WiFi模块型号采用是常见 ...

  4. 基于51单片机的温度甲烷监测报警串口上报proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前温度和甲烷浓度 2.超过甲烷浓度阈值,蜂鸣器报警 3.按键可更改甲烷浓度阈值上限和启动/暂停检测 4.0`20% ...

  5. 基于51单片机的水温水流量检测/智能水龙头控制系统proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.液晶实时显示当前的设定温度/实际温度/水龙头状态和水流量 2.按键可开关水龙头,当温度低于设定温度时,启动加热控制继电器,给水加热, 当加热到(设 ...

  6. 基于51单片机的八路多路温度测控系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时滚动显示8路温度传感器检测的温度值及设定温度值 2.当8路平均温度超过设定温度阈值范围,蜂鸣器报警,同时启动加热或降温装 ...

  7. 基于51单片机NRF24L01的远程水压监控及控制proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统分为主机和从机. 2.从机负责设定压力阈值.屏幕显示及蜂鸣器报警. 3.从机负责检测当前的水压值,并通过对比设定压力阈值,控制水泵继电器 ...

  8. 基于51单片机的汽车超声波防撞声光报警系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时距离阈值/测试距离 2.低于距离阈值将声光报警 3.按键可更改距离阈值 原理图: PCB: 主程序: #include ...

  9. 基于51单片机的智能护眼台灯带闹钟功能proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/工作模式/灯光亮度 2.具备闹钟功能,到达闹钟时间,蜂鸣器报警 3.自动模式下,有人灯亮,人离开后15s, ...

  10. 基于51单片机PM2.5空气质量检测系统(源程序+仿真+原理图+PCB+论文)

    资料编号:208 功能介绍:(全套毕设资料齐全) 本电路是由51单片机为控制核心,另外主要通过5个模块的电路设计实现功能,他们分别是LCD显示模块.粉尘传感器.A/D转换.蜂鸣器电路.LED指示电路. ...

最新文章

  1. MFC中进度条控件的使用方法
  2. 关掉微软Word的一些不必要的插件,提高启动速度
  3. javascript --- Object.create的阅读
  4. 【DP】【容斥】Nice to Meet You(AT3634)
  5. 学生机房管理服务器系统设计,广东工业大学数据库课程设计机房管理系统设计...
  6. server2019 sqlcmd命令安装_Ubuntu20.04LTS安装MS sql-server2019的方法
  7. JAVA如何选中一行上移,怎么把表格一行整体上移
  8. python linux系统管理与自动化运维_Python Linux系统管理与自动化运维
  9. 智能指针 enable_shared_from_this 陷阱
  10. 系统学习NLP(二十四)--详解Transformer (Attention Is All You Need)
  11. PyQt5-Label背景颜色和文本颜色的设置
  12. 聊聊Dotnetty
  13. 加班不能正常主张加班费的原因解析
  14. The size of tensor a (4) must match the size of tensor b (2) at non-singleton dimension 1
  15. Python爬取堆糖网的表情包(再也不用担心斗图失败了)
  16. 山东教师教育网-404、登录、密码找回、常见问题、绑定已有账户
  17. jacob根据word模板生成文
  18. 二叉树的简介、特点及二叉树存储结构’
  19. vue点击预览图片插件(可放大缩小翻转等)
  20. 38211协议学习笔记(2)-帧结构和物理资源

热门文章

  1. 从零开始用android studio
  2. XJOI_3571_求十位数
  3. 学校做计算机教室锐捷,云课堂:让学生爱上每一节课
  4. 笔记本电脑更换固态硬盘
  5. [工具]Chrome(Google浏览器)常用插件
  6. Android RSA加密解密
  7. 神经网络、目标检测学习
  8. python 清空表格_python 清空表数据库表
  9. Linux 驱动开发 六十六:多点触控(MT)协议
  10. Counter()函数进行排序后如何得到有序的键