万年历单片机c语言,c51单片机万年历的c程序

时间: 2023-10-09 07:11:16 浏览: 47
以下是一个基于C51单片机的万年历程序示例: ```c #include <reg52.h> // 定义闰年月份天数 unsigned char code day_table[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; unsigned char code day_leap_table[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // 定义LCD1602连接引脚 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; sbit LCD1602_DATAPINS_4=P0^4; sbit LCD1602_DATAPINS_5=P0^5; sbit LCD1602_DATAPINS_6=P0^6; sbit LCD1602_DATAPINS_7=P0^7; // 函数声明 void init_lcd(void); // 初始化LCD1602 void display_char(unsigned char x,unsigned char y,unsigned char dat); // 在LCD1602指定位置显示一个字符 void display_string(unsigned char x,unsigned char y,unsigned char *s); // 在LCD1602指定位置显示一个字符串 void display_date(unsigned char year,unsigned char month,unsigned char day); // 在LCD1602指定位置显示日期 // 主函数 void main() { unsigned char year = 21; // 年份为2021年 unsigned char month = 1; // 月份为1月 unsigned char day = 1; // 日为1日 init_lcd(); // 初始化LCD1602 while(1) { display_date(year, month, day); // 在LCD1602上显示日期 // 下面的代码用于更新日期 day++; if(month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) // 判断闰年 { if(day > day_leap_table[month - 1]) { day = 1; month++; } } else { if(day > day_table[month - 1]) { day = 1; month++; } } if(month > 12) { month = 1; year++; } } } // 初始化LCD1602 void init_lcd(void) { display_char(0, 0, 0x38); // 显示模式设置 display_char(0, 0, 0x0c); // 显示开关控制 display_char(0, 0, 0x06); // 显示光标移动设置 display_char(0, 0, 0x01); // 显示清屏 } // 在LCD1602指定位置显示一个字符 void display_char(unsigned char x,unsigned char y,unsigned char dat) { unsigned char addr; if(y == 0) { addr = 0x80 + x; } else { addr = 0xc0 + x; } delay(1); RS = 0; RW = 0; LCD1602_DATAPINS_7 = dat >> 7; LCD1602_DATAPINS_6 = (dat >> 6) & 0x01; LCD1602_DATAPINS_5 = (dat >> 5) & 0x01; LCD1602_DATAPINS_4 = (dat >> 4) & 0x01; EN = 1; delay(1); EN = 0; delay(1); RS = 0; RW = 0; LCD1602_DATAPINS_7 = (dat >> 3) & 0x01; LCD1602_DATAPINS_6 = (dat >> 2) & 0x01; LCD1602_DATAPINS_5 = (dat >> 1) & 0x01; LCD1602_DATAPINS_4 = dat & 0x01; EN = 1; delay(1); EN = 0; } // 在LCD1602指定位置显示一个字符串 void display_string(unsigned char x,unsigned char y,unsigned char *s) { while(*s != 0) { display_char(x, y, *s++); x++; } } // 在LCD1602指定位置显示日期 void display_date(unsigned char year,unsigned char month,unsigned char day) { unsigned char date_str[11]; unsigned char i; // 计算日期字符串 date_str[0] = '2'; date_str[1] = '0'; date_str[2] = year / 10 + '0'; date_str[3] = year % 10 + '0'; date_str[4] = '-'; date_str[5] = month / 10 + '0'; date_str[6] = month % 10 + '0'; date_str[7] = '-'; date_str[8] = day / 10 + '0'; date_str[9] = day % 10 + '0'; date_str[10] = 0; display_string(0, 0, date_str); // 在LCD1602上显示日期 } // 延时函数 void delay(unsigned int i) { unsigned int j,k; for(j=0;j<i;j++) { for(k=0;k<125;k++); } } ``` 该程序使用LCD1602显示日期信息,通过更新日期实现万年历的功能。需要注意的是,该程序仅适用于2021年的日历,如果需要适用于其他年份,需要对程序进行相应的修改。

相关推荐

最新推荐

recommend-type

基于C语言的万年历课程设计报告(内附程序,原理分析,心得体会等)

功能简介: 1、闰年判断,能够判断该年是闰年还是平年。2、日期查询,输入日期能够判断该日期是星期几及具体信息。3、月历查询,可显示指定日期所在月份的月历,包括打印指定个数的空格、打印分隔线。...
recommend-type

PIC16F877A万年历程序

为了把KS0108系列的液晶吃透,特别制作了这款万年历,感觉效果还是不错的.希望大家分享我的喜悦,毕竟有了更多志同道合的朋友支持,我才能更进一步提高.
recommend-type

利用DS1302实现单片机控制的电子万年历

1. 采用单片机控制DS1302实现万年历功能; 2. 初始化时需要写入DS1302进行初始年月日时分秒校正; 3. DS1302外部晶振32.768KHz; 4. 采用5位LED或LCD1602显示; 5. 根据设计任务的要求编写程序,画出程序流程图,并...
recommend-type

单片机万年历电子钟设计报告含电路图和源程序

电子万年历的电路图和源程序,功能有:显示年月日、星期、时钟、闹铃、温度。
recommend-type

基于51系列的单片机电子万年历设计

本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

如何用python编写api接口

在Python中编写API接口可以使用多种框架,其中比较流行的有Flask和Django。这里以Flask框架为例,简单介绍如何编写API接口。 1. 安装Flask框架 使用pip命令安装Flask框架: ``` pip install flask ``` 2. 编写API接口 创建一个Python文件,例如app.py,编写以下代码: ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/api/hello', methods=['GET']) def hello():
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。