万年历星期的算法(C语言)

万年历星期的算法(C语言)
万年历星期的算法(C语言)

万年历星期的算法(C语言)

#include

code unsigned char WeekTab[] = { //闰年月星期表

(3 << 5) + 31,//1月

(6 << 5) + 29,//2月

(0 << 5) + 31,//3月

(3 << 5) + 30,//4月

(5 << 5) + 31,//5月

(1 << 5) + 30,//6月

(3 << 5) + 31,//7月

(6 << 5) + 31,//8月

(1 << 5) + 30,//9月

(4 << 5) + 31,//10月

(0 << 5) + 30,//11月

(2 << 5) + 31 //12月

};

/*------------2000年~2099年星期算法----------*/

unsigned char WeekDay20(unsigned char y, unsigned char m, unsigned char d) {

unsigned char week, day;

day = WeekTab[m - 1]; //月表

week = day >> 5; //月星期数

day &= 0x1f; //月天数

if ((m < 3) && (y & 0x03))

{ //平年

if (m == 2) day--; //平年月天数

week++; //平年月表+1

}

y = y + (y >> 2); //年+年/4

week = (week + y + d + 2) % 7; //(星期=年+年/4+月表+2日)%7 return (week << 5) | day; //返回星期和月天数

}

/*--------------0000年~9999年星期算法------------*/

unsigned char WeekDay(unsigned char c, unsigned char y, unsigned char m, unsigned char d)

{

unsigned char week, day;

c &= 0x03; //百年%4

c = c | (c << 2); //百年%4*5

day = WeekTab[m - 1]; //月表

week = day >> 5; //月星期数

day &= 0x1f; //月天数 if ((m < 3) && !((c == 0) | (y & ((y & 0x03) == 0)))) { //平年 if (m == 2) day--; //平年月天数 week++; //平年月表+1 }

y = y + (y >> 2); //年+年/4 week = (week + c + y + d + 2) % 7;

//(星期=百年%4*5+年+年/4+月表+日+2)%7 return (week << 5) | day; //返回星期和月天数

}

unsigned char BcdToBin(unsigned char val)

{

val = (val >> 4) * 10 + (val & 0x0f); //将BCD码转换为10进制数 return val; //返回10进制数

}

void main(void)

{

unsigned char c, y, m, d;

unsigned char cx, yx, mx, dx;

unsigned char WDay, Week, Day;

/*---------------------------------------------------------

0001年1月1日星期天

---------------------------------------------------------*/

c = 0x00;

y = 0x01;

m = 0x01;

d = 0x01;

cx = BcdToBin(c); //百年

yx = BcdToBin(y); //年

mx = BcdToBin(m); //月

dx = BcdToBin(d); //日

WDay = WeekDay(cx, yx, mx, dx); //取星期和月天数

Week = WDay >> 5; //得到星期

Day = WDay & 0x1f; //得到最大月天数

/*---------------------------------------------------------

1918年1月21日星期一

---------------------------------------------------------*/

c = 0x19;

y = 0x18;

m = 0x01;

d = 0x21;

cx = BcdToBin(c); //百年

yx = BcdToBin(y);/ /年

mx = BcdToBin(m); //月 dx = BcdToBin(d); //日 WDay = WeekDay(cx, yx, mx, dx); //取星期和月天数 Week = WDay >> 5; //得到星期 Day = WDay & 0x1f; //得到最大月天数/*--------------------------------------------------------- 9999年12月31日星期天

---------------------------------------------------------*/ c = 0x00;

y = 0x01;

m = 0x01;

d = 0x01;

cx = BcdToBin(c);//百年

yx = BcdToBin(y);//年

mx = BcdToBin(m);//月

dx = BcdToBin(d);//日

WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数

Week = WDay >> 5;//得到星期

Day = WDay & 0x1f;//得到最大月天数

/*--------------------------------------------------------- 2004年6月18日星期五

---------------------------------------------------------*/ c = 0x20;

y = 0x04;

m = 0x06;

d = 0x18;

cx = BcdToBin(c);//百年

yx = BcdToBin(y);//年

mx = BcdToBin(m);//月

dx = BcdToBin(d);//日

WDay = WeekDay20(yx, mx, dx);//取星期和月天数

Week = WDay >> 5;//得到星期

Day = WDay & 0x1f;//得到最大月天数

/*--------------------------------------------------------- 2018年3月8日星期四

---------------------------------------------------------*/ c = 0x20;

y = 0x18;

m = 0x03;

d = 0x08;

cx = BcdToBin(c);//百年

yx = BcdToBin(y);//年

mx = BcdToBin(m);//月

dx = BcdToBin(d);//日

WDay = WeekDay20(yx, mx, dx);//取星期和月天数 Week = WDay >> 5;//得到星期

Day = WDay & 0x1f;//得到最大月天数

while(1);

}

