600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 基于51单片机的万年历(带温湿度)带闹钟功能proteus仿真原理图PCB

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

时间:2024-02-17 04:56:48

相关推荐

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

功能介绍:

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_CLRRST=0//电平置低#define RST_SETRST=1//电平置高//双向数据#define IO_CLRIO=0//电平置低#define IO_SETIO=1//电平置高#define IO_RIO //电平读取s//时钟信号#define SCK_CLRSCLK=0//时钟信号#define SCK_SETSCLK=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累加器=AACC.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, // 0x25, 0xAA, 0xB6, // 0x05, 0x6A, 0x49, // 0x7A, 0xAd, 0xBd, // 0x02, 0x5d, 0x52, // 0x09, 0x2d, 0x47, // 0x5C, 0x95, 0xBA, // 0x0A, 0x95, 0x4e, // 0x0B, 0x4A, 0x43, // 0x4B, 0x55, 0x37, // 0x0A, 0xd5, 0x4A, // 0x95, 0x5A, 0xBf, // 0x04, 0xBA, 0x53, // 0x0A, 0x5B, 0x48, // 0x65, 0x2B, 0xBC, // 0x05, 0x2B, 0x50, // 0x0A, 0x93, 0x45, // 0x47, 0x4A, 0xB9, // 0x06, 0xAA, 0x4C, // 0x0A, 0xd5, 0x41, // 0x24, 0xdA, 0xB6, // 0x04, 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)如:计算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数据*/

仿真演示视频:

/video/BV1LP4y1F73G/

实物演示视频:

/video/BV1F14y1E71J/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。