电子万年历阳历阴历八字换算(电子万年历在线查询)
公历与干支历纪年转化的计算方法,学会后就可以自己测算生辰八字
公历是现在国际通用的历法,是一种阳历;干支历是一种用六十组各不相同的天干地支标纪年月日时的古老历法,十天干和十二地支依次相配,组成六十个基本单位,是一种星辰历。公历和星辰历经过计算可以进行转化。
十天干与十二地支
干支纪年月日时
干支纪年计算方法
公元前的算法:
记n为公元年除以10的余数,则天干为8-n(n﹤8)或8-n+10(n≧8),
记n为公元年除以12的余数,则地支为10-n(n<10)或10-n+12(n≧10)。
公元后的算法:
记n为公元年除以10的余数,则天干为n-3(n>3)或n-3+10(n≤3),
记n为公元年除以12的余数,则地支为n-3(n>3)或n-3+12(n≤3)。
以2021年为例,2021年为公元后的年份,用公元后纪年。2021除以10得余数1,天干为1-3+10=8,查天干次序(甲乙丙丁戊己庚辛壬癸)得“辛”;再将2021除以12得余数为5,则地支为5-3=2,查地支次序(子丑寅卯辰巳午未申酉戌亥)得“丑”,故2021年为辛丑年。
干支纪月计算方法
天干推排方法 :甲己之年丙作首,乙庚之岁戊为头;丙辛岁首寻庚起,丁壬壬位顺行流;若言戊癸何方求,甲寅之上好追求。
十二地支按照寅卯辰巳午未申酉戌亥子丑分别对应正月到十二月。
干支纪月表
以2021年5月为例,2021年为辛丑年,根据“丙辛岁首寻庚起”,天干正月为庚,按照循环顺序排到五月则为甲,五月对应地支为午,所以2021年5月为辛丑年甲午月。
干支纪日计算方法
高氏日柱公式
r日柱的母数,r除以60的余数即是日柱的干支序列数;s公元年数后两位数减1,s/4取整数值商;u为s除以4的余数;m为月基数,d为日期数,x为世纪常数;注意如为闰年2月之后,求出的r需要再加1。
17~26世纪的世纪常数x
月基数m
六十甲子表
由于公历与干支纪法的体系和周期完全不同,因此它们之间的换算问题比较复杂,尤其是求解公历任一日的日干支是十分困难的。高氏日柱公式采用插入世纪常数和月基数的方法,简捷准确而又科学实用,解决了由来已久的历法换算难题,在历法换算的具体问题上具有极大的实践意义。由于干支纪日按照60日一轮回,为了简便可以依靠查询万年历解决。
用高氏日柱公式计算1949年10月1日即建国当日的日柱,则有s=49-1=48;u=0;m=33;d=1;x=15,将各项数据代入高氏日柱公式可得:r=12×6+5×(12×3+0)+33+1+15=301,故301除以60的余数为1,即当日的日柱为甲子。
干支纪时计算方法
干支纪时把一天分为十二个时辰,从晚上23点整开始,从甲子这个干支开始标注第一个时辰,一个时辰相当于现在两个小时,之后每两个小时接着顺序标注,60组干支不断循环往复,地支只有12个是固定不变的。
天干纪时口诀如下:
甲己还加甲:逢日干是甲或己的日子,子时的时干从甲上起;
乙庚丙作初:逢日干是乙或庚的日子,子时的时干从丙上起;
丙辛从戊起:逢日干是丙或辛的日子,子时的时干从戊上起;
丁壬庚子居:逢日干是丁或壬的日子,子时的时干从庚上起;
戊癸起壬子:逢日干是戊或癸的日子,子时的时干从壬上起。
例如1949年10月1日的日柱为甲子,依据“甲己还加甲”,则上午6点即为丁卯时。
敬天爱人·无我无为
单片机实例分享,无线供电的LED旋转显示万年历
大家一定见过各种各样的万年历吧?下面我就带领大家手工打造一台采用无线供电方式、以LED旋转显示屏作为显示器的万年历。图7.1所示就是这款LED旋转显示万年历的实际效果。所谓LED旋转显示屏,是指在电路中只有一列发光二极管,通过电动机带动发光二极管转动,当这列发光二极管转到不同位置时,用单片机控制相应的发光二极管点亮和熄灭,由于人眼的视觉暂留现象,形成了视觉上的图形或文字。
图7.1 基于LED旋转显示屏的万年历
由于显示屏是靠转动的发光二极管的残留影像显示信息的,其特点是显示信息丰富,而整个电路所需的发光二极管的数量却很少(本电路共使用16只发光二极管),所以电路原理图非常简单,几乎和流水灯电路无异,很适合手工制作。但由于整个电路板处于高速旋转状态,所以我们首先要解决两问题:一是如何给运动的系统供电;二是如何保证显示信息稳定显示。
如何给运动的系统供电给运动的系统供电,常用的供电方式有3种:电池供电、电刷供电、无线感应供电。电池供电方式简单方便、易于携带,但它会使系统重量增加,影响转速,而且它成本高、寿命短,因此只适用于摇摇棒等短时间使用的装置,长时间运行的装置就不合适了。比如能显示时间的LED旋转显示屏,每次电池用完,重换电池就够烦心了,换了电池还得重新调整日期、时间,那简直可以用“痛苦”二字来形容。第二种方式——电刷供电,这种供电方式简单有效,能传送较大电流强度的电能,但在业余制作时,很难找到合适的高质量的电刷,高速旋转时会产生较大的噪声。第三种方式——无线感应供电,这种方式为无接触方式供电,寿命长、无新增噪声,虽然传送电流强度有限,效率稍低,但完全可以满足单片机系统的需要,所以本电路采用无线供电方式。无线供电方式技术要求稍高一些,但能增加制作的挑战性和趣味性,因此,本文首先对无线供电电路的设计与电能传输效率进行一些介绍。
无线供电技术目前还在研究试验阶段,但其应用场合非常广泛,前景非常好,比如,已经出现了一些小功率无线充电器应用成品,只要手机或者电子产品具备无线接收装置,靠近无线充电器就可以充电了,除此之外,还有无线射频IC卡、通行证、缴费卡等。
一个LED旋转显示屏需要消耗多大的电能呢?我们来做一个简单的计算:假设我们采用16个高亮度LED,工作时每个LED耗电10mA,单片机的自身耗电较少,暂且忽略不计,则电路所耗电流的最大值为160mA,电压取5V,所以最大总功耗约0.8W。下面我们就按这个要求设计电路。
无线感应供电的基本原理与变压器的原理相同。它利用电磁感应现象,通过交变磁场把电源输出的能量传送到负载,即在相距很近的两个线圈中,一个线圈作为电能的发送端,另一个线圈作为电能的接收端。通过振荡电路给发送端线圈提供交变电流,在相距很近的接收端线圈中就可以感应出交变电动势,再对这个交变电动势整流、滤波即可对负载供电。图7.2所示为通过无线感应供电方式驱动发光二极管发光的演示。
图7.2 以无线感应供电方式驱动发光二极管发光
图7.3所示是一个简易的近距离无线供电系统原理图。其中原线圈L1及其控制电路构成了发射端,副线圈L2及整流滤波电路构成了接收端,R5为负载电阻。
电路中使用74HC4060产生多谐振荡波,此多谐振荡波通过大功率场效应管IRF530给发送端线圈L1提供交变电流。本电路之所以使用74HC4060组成多谐振荡电路,主要是为了测试方便,74HC4060构成的振荡电路不但频率稳定,而且有10种输出频率可供选择,可以逐一测试每种频率所对应的输出功率和电能传输效率。当选用11.0592MHz的晶体振荡器时,QD端输出为经过16分频的频率——691.2kHz。
图7.3 简易无线供电系统原理图
次级接收电路中的谐振电容C4很重要,加上谐振电容后传输距离大大增加,输出功率和电能传输效率也明显提高。
按图3所示电路及元件参数搭好电路后接通电源,对电路进行测试。当不加任何负载时(L2远离L1),VT1的漏极电流I1为45mA;当L2与L1紧耦合时,I1增加到110mA,此时负载电阻R5上的电压U2为6.5V的电压,折合功率为0.83W,U1实测电压为13V,电能传输效率为:
电路的输出功率基本能满足LED旋转显示屏的要求,对于小功率设备,电能传输效率应该说是相当不错了。
在无线供电电路的制作中,振荡电路可以采用任何一种形式的多谐振荡器,如三极管振荡电路、集成运放电路或者门电路构成的振荡电路,也可以采用74HC4060这种带振荡器的二进制异步计数器来实现,振荡频率在500kHz左右为宜。另外,比较重要的就是线圈的制作了,发射线圈用Φ0.5左右的电磁线(漆包线)在外径为1cm的骨架上绕48匝,然后固定好;接收线圈用Φ0.2左右的电磁线绕成内径为4mm左右的12匝空心线圈即可,关键是安装时不要使这两个线圈相碰。
最后,根据我的制作体会,给对此有兴趣的爱好者几点建议:
(1)L1匝数较多是为了有足够的感抗(感抗和电感量及交流频率有关),避免流过的电流过大而发热。其实L1也可以只绕10匝左右,但一定要配上大小合适的谐振电容,使其工作在谐振状态,这样可以获得更好的传输距离、输出功率和电能传输效率,包括L2的谐振电容也是如此。谐振电容的选择可以在示波器监视下进行,谐振电容可以用涤纶电容、聚乙烯电容等,建议不要用瓷介电容。
(2)传输能量时,波形不是很重要,但是失真太大就会使功率管工作在线性区,而非工作在开关状态,这样将使电能的传输效率大幅度下降。如果在功率管的前面增加一级射极跟随器,可以提高波形的质量,从而提高电能的传输效率。
(3)无线供电电路的工作频率不可太高,频率越高对VMOS管的要求也就越高,目前高频特性满足这种要求的VMOS管还不容易找到;频率越低,就要求L1的电感量越大。所以我们通常选择电路的工作频率在200kHz~1MHz为宜。
(4)L2感应的电压经整流、滤波后一定要有稳压电路,以保证单片机工作稳定。
如何保证显示信息稳定显示要保证LED旋转显示屏显示正常和稳定,就要求单片机控制显示屏总是从电路板转到某一位置时开始播放所要显示的内容。通常的做法就是通过传感器来检测电路板的位置,并通过中断的方式通知单片机进行显示。传感器可以使用霍尔元件或者光电传感器,其中光电传感器要求工艺简单,安装方便。
综上所述,本万年历的电路原理图如图7.4所示。
图7.4 LED旋转显示屏电路原理图
电路说明本电路采用无线感应供电方式给旋转部分供电,所以电路包括无线供电部分电路和旋转部分电路两部分。
无线供电部分采用图7.3所示电路。
旋转部分是由电动机带动,进行高速旋转,其电路非常简单,首先由接收端线圈产生感应电动势,经二极管VD19整流、电容C4滤波、稳压二极管VD20稳压后得到5V电源给整个电路供电,单片机的16个I/O口线分别控制16个发光二极管。为了方便修改程序,我在电路中安装了ISP下载接口。电动机可以选用5V长轴直流电机。
作为万年历,应该具备显示公历、农历、星期、时间以及环境温度的功能,并且在掉电的情况下,所有信息不丢失,时钟正常走时,这里我们使用时钟芯片DS1302和数字温度传感器DS18B20。
同时在电路中还增加了一体化红外遥控接收头,它用于通过遥控调整时间和其他参数。
需要说明的是,在电路中并没有具体标明单片机的型号,你可以选用最熟悉的单片机,只要I/O口够用就可以了,当然,在I/O口够用的情况下,尽量选用体积小、重量轻的单片机为佳。
另外,在无线供电电路板和旋转电路板之间安装一对红外光电传感器,将电路板的位置状态送到单片机的外部中断请求输入端,用以对显示内容进行定位。
电路组装与调试本系统电路不太复杂,两块电路都可以在万用电路板上插装、焊接(有条件的话也可制作PCB)而成。制作时首先按照原理图在万用电路板上规划出合理的元件布局,然后按布局图将元件依次插装并焊接,最后把需要连接的引脚用电磁线和镀锡裸铜线连接起来。注意不要短路,线路连接关系不要出错。图7.5所示是装配好的无线供电电路及底座实物图。
图7.5 装配好的无线供电电路及底座
安装时需要将直流电机和供电电路板固定在一个盒子里,使电机的转轴伸出盒外,将发射线圈套在电机转轴上,并以电机转轴为中心。图7.6所示是装配好的旋转主板正、反面的实物图,发光二极管和限流电阻均使用贴片元器件,这样会使得像素更紧凑,显示更清晰。
图7.6 装配好的旋转主板正反面
单片机使用STC12C5616AD,28脚窄体DIP封装。LED与单片机引脚的连接均用电磁线相连,这样走线整齐、美观,还能减小整个电路板的体积,其他引脚的连接使用镀锡裸铜线连接。接收线圈固定在旋转主板的底面,然后随旋转主板一起插到电机转轴上,使接收线圈套在发射线圈的内部,构成变压器的形式。全部安装好以后,需要插到电机轴上,测试一下电路板是否平衡,如果不平衡,可以通过在适当位置加焊锡进行配重。
电路装配好以后,需要对硬件电路进行调试,方法是通过ISP下载线接口对主板供电,依次测试每个发光二极管是否正常发光,或者通过下载器向单片机烧入流水灯等简单程序,观察电路整体运行情况。
Tips
DS1302是美国DALLAS公司推出的一款高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、星期、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器,具有主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。
DALLAS半导体公司的数字化温度传感器DS18B20采用TO-92封装,体积小巧、接线方便,是世界上第一片支持“一线总线”接口的温度传感器。测量温度范围为-55~+125℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,支持3~5.5V的电压范围,使系统设计更灵活、方便。DS18B20可以程序设定9~12位的分辨率,精度为±0.5℃。DS18B20的性能是新一代产品中最好的,性能价格比也非常出色,让我们可以构建适合自己的经济的测温系统。
程序设计本万年历的单片机程序流程图如图7.7所示。
图7.7 程序流程图
由程序流程图可知,主程序主要是对外部中断的控制寄存器进行初始化设置。系统共用到两个外部中断源,外部中断0的中断请求信号来自红外光电传感器的红外接收二极管。每当电路板的红外接收二极管转到与之对应的红外发射二极管的位置时,就会向CPU发出中断请求信号,CPU响应中断,调用显示子函数,这样显示子函数总是在电路板转到同一个位置时被调用,保证显示的内容正常和稳定。外部中断1的中断请求信号来自一体化红外遥控接收头,当收到红外遥控信号时,就会转向中断服务程序,对红外遥控信号进行解码,并进行相应的按键操作。因为当接收到红外遥控信号时,对遥控编码中的“0”和“1”的识别完全是靠时间长短区分的,为保证红外信号解码及时和正确,外部中断1必须设置为高优先级。
显示程序在外部中断0的中断服务程序中。编写程序时需要注意的是,在对字符或汉字取模时要采用逐列式,正序和倒序都是可以的,在程序中都可以调整。显示程序其实就是依次取出字模表中的数据,按时间前后顺序均输出到同一列发光二极管上。比如要显示5个汉字,每个汉字16列,共扫描80列,可用如下程序。
unsigned int i;
for (i=0;i<80;i++)
{
P1=tab[2*i];
P2=tab[2*i+1];
delay(70);//延时时间的长短决定了字的宽度
}
P1=0xff;//扫描完所有列后要熄灭所有LED
P2=0xff;
如果想让显示的字符出现如图1所示的效果,上半部是正立的,下半部也是正立的,我们可以编写一个字节倒序的子函数,对取出的字模数据首先作倒序处理,然后,显示程序的i值是从80减小到的,参考程序如下。
unsigned int i;
for (i=80;i)0;i--)
{
P2=chg(tab[2*i]);//chg是对字模数据作倒序处理的子函数
P1=chg(tab[2*i+1]);
delay(70);//延时时间的长短决定了字的宽度
}
P1=0xff;//扫描完所有列后要熄灭所有LED
P2=0xff;
数字温度传感器DS18B20和时钟芯片DS1302的读写程序在这里不再详细列出,需要的读者可以到qq群657864614进行下载。但需要注意的是,温度传感器DS18B20的读写对时序要求非常严格,并且读写过程中一旦被打断,就会导致读写错误,所以DS18B20的读写程序也放在外部中断0的中断服务程序中,我们可以放在显示上半部分文字和显示下半部文字的程序之间,作为两段文字之间的空格。
所有硬件和软件完成之后,下面就可以坐下来慢慢欣赏自己的作品了。
■我的淘宝店铺:首页-数码达人小李-淘宝网,主打电脑周边产品,性价比高,发货快,服务好,品质过硬,总有一款适合你,感谢支持!
免责声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件举报,一经查实,本站将立刻删除。