北极星数码万年历使用说明书

北极星数码万年历 北极星数码万年历使用说明书 操作说明 1、按键说明:设置键、上调键、下调键、流水开关键。 2、时间调整在正常走时状态下,按“设置”键进入时间设置状态,同时年份“闪烁”,可按“上调”或“下调”键修改年份,修改好后按“设置”键将闪烁位移到公历“月”,按“上调”或“下调”键修改月份;用同样的方法可对日、时、分进行设置;12个公历节日及倒计天数、24个农历节气及倒计天数、12生肖、12星座、星期、农历月、日将自动跟随公历的变化。当分设定好后,再按“设置”键退出时间设置,回到正常时间状态。 3、节气灯花样转换在正常走时状态下,按住“设置”键3秒钟即可进入节气灯花样转换。 4、12/24小时制切换在正常走时状态下,按住“上调”键3秒钟,则可进行12小时制与24小时制的切换。上电复位时,可默认为24小时制或12小时制,由选项决定。 5、开/关整点报时在正常走时状态下,按住“下调”键3秒钟听到“嘀”一声,则可以打开或关闭整点报时功能。 6、天数倒计时或顺计时(由选项决定)在正常时间状态下,按“模式”键进入“天数计时状态”,在温度位显示“d1”,计时天数位若显示“――――”,表示计时“无效”;若显示具体数字表示有效,按“上调”键可以切换“有效”/“无效”,按“设置”键进入天数设定,且左边第一位(千位)闪烁,按“上调”或“下调”键修改内容,按“设置”键移动闪烁位置到第二位(百位),按“上调”或“下调”键修改闪烁位的内容,同样方法可设置十位与个位 7、闹钟 8组定闹(由按键选项决定),默认值无效,默认时间为――:――点,闹钟设定:在正常时间状态下(或天数计时状态),按“下调”键进入“定闹查询状态”,定闹指示灯点亮,在温度位显示“A1”,表示当前你看到的是“第1组定闹”的信息,在小时、分钟位显示“――∶――”,表示定闹“无效”;显示“XX∶XX”的具体时间,表示定闹“有效”,按“上调”键可以切换“有效”/“无效”,按“设置”键进入定闹时间设定,且小时位闪烁,按“上调”或“下调”键修改闪烁位的内容,按“设置”键移动闪烁位置到分钟位,按“上调”或“下调”键修改闪烁位的内容,再按“设置”键确认并退出定闹时间设定,再按“下调”键进入下一组闹铃状态,其设置与“第1组定闹”相同,依次类推即可设置所有定闹。 8、生日提醒①7组生日提醒,默认值无效。②生日提醒设定:在最后一组定闹状态,再按一次“下调”键则进入第一组生日提醒,生日提醒指示灯点亮,在温度位显示“b1”,在公历“月日位”显示有效“生日日期”或无效日期“――――”,则表示生日以“公历日期”为准,若在农历“月日位”显示则表示生日以农历日期为准;按“上调”键可“打开/关闭”该组生日提醒,按“设置”键进入“该组生日提醒日期”设置,按“上调”或“下调”键修改其内容,按“设置”键移动闪烁位置,再按“设置”键确认该组生日提醒设置,再按“下调”键进入下一组生日提醒,依次类推即可设置所有生日提醒,当在最后一组生日提醒时,按“下调”键则退到正常时间状态若闹铃中没有一组设置有效,则定闹指示灯熄灭,在任何闹铃时间到正在响闹 北极星数码万年历使用说明书第1页共2页

