单片机万年历程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ATmega8单片机万年历C程序(内部RTC)

作者:jdzj868来源:机电之家下载站录入:jdzj868更新时间:2009-11-30 16:17:01点击数:0

【字体:

正文:

) 调整时间和日期,

只设置了四个按键

a, 复位按键;

b, 调整模态选择按键,切换调整不同参数;

c, 上调按键,调整模式下按此键被调整值上调;

d, 下调按键,调整模式下按此键被调整值下调.

这shi调整年份时de显示状态,LCD第二行末尾显示"yar".

依此类推,调整月份时显示"mth",调整日期时显示"day",小时时显示"hor",分钟时显示"min".

3) 软件部分.

程序中包含一个头文件"LCD1620.h",此文件中包含有关LCDde一些显示函数.

下面shi部分程序原代码---不知道怎么回事,今天网络速度比较慢,无法上传文件.如有需要可与我e-mail联系lhy_radio@.

/*******************************************************/

/* Project :Calendar */

/* Compiler :ICCAVR 6.31A */

/* Date :2008,5,31 */

/* Author :lhy */

/* Version :v1.3 */

/* Rework :lhy */

/* Rework Date :2008.6.26 */

/* */

/* Comments : */

/* 1,使用Atmega8内部RTC(实时时钟,32.768KHz) */

/* 2,显示使用LCD1620 */

/* 3,在Timer2中断中刷新显示,精度提高1S@5H */

/* 4,加入星期显示*/

/* 5,加入农历换算*/

/* 6,秒末位大于等于5时,显示公历:Solar 年月日*/

/* 7,SolarYear>2099或SolarYear<1900, */

/* 显示"Out of range!" */

/* 8,加入手动调整日期和时间*/

/*******************************************************/

#i nclude

#i nclude

#define DataPortPullup PORTD

#define DataPortDirection DDRD

#define ReadLCDPin PIND

#define CtrlPortPullup PORTC

#define CtrlPortDirection DDRC

#define RS_Bit PC0

#define RW_Bit PC1

#define E_Bit PC2

#i nclude "LCD1620.h"

#define ClkTcnt2 0x80

/****************变量声明********************/

unsigned int Year = 2008;//年变量

unsigned char Month = 6;//月变量

unsigned char Day = 1;

unsigned char Hour = 12;//小时

unsigned char Min = 0;//分钟

unsigned char Sec = 0;//秒

unsigned char YearBit1,YearBit2,YearBit3,YearBit4;

unsigned char MonthBit1,MonthBit2;

unsigned char DayBit1,DayBit2;

unsigned char HourBit1,HourBit2;

unsigned char MinBit1,MinBit2;

unsigned char SecBit1,SecBit2;

unsigned char Week[][4] = {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};

unsigned char ChangeSymbol[][5] = {"-Yar","-Mth","-Day","-Hor","-Min"};

unsigned char LeapYearWeekTable[] = {3,6,0,3,5,1,3,6,2,4,0,2};//闰年星期偏差表

unsigned char UnLeapWeekTable[] = {4,0,0,3,5,1,3,6,2,4,0,2};

unsigned char TodayWeek = 0;

unsigned char LeapYearBit = 0;//为0时,平年

unsigned char LunarData[] = {0,0,0,0};

unsigned char

LunarYear1,LunarYear2,LunarYear3,LunarYear4,LunarMonth1,LunARMonth2,LunarDay1,LunarDay2; unsigned char LunarConvertBit;//0,农历转换成功

unsigned char CalendarStopBit;//1,时钟暂停

unsigned char OldKeyNum = 0;

unsigned char NewKeyNum = 0;

unsigned char ModeSelect = 0;

unsigned char ChangeModeBit = 0;//ModeSelect != 0时,为1,标志现在处于更改时间状态unsigned char SecOddBit = 0;//秒为偶数时,此为0,否则为1

static unsigned char const LunarDayCode1[9]=

{0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};

相关文档
最新文档