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

news/2025/3/20 5:58:31/

一、资料内容(私信获取

  • (1)、基于51单片机的电子万年历proteus仿真设计一份;
  • (2)、基于51单片机的电子万年历proteus仿真设计keli源代码一份;
  • (3)、基于51单片机的电子万年历Altium designer 的原理图一份;
  • (4)、基于51单片机的电子万年历proteus仿真设计的课程报告一份;
  • (5)、基于51单片机的电子万年历proteus仿真设计视频讲解一份;

二、设计要求

  1. 要求以51系列单片机为核心,设计一款电子万年历;
  2. 系统需要采用LCD1602屏幕显示相关数据;
  3. 系统要求可以显示公历日期(年、月、日)、时间(时、分、秒)、星期,并且以上数据可以通过按键更改设置;
  4. 系统可以通过LCD1602显示平年和润年;
  5. 系统需要含有闹钟功能,并且闹钟时间可以通过用户设定;

三、相关资料截图

 

 

 

四、视频讲解

私信获取全部内容 

部分源代码

#include <reg52.h>
#include <intrins.h>#define uchar unsigned char	// 以后unsigned char就可以用uchar代替
#define uint  unsigned int	// 以后unsigned int 就可以用uint 代替sfr ISP_DATA  = 0xe2;		// 数据寄存器
sfr ISP_ADDRH = 0xe3;		// 地址寄存器高八位
sfr ISP_ADDRL = 0xe4;		// 地址寄存器低八位
sfr ISP_CMD   = 0xe5;		// 命令寄存器
sfr ISP_TRIG  = 0xe6;		// 命令触发寄存器
sfr ISP_CONTR = 0xe7;		// 命令寄存器sbit LcdRs_P    = P2^7;       // 1602液晶的RS管脚       
sbit LcdRw_P    = P2^6;       // 1602液晶的RW管脚 
sbit LcdEn_P    = P2^5;       // 1602液晶的EN管脚
sbit RST_P      = P1^3;				// 时钟芯片DS1302的RST管脚
sbit SDA_P      = P1^2;				// 时钟芯片DS1302的SDA管脚
sbit SCK_P      = P1^1;				// 时钟芯片DS1302的SCK管脚
sbit KeySet_P   = P3^2;				// 设置时间按键
sbit KeyClock_P = P3^3;				// 设置闹钟按键
sbit KeyDown_P  = P3^4;				// 减按键
sbit KeyUp_P    = P3^5;				// 加按键
sbit Buzzer_P   = P2^0;				// 蜂鸣器uchar TimeBuff[7]={16,8,5,6,18,30,50};				// 时间数组,默认2016年8月5日,星期五,16:30:50
// TimeBuff[0] 代表年份,范围00-99
// TimeBuff[1] 代表月份,范围1-12
// TimeBuff[2] 代表日期,范围1-31
// TimeBuff[3] 代表星期,范围1-7,1是星期天,2是星期一... ...
// TimeBuff[4] 代表小时,范围00-23
// TimeBuff[5] 代表分钟,范围00-59
// TimeBuff[6] 代表秒钟,范围00-59uchar Clock_Hour;					// 闹钟的小时
uchar Clock_Minute;				// 闹钟的分钟
uchar Clock_Swt;					// 闹钟的开关
uchar Buzzer_Flag=0;			// 蜂鸣器工作标志
uchar nian_type;          // 年份类型/*********************************************************/
// 单片机内部EEPROM不使能
/*********************************************************/
void ISP_Disable()
{ISP_CONTR = 0;ISP_ADDRH = 0;ISP_ADDRL = 0;
}/*********************************************************/
// 从单片机内部EEPROM读一个字节,从0x2000地址开始
/*********************************************************/
unsigned char EEPROM_Read(unsigned int add)
{ISP_DATA  = 0x00;ISP_CONTR = 0x83;ISP_CMD   = 0x01;ISP_ADDRH = (unsigned char)(add>>8);ISP_ADDRL = (unsigned char)(add&0xff);// 对STC89C51系列来说,每次要写入0x46,再写入0xB9,ISP/IAP才会生效ISP_TRIG  = 0x46;	   ISP_TRIG  = 0xB9;_nop_();ISP_Disable();return (ISP_DATA);
}/*********************************************************/
// 往单片机内部EEPROM写一个字节,从0x2000地址开始
/*********************************************************/
void EEPROM_Write(unsigned int add,unsigned char ch)
{ISP_CONTR = 0x83;ISP_CMD   = 0x02;ISP_ADDRH = (unsigned char)(add>>8);ISP_ADDRL = (unsigned char)(add&0xff);ISP_DATA  = ch;ISP_TRIG  = 0x46;ISP_TRIG  = 0xB9;_nop_();ISP_Disable();
}/*********************************************************/
// 擦除单片机内部EEPROM的一个扇区
// 写8个扇区中随便一个的地址,便擦除该扇区,写入前要先擦除
/*********************************************************/
void Sector_Erase(unsigned int add)	  
{ISP_CONTR = 0x83;ISP_CMD   = 0x03;ISP_ADDRH = (unsigned char)(add>>8);ISP_ADDRL = (unsigned char)(add&0xff);ISP_TRIG  = 0x46;ISP_TRIG  = 0xB9;_nop_();ISP_Disable();
}/*********************************************************/
// 毫秒级的延时函数,time是要延时的毫秒数
/*********************************************************/
void DelayMs(uint time)
{uint i,j;for(i=time;i>0;i--)for(j=112;j>0;j--);
}/*********************************************************/
// 1602液晶写命令函数,cmd就是要写入的命令
/*********************************************************/
void LcdWriteCmd(uchar cmd)
{ LcdRs_P = 0;LcdRw_P = 0;LcdEn_P = 0;P0=cmd;DelayMs(2);LcdEn_P = 1;    DelayMs(2);LcdEn_P = 0;	
}/*********************************************************/
// 1602液晶写数据函数,dat就是要写入的命令
/*********************************************************/
void LcdWriteData(uchar dat)
{LcdRs_P = 1; LcdRw_P = 0;LcdEn_P = 0;P0=dat;DelayMs(2);LcdEn_P = 1;    DelayMs(2);LcdEn_P = 0;
}/*********************************************************/
// 1602液晶初始化函数
/*********************************************************/
void LcdInit()
{LcdWriteCmd(0x38);        // 16*2显示,5*7点阵,8位数据口LcdWriteCmd(0x0C);        // 开显示,不显示光标LcdWriteCmd(0x06);        // 地址加1,当写入数据后光标右移LcdWriteCmd(0x01);        // 清屏
}/*********************************************************/
// 液晶光标定位函数
/*********************************************************/
void LcdGotoXY(uchar line,uchar column)
{// 第一行if(line==0)        LcdWriteCmd(0x80+column); // 第二行if(line==1)        LcdWriteCmd(0x80+0x40+column); 
}


http://www.ppmy.cn/news/861824.html

相关文章

[c] 万年历

#include <stdio.h> #include <stdlib.h> #include <string.h> #define str " SUN MON TUE WED THU FRI SAT "void menu(); //操作菜单 int leap(int year); //判断某年是不是闰年 int days_month(int year, int mo…

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

资料编号&#xff1a;038 硬件构成&#xff1a;51单片机最小系统LCD1602液晶显示模块时钟模块温度采集模块蜂鸣器模块按键模块 1.采用LCD1602液晶屏显示、DS1302时钟芯片和DS18B20温度传感器构成一套液晶万年历系统设计&#xff1b; 2.液晶屏显示年、月、日、时、分、秒、星期…

万年历(c语言)

万年历&#xff08;c语言&#xff09; 一、项目背景二、设计目的三、项目功能需求1、获取当前时间2、日期有效性检查3、日期查询4、日期调整5、显示全年日历四、系统的功能结构图 五、功能模块介绍1、时间获取模块2、排版输出模块3、功能控制模块4、日历显示模块5、功能选择模块…

Java版-万年历

import java.util.Scanner;public class Calendar {public static void main(String[] args) {/*** 万年历 输入一个年份&#xff0c;再输入一个月份&#xff0c;把那个月的日历打印出来&#xff0c;&#xff08;1900年1月1日是星期一&#xff09;。* a&#xff1a;先输出提示语…

使用51单片机自制电子万年历(包含驱动、基本万年历、闹钟、日程、修改时间等)

使用51单片机自制电子万年历&#xff08;包含驱动、基本万年历、闹钟、日程、修改时间等&#xff09; 归档51单片机制作电子万年历&#xff0c;以及proteus仿真电路图&#xff0c;本设计涵盖蜂鸣器、uart、timer、矩阵扫描、lcd1602显示、基本万年历&#xff08;年/月/日/时/分…

STM32电子万年历制作详解(RTC实战)

首先附上效果图&#xff1a; 博主在重温了STM32的RTC后心血来潮&#xff0c;决定用RTC在做个万年历&#xff0c;其实也不算万年历&#xff0c;就是可以实时显示当前时间&#xff0c;而且大家也都知道&#xff0c;STM32自带的RTC的精度实在让人不好意思说&#xff0c;大概20分钟…

网页万年历

一个万年历的源代码,网页中实现的,上学期做电子商务大作业的时候写的,里面有各个时区的时间,以及节日的提示等,发上来一下,如果有不足的地方望指出.综合应用了HTML.Javascript等方便的技术,实现比较容易,不做过多解释.. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 …

基于51单片机的数字电子钟万年历闰年判断闹钟设计

基于51单片机的数字电子钟万年历闰年判断闹钟设计 视频1 开发环境2 功能说明介绍3 仿真图4 程序5 原理图6 视频讲解7 设计报告7.1 设计目的7.2 概述 8 资料清单下载链接 视频 1 开发环境 仿真图:proteus8.9以上 程序代码:KEIL4/KEIL5 原理图:AD 设计编号&#xff1a;A0009…