电子万年历

河北科技师范学院课程设计说明书 题目: 学院(系): 年级专业: 学号: 学生姓名: 指导教师:

摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。 我选用的是单片机8052来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒及星期,温度等信息。 该电子万年历使用12MHZ晶振与单片机8052相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。所以在该设计与制作中我选用了单片机8052,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, 单片机8052的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。 因此,采用单片机8052原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。

电子万年历

Tianjin University of Technology and Education 课程设计 学院:电子工程学院 班级:应电1211班 学生姓名:马登桂(01) 张婵(20) 李春鹏(22) 指导教师:马宁梁彩凤 2015年7月

天津职业技术师范大学 应电专业课程设计任务书 电子工程学院应电1211 班学生: 课程设计课题: 一、课程设计工作日自 2015 年 7 月 6 日至 2015 年 7 月 24日 二、同组学生: 三、课程设计任务要求: 要求全班同学每3人一组自由分组,每组在下列题目中任选2题,完成电路设计仿真、硬件焊接以及软件的编程与调试(统一采用AT89系列单片机): 题目1:基于单片机的多功能计算器设计题目(显示设备采用1602液晶模块) 基本要求:以4×4键盘作为输入,通过软件设计实现加减乘除计算功能,并显示; 扩展功能:进一步实现乘方、开方、对数、阶乘等科学计算功能。 题目2:基于单片机的电子万年历设计(显示设备采用1602液晶模块) 基本要求:通过软件设计实现年月日时间显示及时间设定等功能; 扩展要求:进一步实现定时闹钟功能。 题目3:基于单片机的温度采集显示电路设计(显示设备采用4位数码管) 基本要求:实现用DS18B20采集温度,并实时显示; 扩展要求:进一步实现预设温度告警功能。 指导教师:梁彩凤、马宁

目录

1基于单片机的电子万年历设计 1.1设计任务 基本要求:通过软件设计实现年月日时间显示及时间设定等功能; 扩展要求:进一步实现定时闹钟功能。 1.2 设计方案 1.2.1总体方框图 图1.1总体方框图 1.2.2整体功能说明: 本论文一主要研究基于单片机的万年历设计。当程序执行后,LCD显示即时时间、年月日、星期、温度。设置3个操作键:K1:设置键;K2:上调键;K3:下调键。本设计的主要内容:1、了解单片机技术的发展现状,熟悉万年历各模块的工作原理;2、选择适当的芯片和元器件,确定系统电路,绘制电路原理图,尤其是各接口电路;3、熟悉单片机使用方法和C语言的编程规则,编写出相应模块的应用程序;4、分别在各自的模块中调试出对应的功能,在Proteus软件上进行仿真。 1.3电路设计与分析

万年历说明书

万年历说明书 2、定闹的设置:按“D”键,进入定闹的设置,月数码管位置显示定闹序号,序号闪烁,按“B”或“C”键,可选择定闹1~4中的某个设置;再按“D”键时闪烁,按“B”或“C”键其调整为设置值;再按“D”键分闪烁,按“B”或“C”键其调整为设置值;再按“D”键,在日数码管位置显示“on”或“--”的定闹状态并闪烁,,按“B”或“C”键,关闭或开启此定闹,再按“D”键,退出定闹的设置。注:4个定闹中只要有1个或1个以上的定闹状态设置为开启,定闹指示灯即亮,只有所有定闹的状态都为关闭时,定闹指示灯才灭。 3、整点闹铃的设置:在正常运行状态下,按一下“B”键,面板上的整点闹指示灯“亮”表示整点闹铃已开启,反之,灯“灭”为关闭。 数码万年历使用说明书 作者pupaishop浏览213发布时间11/09/24 1.按键阐明:报时/退出键、设置键、上调键、下调/定闹键、流水键、模式/定闹键(模式键只在选为倒计天或逆计天才有)。 2.时光调剂: ①反常走时状态下,按“设置”键进进时间设置状态,同时暮年份“闪

