用51单片机实现公历与农历星期的转换
- 格式:pdf
- 大小:152.74 KB
- 文档页数:14


公历转农历的函数公式
```python
def solar_to_lunar(year, month, day):
#定义农历的年、月、日
lunar_year, lunar_month, lunar_day = 0, 0, 0
#农历年份从公历年份的下一年开始
lunar_year = year + 1
#计算该年的农历月份
lunar_month = calculate_lunar_month(year)
#计算该月的农历天数
lunar_day = calculate_lunar_day(year, month, day)
#返回农历日期
return lunar_year, lunar_month, lunar_day
```
上述函数中,我们调用了两个子函数`calculate_lunar_month`和`calculate_lunar_day`来计算农历的月份和天数。
1.计算农历月份:
```python
def calculate_lunar_month(year): #计算首个月
month = 1
#判断该年是否有闰月
if is_leap_year(year):
leap_month = calculate_leap_month(year)
#如果有闰月,计算该月之后的农历月份需要减去一个月
if leap_month > 0:
if month >= leap_month:
month -= 1
return month
```
在`calculate_lunar_month`函数中,我们首先判断该年是否有闰月,如果有闰月,计算该月之后的农历月份需要减去一个月。
2.计算农历天数:
```python
def calculate_lunar_day(year, month, day):
lunar_day = 0
#计算公历日期对应的农历天数
for i in range(1, month): lunar_day += calculate_month_day(year, i)
郑州航空工业管理学院
毕 业 论 文(设 计)
题 目 基于单片机的电子万年历的设计与制作
二О一三年五月二十三日 郑州航空工业管理学院毕业设计(论文)
I 摘 要
单片机应用技术飞速发展,从导弹的导航装置到飞机上各种仪表的控制,从计算机的网络通讯与数据传输到工业自动化过程的实时控制和数据处理,以及生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。单片机是集CPU、RAM、ROM 、定时、计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,系统由主控制器STC89C52为控制中心,DS12C887产生时钟,DS18B20产生温度,12864液晶显示对日期、时间等进行显示,按键可以设置时间、闹钟等。能实现时钟、日历、时间和温度显示的功能。
今后万年历将会朝着精准度更高,外观更加美丽,价格更加实惠的方向发展,并且将会出现更多的辅助功能。
关键词:单片机,农历查询,万年历,温度显示
郑州航空工业管理学院毕业设计(论文)
II ABSTRACT
As the rapid development of Single-chip Microcomputer Application technology,
from the navigation device of missile to the various instruments on the aircraft control
and from computer communication network and data transmission to industrial
real-time automation process control and data processing, as well as the extensive use of
基于单片机万年历设计
基于单片机的万年历设计二、实验要求设计一个万年历,将时钟显示在LCD1602的显示屏上并且可以进行年、月、日以及时、分、秒的设置。此外还可以通过按键进行闹钟设置以及事件提醒功能,用蜂鸣器进行闹铃提醒。最后附加一个温湿度检测的功能,用温湿度传感器检测室内的温湿度并将温湿度数据在显示屏上显示出来。
三、实验设备和仪器1.用STC89C52芯片作为系统板的主控芯片2.DHT11温湿度传感器3.DS1302时钟芯片4.LCD1602显示屏四、实验各模块原理介绍4.1STC89C52单片机STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flah存储器。STC89C52使用经典的MCS-51内核,具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flah,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
2.工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机) 3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4.用户应用程序空间为8K字节5.片上集成512字节RAM6.通用I/O口(32个),复位后为:P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
8.具有EEPROM功能9.共3个16位定时器/计数器。即定时器T0、T1、T2。
10.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。 11.通用异步串行口(UART),还可用定时器软件实现多个UART。
12.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) 13.PDIP封装1、STC89C52单片机引脚图图4.1STC89C52单片机引脚图①主电源引脚(2根) VCC(Pin40):电源输入,接+5V电源 GND(Pin20):接地线②外接晶振引脚(2根) 某TAL1(Pin19):片内振荡电路的输入端 某TAL2(Pin20):片内振荡电路的输出端③控制引脚(4根) RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
公历日期与农历日期的相互转换程序
//**********************************
// 公历日期与农历日期的相互转换程序
// 公元1800年1月25日~2101年1月28日
// 请在VC++6.0平台运行
//**********************************
#include;
#include;
#include;
#include;
#include;
#include;
struct date{ short year,month,day; }
d1={ 1800,1,25 },//农历1800正月初一(星期六)
d2={ 2101,1,28 };//农历2100腊月廿九(未使用)
struct lunarYear //农历年
{ char run;
//闰月月份(0表示无闰月)
char ZL[13];
//农历i月初一对应公历i月ZL[i]日(广义)
} Year[2101 //但是ZL[i]的最高位1表示大月0表示小月
-1800]={4};//农历1800年闰四月
#define leap(y) !(y%(y%100?4:400)) //公元闰年宏定义
unsigned char
days[]={ 0,31,28,31,30,31,30,31,31,30,31,30,31 },
b[]= //农历1800-2100年大月(30天)小月(29天)闰月数据(hex string)
{
"adca5aa92bb525bba25bb493b64a5ba9add496ea8a6ed14eea4a6da5b6"
"545baa4bba45bba82b75a5b654abaa55d526eda4aed495da526daa5655"
"abb295ba5257aa4b75a95655abaa56ea4a5da92ed965d594adaa56692b"