基于51单片机的万年历设计 联系客服

发布时间 : 星期五 文章基于51单片机的万年历设计更新完毕开始阅读d8cf63f93968011ca20091cc

山东工商学院2015单片机实训报告

5.3时间数据模块设计

开始 DS1302初始化 从DS1302中读出数据,放入RAM 调用显示子程序

LCD显示时间

扫描按键 时间设置

数据写回DS1302保存 返回主显单 5.4闹钟设定模块设计

将所定时间写入存储器当前时间与所定时间是否相等Y响铃NY是否停止闹铃N继续响铃NY闹铃是否闹够10sY停止响铃

- 7 -

山东工商学院2015单片机实训报告

5.5阳历转阴历模块设计

程序入口根据公历年定位表的位置从表中取得春节公历日期计算出春节离元旦的天数记为N计算公历日离元旦的天数记为M公历日离春节的天数X=M-N公历日在春节后吗?YN农历年=公历年,取农历月信息农历月=1,闰月标志F0=0农历年=公历年减1,定位到前一年,取农历月信息农历月=12,闰月标志F0=0N农历月+1NF0取反YF0=1?F0取反YY取农历月天数Y 取农历月天数Y 农历月=闰月?农历月-1NY农历月=闰月?YF0=1?X>=Y?NX=X-YX>=Y?NYX=X-Y农历日=X+1农历日=Y-X+1农历年月日标准化子程序出口

- 8 -

山东工商学院2015单片机实训报告

5.6按键设置时间模块设计

- 9 -

山东工商学院2015单片机实训报告

六、程序源代

/****************************文件包含*************************************/ #include < reg52.h > #include < character.h > #include < lcd.h > #include < clock.h > #include < sensor.h> #include < calendar.h > #include < key.h >

/*****************************预定义**************************************/ #define uchar unsigned char #define uint unsigned int

/****************************************************************************/ sbit bell = P2 ^ 0; //定义蜂鸣器端口

/***************************************************************************** * 名称: Timer0_Service() inturrupt 1 * 功能: 中断服务程序 * 入口参数: * 出口参数:

*****************************************************************************/ void Timer0_Service() interrupt 1 {

static uchar count = 0;

static uchar flag = 0; //记录鸣叫的次数 count = 0;

TR0 = 0; //关闭Timer0 TH0 = 0x3c;

TL0 = 0XB0; //延时 50 ms TR0 = 1 ; //启动Timer0 count ++;

if( count == 20 ) //鸣叫 1 秒 {

bell = ~ bell; count = 0; flag ++; }

if( flag == 6 ) {

flag = 0;

TR0 = 0; //关闭Timer0 } }

/***************************************************************************** * 名称: Timer2_Servie() interrupt 5

- 10 -