耀”,可按“上调”或“下调”键建改暮年份,修正佳先按“设置”键将闪烁位移到公历“月”,按“上调”或“下调”键建改月份;用同样的方式可对于日、时、分、秒入止设置;12个公历节日及正计地数、24个农历节气及正计天数、12生肖、12星座、礼拜、工历月、日将自静追随母历的变更。 ②该秒设定佳先,再按“设置”键退出时间设置,归到正常时间状态。 3.12/24小时制切换: 在反常走时状态,按住“上调”键3秒钟,则可进止12小时制取24小时造的切换。 下电单位时,否默以为24大时造或者12大时造,由选项决议。4.启/闭零面报时: 在正常走时状态,按一下“上调”键,则可以挨开整点报时指导灯和整点报时功能;按一下“上调”键,则可以关关整点报时指导灯战整点报时功能。 5.地数正计时或逆计时(由选项决议) 在正常时间状态下,按“模式”键进入“天数计时状态”,在温度位显示“d1”,计时天数位若显示“????”,表示计时“无效”;若显示详细数字表示有效,按“上调”键可以切换“有效”/“无效”,按“设置”键进入天数设定,且右边第一位(千位)闪烁,按“上调”或“下调”键修改内容,按“设置”键挪动闪烁位置到第两位(百位),按“上调”或“下调”键修改闪烁位的内容,同样方式可设置十位取个位。

数码万年历的使用说明

数码万年历的使用 操作说明 按键说明:设置键、上调键、下调/定闹键、流水键。 1、时间调整 正常走时状态下,按“设置”键进入时间设置状态,同时年份“闪烁”,可按“上调”或“下调”键修改年份,修改好后按“设置”键将闪烁位移到公历“月”,按“上调”或“下调”键修改月份;用同样的方法可对日、时、分、秒进行设置;当秒设定好后,再按“设置”键退出时间设置,回到正常时间状态。 2、12/24小时制切换: 在正常走时状态,按住“上调”键3秒钟,则可进行12小时制与24小时制的切换。上电复位时,可默认为24小时制或12小时制,由选项决定。 3、开/关整点报时: 在正常走时状态,按一下“上调”键,则可以打开整点报时指示灯和整点报时功能;按一下“上调”键,则可以关闭整点报时指示灯和整点报时功能。 闹钟8组定闹(由按键选项决定),默认值无效,默认时间为12:00点, 4、闹钟设定: 在正常时间状态下(或天数计时状态),按“定闹”键进入“定闹查询状态”,定闹指示灯点亮,在温度位显示“A1”,表示当前你看到的是“第1组定闹”的信息,在小时、分钟位显示“――∶――”,表示

定闹“无效”;显示“XX∶XX”的具体时间,表示定闹“有效”,按“上调”键可以切换“有效”/“无效”,按“设置”键进入定闹时间设定,且小时位闪烁,按“上调”或“下调”键修改闪烁位的内容,按“设置”键移动闪烁位置到分钟位,按“上调”或“下调”键修改闪烁位的内容,再按“设置”键确认并退出定闹时间设定,再按“定闹”键进入下一组闹铃状态,其设置与“第1组定闹”相同,依次类推即可设置所有定闹。 5、生日提醒: ①12组生日提醒,默认值无效,第1到6组默认日期为公历1月1日,第7到12组默认日期为农历1月1日。②生日提醒设定:在最后一组定闹状态,再按一次“定闹”键则进入第一组生日提醒,生日提醒指示灯点亮,在温度位显示“b1”,在公历“月日位”显示有效“生日日期”或无效日期“――――”,则表示生日以“公历日期”为准,若在农历“月日位”显示则表示生日以农历日期为准;按“上调”键可“打开/关闭”该组生日提醒,按“设置”键进入“该组生日提醒日期”设置,按“上调”或“下调”键修改其内容,按“设置”键移动闪烁位置,再按“设置”键确认该组生日提醒设置,再按“定闹”键进入下一组生日提醒,依次类推即可设置所有生日提醒,当在最后一组生日提醒时,按“定闹”键则退到正常时间状态若闹铃中没有一组设置有效,则定闹指示灯熄灭,在任何闹铃时间到正在响闹的状态下只要有键按下,都将关闭闹铃声.

