本文转自51hei论坛,作者yyha。万年历基本是所有单片机初学者入门时都会做的一个项目,好玩又好用~
万年历使用说明
v6.1以上版本万年历pcb增加了24cxx接口和红外接口,其他接口电路跟老版本一样,程序可以通用,这样此万年历便成了一个简单实用的单片机开发实验板。
一、电源电压4.8v—12v,可以直接用电脑usb供电。(如高于5v供电,请将 j3 短路帽拔掉)
二、程序修改说明
1、如果你编译通不过,就是你用的keil库文件不全,请换个完整版本的keil,或到xxxxx,本程序是完全编译通过,且没有1个警告;
2、本程序由于农历,节气等数据很占空间,编译后有22k,请使用程序存储器25k以上的51单片机,比如,等;
3、如果你的汉字显示不全或乱码,比如“三“显示不了,那是你的keil没有打补丁,并不是程序问题,至于什么补丁你可以网上搜或向我索要;
4、在修改位定义的时候需要将.h文件下的sbit = p3^7; sbit key_1 = p2^7;一起修改;
5、蜂鸣器请最好使用无源蜂鸣器或小喇叭,这样音质会很好。
电路原理图如下:
元件清单:
名称 数量 说明
单片机 1 内存20k以上的51单片机都可以
1
1
1 v6.0以下版本不用安装
红外接收头 1 v6.1以下版本不用安装
微型遥控器 1 v6.1以下版不配备
40dip座 1
8dip座 1
3dip座 1
4dip弯针 1
20芯座 1
20芯插针 1
无源蜂鸣器 1
电池 1
电池座 1
电源座 1
按键 4
开关 1
晶振 1
11.晶振 1
s8050三极管 1
30p电容 2
104电容 0 /516单片机不用安装
10uf电解 0
4.7k电阻 1 /516 用1k,其他用10k
1k电阻 2 可以不安装
100uf电解 0
双面绿色环氧pcb 1 驱动字库液晶
12864液晶 1
柱子 4
螺帽 4 使用自带对比度调节液晶不用安装
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,差不多150多g。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。
点击这里找小助理0元领取:
公历转换农历
公历与农历是我国目前并存的两种历法,各有其固有的规律,农历与月球的运行相对应,其影响因素多,它的大小月和闰月与天体运行有关,计算十分复杂,且每年都不一致,因此要用单片机实现公历与农历的转换用查表法是最方便实用的办法。
计算公历日对应的农历日期的方法是先计算出公历日离当年元旦的天数,然后查表取得当年的春节日期,计算出春节离元旦的天数,二者相减即可算出公历日离春节的天数,以后只要根据大小月和闰月信息减一月天数,调整一月农历月份,即可推算出公历日所对应的农历日期,如公历日不到春节日期,农历年要比公历年小一年,农历大小月取前一年的信息,农历月从12 月向前推算。
本文介绍的公历转换农历c语言程序实现从1901 年到2099 年199 年的公历日到农历转换,如果到2099年后则要添加农历表,但我相信199年对我们现代人已经足够了。在功能函数入口输入bcd公历数据函数出口直接输出bcd农历数据。农历显示按照人为习惯都是用大写显示,比如:“1号”应该显示为’初一“;“21”应该显示为“廿一”;“12月”应该显示为“腊月”等。
二十四节气和生肖
二十四节气是我国劳动人民创造的辉煌文化,它能反映季节的变化,指导农事活动,影响着千家万户的衣食住行。有人认为二十四节气从属农历,其实,它是根据阳历划定的。即根据太阳在黄道上的位置,把一年划分为24个彼此相等的段落。也就是把黄道分成24个等份,每等份各占黄经15°。由于太阳通过每等份所需的时间几乎相等,二十四节气的公历日期每年大致相同:上半年在6日、21日前后,下半年在8日、23日前后。
二十四节气没有固定规律,也需要存表。如1901年的节气为 :
1月 2月3月4月5月6月 7月8月9月 10月 11月 12月
[ 6,21][ 4,19][ 6,21][ 5,21][ 6,22][ 6,22][ 8,23][ 8,24][ 8,24][ 8,24][ 8,23][ 8,22]
[ 9, 6][11, 4][ 9, 6][10, 6][ 9, 7][ 9, 7][ 7, 8][ 7, 9][ 7, 9][ 7, 9][ 7, 8][ 7,15]
上面第一行数据为每月节气对应公历日期,15减去每月第一个节气,每月第二个节气减去15得第二行,这样每月两个节气对应数据都小于16,每月用一个字节存放,高位存放第一个节气数据,低位存放第二个节气的数据,根据以上规律便可编写出节气表,最后通过表计算出每月节气。
生肖计算相对就简单多了。12生肖按以下排列:
0鼠 1牛 2虎 3兔 4龙 5蛇 6马 7羊 8猴 9鸡 10狗 11猪
用当前年数减去1900,然后除以12取余,余数就代表属相数。
1. 例如:1951年
(1982-1900)/12=余10
即1982年生的人的属相为狗年
2.2009年
(2009-1900/12=余7
即2009年生的人属相为牛年
原文链接:红外遥控万年历_单片机源代码(带详细注释)