单片机万年历程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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};