数码万年历实用电路简析

数码万年历实用电路简析【19】 数码万年历采用智能电子控制和显示技木,集时间、日期、星期、温湿度和公历农历对照等功能於一体,具有读取方便、显示直观、功能多样价廉等优点,在日常生活中巳广泛应用。我家一台虹泰A129型LED数码万年历使用近十年,曾经出现过不能调校时间、数码管缺笔划、显示紊乱等故障,经过检修和重新调整都得到了排除,最近又出现了上电显示混乱故障,按“重设键”松键后不能恢复到出厂初始值,显示仍紊乱闪烁,多次反复调整试验都无法进入正常状态,於是误判为万年历智能芯片内部有故障,决定更换芯片,但因早期生产产品,在市场上配购不到同型芯片。几乎要放棄修理的情况下,决定测绘其电路图,以便为寻找代用的芯片提供原理依据,同时根据电路图可进一步分析故障原因,仔细检查元器件和线路,希望找到故障点。经过多次重复检查检测,成功不负有心人,终于查出是T2488SD3芯片直立封装印刷板上第二脚焊接的上拉电阻R42电容和C8虚焊所致,重新加焊后故障得到排除。析其故障原因是由于CPU引脚P2端受到外界电磁干扰,使CPU内部程序产生了错乱,从而出现显示混乱和死机。关于数码万年历常见故障的维修经验在《电子报》11期已有高手介绍。下面笔者仅将A129万年历电路构成整理出来,供读者维修参考。 虹泰A129型数字万年历电路主要由万年历专用芯片CPU T248SD3和外围元件组成,电路简洁,功能俱全,通常有: 1.公、农历自动对照(2001~2019卄年,也有五十年的); 2.农历星期自动对应,闰年、大、小月份自动调整; 3.温度自动显示(-9~50℃); 4.定时闹钟可在24小时内任意时刻设定8次,响闹时兼中文语音报时; 5.正点报时在7~21点整点时敲整点钟声,中文语音报时,再播放和弦音乐; 6.内置3V锂电池(CR2032),停电可保持时钟运行但无显示。正第工作时外接5VDC电源适配器; 7.亮度显示自动调节,即数码管显示亮度在晚上22点开始至早上7点降低亮度,使显示更柔和不刺眼。 电路结构如图①电原理图所示,图②为印剧板元件按装图,各部分电路构成说明如下: ⑴显示电路由于LED数码管价格适中,直观易懂,而且可采用动态扫描控制,软件实现比较容易。也就是将数码管的8个显示笔划(a、b、c、d、e、f、g、dp)的同名笔段连在一起,同时在每个数码管的公共端增设位选通控制电路(三极管VT2~VT9),控制数码管的通断,位选通可能则由CPU各自独立的I/O线控制,当CPU芯片输出字形码时,所有数码管都接收到相同的字形码,此时哪个数码管会显示出字形,取决于CPU对位选信号的控制,这种控制方式可以连接多个数码管,可以少占用与CPU I/O口的连线。缺点是如果运行时间和延时时间配合不当,会造成数码管闪烁。 在图①中可见,共阳数码管DS1~DS4显示公历年份,DS5、DS6和DS7、DS8分别显示月日;DS9~DS12显示小时和分钟;DS13~DS16显示农历月和日;DS17显示星期;DS18、DS19显示温度值。相关数码管的同笔段相联后经过限流电阻接到CPU相应的I/O口,各个数码管VT2~VT9的公共端接到PNP三极管8550的集电极,发射极接电源正端,三极管的基极经330Ω限流电阻与CPU的相应控制输出端I/O口相联,当接收动态扫描信号为低电平时,三极管导通,这时数码管定时发光显示出实时数字。 ⑵时钟电路芯片T2488SD3内部有一个用于构成振荡器的高增益反相放大器,引脚P5和P6分别是放大器的输入端和输出端,片外在其两端接上振荡频率为32678Hz晶体和电容

电子万年历

河南理工大学万方科 技学院 单片机实验设计 姓名:李浩 学号:0628040052 专业班级:06计算机科学与技术-1班 指导老师:苏百顺 2008年月日

摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。 我选用的是单片机8052来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒及星期,温度等信息。 该电子万年历使用12MHZ晶振与单片机8052相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。所以在该设计与制作中我选用了单片机8052,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, 单片机8052的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。 因此,采用单片机8052原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。

万年历说明书

湄洲湾职业技术学院 万年历说明书 系别:自动化工程系 年级:10级专业:电气自动化 姓名:小清学号:1001020254 导师姓名:佘明辉职称:副教授 2013年 5 月27日

目录 1.前言 (1) 2.系统设计参数要求 (2) 3.系统设计 (3) 3.1系统设计总体框图 (3) 3.2 各模块原理说明 (3) 3.2.1 AT89C51单片机最小系统模块 (3) 3.2.2 液晶显示模块 (4) 3.2.3 蜂鸣器模块 (5) 3.2.4 独立键盘模块 (5) 3.3 系统总原理图说明 (6) 3.4系统印刷电路板的制作图 (6) 3.5系统的操作说明 (6) 3.6 系统操作注意事项 (6) 参考文献 (7) 致谢词 (8) 附录 (9) 附录1:电路总原理图 (9) 附录2:印刷电路板 (10) 附录3:原件清单 (11)

1.前言 随着半导体技术的迅速发展,特别是大规模集成电路出现,给人类生活带来了很多的改变。尤其是单片机技术的应用产品已经随着社会前进的步伐走进我们的生活。电子产品的应用可谓多不胜数,电子万年历就是其中的一种。电子万年历的出现给人们的生活带来的极大的方便。 单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。 本设计是制作一个万年历,系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果。本系统硬件部分由AT89C51单片机、液晶显示器、DS18B20温度测量、键盘、蜂鸣器系统等部分构成。软件部分在keil环境下用C51语言编写,包括时间设置、时间显示、定时闹钟、温度显示。

电子万年历设计报告

电子万年历设计报告 Final revision by standardization team on December 10, 2020.

电子万年历设计报告专业电气工程及其自动化 班级电气(2)班 姓名马志欣 学号 小组第22组 指导教师王松林 电子万年历 概述 电子万年历是一种应用非常广泛的日常计时工具,数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日

常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。随着科学技术的快速发展,不断研究创新,对于电子万年历采用直观的数字显示,可以同时显示年,月,日,时,分,温度等信息,还具有时间校准等功能,该电路采用AT89C51单片机作为核心,电压可选用3-5V电压供电。 一、内容摘要 本设计利用数量较少的芯片制作了一个运用简单的电子万年历。以单片机作为本设计的核心,实现时钟日历的显示:用八段LED数码管分别显示年、月、日、星期、时、分、秒,用DS1302作为该设计的实时时钟芯片,用74LS164寄存器来驱动数码管的各段码,用三极管来驱动数码管的各位码。并且通过AT89C51单片机读取数字温度芯片的内部数据,进行处理后送到数码管显示其温度功能,通过按键实现调试功能。 二、设计要求 (1)设计电子万年历,实现时钟日历的显示,或显示年、月、日或时、分、秒,用 DS1302作为设计的实时时钟芯片。 (2)温度记录仪电路设计: 功能: 1、记录温度并保存,每10分钟记录一次温度数据。 2、可显示时间、温度数据

万年历功能说明文档

一、功能描述 1、上板复位后从元年1月1号开始计数,为方便上板调试,将一天的时间压缩为1秒; 2、按键用于设置日历,按下按键0进入设置状态,再次按下按键0退出设置状态; 3、按键1来选择想要设置的年月日的各个位; 4、按键2在设置状态进行计数设置,每按下一次数码管显示数字加1; 5、平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。 6、闰年:每400年整一闰,或每4年且不为百年的一闰。即能被400整除,或不能被100整除但能被4整除的年份为闰年。 二、平台效果图

3.仿真结果:选取3个日期检查 (1)1900年2月28日:该年不是闰年,故2月份只有28天 (2)2000年2月29日:该年是闰年,故2月份有29天 (3)2016年12月27日: 经验证,日期显示正确。 三、实现过程 首先根据所需要的功能,列出工程顶层的输入输出信号列表。 我们可以把工程划分成三个模块,分别是万年历计数模块、按键模块和数码管显示模块。 1.万年历计数模块 万年历计数模块实现的是万年历计数功能,为方便观看,将一天时间设置为一秒,日计数器dat_cnt、月份计数器mon_cnt_h、mon_cnt_1、mon_2_h、mon_2_1分别为大月小月以及平年闰年的2月计数器、年份计数器yea_one、yea_ten、yea_hun、yea_tho分别为年份的个十百千位,由yea_cnt_tol <= yea_cnt1000 + yea_cnt100 + yea_cnt10 + yea_one得到年份。本模块还自动计算当年是否是平闰年。 本模块信号列表如下:

多功能万年历组装与调试教学提纲

一、实训目的与要求: (1)、学会基本电子元器件的识别,熟悉一些常用电子器件的功能与作用。(2)、掌握液晶显示电子万年历的组成和工作原理,学会分析基本的电路原理图。(3)、学会利用电路原理图检查、处理电路故障、调试。 二、实训内容: (1)、掌握电烙铁的正确使用方法和基本的焊接技术,学会识别不同的元器件及其安装方法。 (2)、掌握液晶显示电子万年历的工作原理,学会识别电路原理图与印刷图、电容、电阻的识别与测试,进一步掌握和熟练焊接技术。 (3)、测试各元件的好坏,安装元件到电路板上,焊接断电并测试。 整机调试与验收。 三、软件和硬件设计: 3、1 软件调试平台 Keil for C51是美国Keil Software公司出品的C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,Keil C51软件还提供了丰富的库函数和功能强大的集成开发调试工具,生成的目标代码效率非常高,且容易理解。C51开发中除了必要的硬件外,同样离不开软件,我们写的源程序要变为C51可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,但现在已极少使用手工汇编。Keil提供了包括C编译器、宏汇编、连接线、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision2)将这些部分组合在一起。如图下图所示。

3、2 系统软件程序 (1)LCD1602液晶显示程序 #include sbit rs=P1^2; sbit rw=P1^1; sbit en=P1^0; sbit s1=P3^4; sbit s2=P3^5; sbit s3=P3^6; char miao,shi,fen; unsigned char code tab[]=" 2012-10-19 MON"; unsigned char code tab1[]=" 00:00:00"; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=0;y<150;y++); } void write_com(unsigned char cmd) { rs=0; rw=0; en=1; P2=cmd; en=0; delay(2);//当不检测忙标志信号时,每次至少需要2ms }

电子万年历说明书

电子万年历使用说明 功能介绍: 万年历显示信息分上下两部分,屏幕上半部分固定显示时间,下半部分轮流显示日期、星期、温度、农历日期以及24节气。信息轮流显示的时间间隔固定为5秒,不可调整。万年历配备两组闹钟。 万年历可以进行红绿双色显示,周一至周五使用红色进行显示,周六周日使用绿色进行显示。屏幕的亮度根据白天和黑夜进行调整,白天的时间定义为早晨6点至晚上8点,这段时间屏幕亮度高;另外的时间定义为黑夜,这段时间屏幕的亮度低。 系统供电电压为5v,电压波动区间为正负0.5v,供电电压过高可能损坏单片机,过低系统可能不会正常工作。系统有备用电池,在断电的情况下依然可以保证正确计时,保持时间视电池电量而定,通常短时间断电不会出现时间丢失的情况。系统24小时的误差不超过1秒。 设置说明: 控制板上设有五个按键,红色按键为系统复位键,如果屏幕显示异常(几乎没有),可以通过此按键对系统进行复位。另外四个按键用于进行系统设置,分别定义为“设置”、“参数加(+)”、“参数减(-)”、“下一参数(next)”。 第一次按下“设置”按钮进入时间调整状态。首先进入“时”调整状态,屏幕下半部分显示提示信息,上半部分对要调整的参数进行闪烁显示。根据目标时间分别用“参数加”和“参数减”按键进行调节。按next键依次进入分、秒、年、月、日的调整状态。星期不需要调整,系统根据当前日期自动进行换算。 第二次按下“设置”按钮进入“闹钟一”设置状态。屏幕会显示该组闹钟的开关状态,按“参数加”开启闹钟,按“参数减”关闭闹钟。按next进入闹钟时间设置,首先进入“时”设置状态,屏幕依然用闪烁进行提示。进入闹钟时间设置状态后,再按“参数加”或者“参数减”设置目标时间。再按next依次进入分、周一至周日七天的闹钟开关设定。在周一至周日七天的闹钟开关设定中,“参数加”为选中,显示“v”,“参数减”为不选,显示“x”。 第三次按下“设置”按钮进入“闹钟二”设置状态。设定同闹钟一的设定。 第四次按下“设置”按钮进入“时间制式”设置状态。屏幕显示当前的时间制式设定。该状态下未定义“参数加”和“参数减”的按键功能,按next进行12小时制式和24小时制式的切换。

数码管显示万年历时钟

数码管显示万年历时钟功能介绍 一、功能说明: 1.整体功能达到了市售电子日历效果,显示内容包括年、月、日、星期、时、分、秒、室温; 2.实时时钟芯片采用了两种:DS12C887+和DS1302。可供学习和使用过程中进行选择; 3.数码管控制采用了MAX7219专用扫描驱动芯片,可通过PS/2键盘对数码管的显示亮度进行15级调节; 4.电路板上留有PS/2键盘接口,用于调节当前时间、数码管显示亮度、闹铃时间。这一点和变通电子日历用明显区别,以达到一个有点专业的电子钟的要求; 5.电路板上安装有继电器,可作为简单的时间控制(定时控制)或温度控制装置; 二、待改进之处: 1.可在板上合适的位置增加几个独立按键,日常使用调节更方便些; 2.显示内容可增加农历和湿度; 3.可以用光敏电阻配合串行A/D转换芯片实现显示亮度的自动调节,以适应环境光线的变化,这样子就更加具有专业性了。 三、PS/2键盘调整说明: 1.使用PS2键盘F1进入运行时间设定、F2进入数码管显示亮度设定、F3进入闹铃时间设定、F4启动闹铃、F5关闭闹铃2.按下F1然后依次设定年、月、日、星期、时、分、秒时间信息,中途可以按小键盘区的ENTER键,退出设定状态 3.按下F2然后选择小键盘区0-9和字符A-F可设定16级显示亮度,按下选择参数自动恢复走时状态 4.按下F3然后依次设定时、分、秒三个闹铃时间参数,设定好任一参数可按小键盘区的ENTER键退出设定状态 5.按下F4开启闹铃,继电器吸合其下方工作指示LED点亮,按下F5关闭闹铃,继电器释放同时LED熄灭,如蜂鸣器已经开始闹铃,可按F6或复位键 6.按下F1或F2或F3但不想设定任何参数,都可按ESC退出相应的设定状态

相关文档
最新文档