电子万年历

电子万年历
电子万年历

《单片机技术及其应用》课程设计报告

专业:电子信息工程

班级: 10301

姓名:

指导教师:

2013年7月7日

目录

1 课程设计目的 (1)

2 课程设计简述及要求 (1)

3 总体设计方案 (1)

4 设计原理分析 (4)

5 流程图与软件设计 (9)

6 整体电路与仿真结果分析 (11)

7 结论与心得 (11)

参考书目 (12)

基于单片机的电子万年历的设计

1 课程设计目的

设计一个带有年月日时分秒及星期的电子万年历。要求用protues画出系统的电路理论图给出程序流程图,通过仿真制作万年历的硬件电路系统并给出程序以及元器件清单。

2 课程设计简述及要求

2.1 设计概述

万年历,就是记录一定时间范围内(比如100年或更多)的具体阳历与阴历的日期的年历,方便有需要的人查询使用。万年只是一种象征,表示时间跨度大。这次设计通过对万年历系统的设计,详细介绍了51 单片机应用中的按键处理、数码管显示原理、动态和静态显示原理、定时中断、A/D转换等原理。该系统能够显示年、月、日、小时、分钟、秒、星期、农历,通过按键可以修改时间。此系统结构简单、功能齐全,具有一定的推广价值。

2.2 设计要求

设计的核心主要包括硬件设计和软件编程两个方面。硬件电路设计主要包括中央处理单元电路、时钟电路、执行电路等几部分。软件用汇编语言来实现,主要包括主程序、键盘扫描子程序、时间设置子程序等软件模块。

3 总体设计方案

3.1 设计思路

方案1:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用AT89C52单片机为控制中心,显示模块采用普通的共阴LED数码管,键输入采用中断实现功能调整,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。

方案2:系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,电源电路、复位电路、晶振电路等模块。主控模块采用AT89C52单片机,按键模块用四个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对时间、日期的操作。

3.2 设计过程

两个方案工作原理大致相同,只有显示模块和时钟电路不同。LED数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602液晶显示屏,显示功能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对LED数码管来说要昂贵些,但是基于本设计显示的东西较多,若采用LED数码管的话,所需数码管较多,而且不利于控制,因此选择LCD1602作为显示模块。DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并具有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。单片机有定时器的功能,但时间误差较大,且需要编写时钟程序,因此采用DS1302作为时钟电路。

对比以上方案,结合设计技术指标与要求我们选择了方案2进行设计。

3.3 逻辑总框图

图3-1逻辑总框图

4 设计原理分析

4.1 主控制系统

单片机中央处理系统的方案设计,选用AT89C52单片机作为中央处理器,如图4-1所示。该单片机除了拥有MCS-51系列单片机的所有优点外,内部还具有8K的在系统可编程FLASH存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗,还包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。整个系统结构紧凑,抗干扰能力强,性价比高。

图4-1 主控芯片

4.2 时钟振荡电路

时钟振荡电路图4-2所示,时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。电路中两个电容C1、C2的作用使电路快速起振,提高电路的运行速度。

图4-2时钟振荡电路图4-3 内部震荡电路

4.3 复位电路

复位电路由电阻和极性电容组成,通过高电平使单片机复位,在时钟电路开始工作后,当高电平的时间超过大约2us时,即可实现复位。此复位电路为上电复位,较为简单。若改进可以添加手动复位的功能,上电复位发生在开机加电时,由系统自动完成,手动复位通过一个按键来实现,在程序运行时,若遇到死机,死循环或程序“跑飞”等情况,通过手动复位就可以实现重新启动的操作。手动

按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST 端和正电源vcc之间接一个按钮和一个电阻。

4.4 DS1302时钟电路

时钟电路主要由时钟芯片DS1302、备用电池、晶振等几部分组成,如图4-5所示。DS1302采用3线串行接口,占用引脚少,内部集成了可编程日历时钟,用户可以根据需要通过单片机的控制来自行设置,支持双电源供电,可以使用外部主电源和备用电源,备份电源能够使时钟芯片继续工作。

图4-4 ds1302图4-5 ds1302

DS1302各引脚的功能为:

8: Vcc1:备用电池端;

1: Vcc2:5V电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电;

7: SCLK:串行时钟,输入;

6: I/O:数据输入输出口;

5: CE/RST:复位脚;

2、3: X1、X2 是外接晶振脚(32.768KHZ的晶振);

4: 地(GND)。

DS1302有关日历、时间的寄存器:

表4-1 关于日历时间的寄存器

读寄存器写寄存器BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 范围81h 80h CH 10秒秒00-59 83h 82h 10分分00-59

85h 84h 12/0

10

时时1-12/0-23 AM/PM

87h 86h 0 0 10日日1-31

89h 88h 0 0 0 10月月1-12

8Bh 8Ah 0 0 0 0 0 周日1-7

8Dh 8Ch 10年年00-99

8Fh 8Eh WP 0 0 0 0 0 0 0 —相关参数:

1、秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当初始上电时

该位置为1,时钟振荡器停止,DS1302处于低功耗状态;只有将秒寄器的该位置改写为0时,时钟才能开始运行。

2、小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式

还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时,位5是第二个10小时位

3、控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。

在对任何的时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作。

DS1302读写时序

DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。DS1302的控制字如表4-2:

表4-2 控制字

7 6 5 4 3 2 1 0

1

RAM

A4 A3 A2 A1 A0

RD 制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入

到DS1302中。

位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;

位5至位1(A4~A0):指示操作单元的地址;

位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。读数据:

读数据时在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据是从最低位到最高位。

写数据:

控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入也是从最低位(0位)开始。

4.5 按键电路

按键电路由四个轻触开关组成,如图4-7所示。按键用来调整时间,其一端直接接到单片机的端口,另一端接地,当按下按键时,相应的端口变为低电平,通过一个与门只要这四个按键有一个按下就会在P3.2检测到一低电平就触发外部中断0进入按键调节程序中,通过与个各键相连的端口P3.4_P3.7可以判断是哪个键按下,从而作相应的操作。

图4-7 按键电路

4.6 显示电路

1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。显示电路采用LCD1602液晶显示,如图4-8所示,图中只画出了其相应的接口,3脚用于调节LCD1602的背光,4、5、6为LCD1602

的控制口,用于控制其写入或是读出指令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。

图4-8 显示电路

LCD1602的特性:

+5V电压,对比度可调;

内含复位电路;

提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;

有80字节显示数据存储器DDRAM;

内建有160个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM;

基本操作时序:

读状态:输入:RS=L,RW=H,E=H;输出:DB0~DB7=状态字;

写指令:输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码;输出:无。读数据:输入:RS=H,RW=H,E=H;输出:DB0~DB7=数据;

写数据:输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据;输出:无。

5 流程图与软件设计

5.1 软件流程图

图5-1 软件流程图

按键的检测是通过中断的办法来实现,利用按键进行间调整。 K1按下则开始设置时间及日期,同时在第一行最右端显示被选择的对象,第一次按下K1时,设置年份,若按下K3,则是减1操作,按下K2是加1操作,设置好年后,第二次按下K1时,则是设置月份,按K3减,按K2则加1,依次循环下去,则可以将时间和日期设置完毕,K4是确定键,设置好按下即可保存设置了。

5.2 软件设计

软件总设计:主程序首先对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA,并对键盘端口置位,再对LCD1602初始化,DS1302初始化。接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,最下面是时间的显示。

软件程序编写:软件程序编写的好坏直接影响着系统运行情况的良好。因本程序涉及的模块较多,所以程序编写也采用模块化设计,C语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用C51编写。程序代码见附录。

5.3 软件调试

在软件调试过程中,当调节时间和日期后,单片机上电后更新的是PC的时间,后来查找资料发现,是设置ds1302的问题

对于开发板上的液晶一般RW都接的地,故不需要读液晶状态,也不需要读忙,但在仿真中还是加上了这一部分。还有一个问题,在按键操作时有时会出现功能不稳定,这是由于按键存在抖动,所以后来加个去抖动的延时后在判断,基本就可以解决问题。

6 整体电路与仿真结果分析

电子万年历硬件电路图及仿真如图6-1所示,系统由AT89C52单片机,按键扫描电路、显示电路、时钟电路、晶振电路、复位电路及电源指示电路。

仿真正确显示了时间,在LCD1602中正确显示了当前日期、时间,通过按按键K1,就可以开始设置时间,依次按K1依次在年、月、日、时、分之间切换,按K2键用于加1操作,K3键用于减1操作,K4是确定按钮。仿真正确显示了时间和日期,符合设计的要求。

图6-1 仿真结果

7 结论与心得

通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好

地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。这个设计过程中,我们通过在原有的计数器系统进行了改进,使之增添了暂停、计数、清零等的三个控制功能,使之成为一个更加适用,功能更加完备的属于自己的一个系统。虽然这次课程设计中遇到不少问题,但是最终还是比较顺利的完成了设计要求,但是美中不足的是液晶显示的那个模块还存在问题,对于液晶显示的灰度调节还是存在问题,对于通过调节滑动变阻器来实现对液晶LCD1602的灰度控制目前还存在问题。还有就是关于液晶LCD1602的安装也出现问题,出现安装安反。经过这次课程设计,让我学习到关于液晶LCD的相关知识,还有就是关于时钟芯片DS1302的原理及其运用。

参考书目

[1] 张毅坤陈善久,单片微型计算机原理及应用,西安电子科技大学出版社

[2] 张毅刚,彭喜元,单片机原理与应用设计,电子工业出版社

[3] 赵建领,薛园园,零基础学单片机C语言程序设计,机械工业出版社

[4] 周向红,51单片机课程设计,华中科技大学出版社

[5] 郭天祥,51单片机C语言教程-入门,提高,开发,拓展全攻略, 电子工业出版社

附录:源程序

#include

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit IO= P1^0; //DS1302数据线

sbit SCLK = P1^1; //DS130时钟线

sbit RST = P1^2; //DS1302复位线

sbit RS = P2^0; //LCD数据/命令选择端

sbit RW = P2^1; //LCD读/写控制

sbit EN = P2^2; //LCD使能端

sbit K1=P3^4; //选择

sbit K2=P3^5; //加

sbit K3=P3^6; //减

sbit K4=P3^7; //确定

uchar tCount=0;

uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};

uchar *WEEK[]={"SUN","MON","TUS","WEN","THU","FRI","SAT"};

uchar LCD_DSY_BUFFER1[]={"DATE 00-00-00 "}; //显示格式

uchar LCD_DSY_BUFFER2[]={"TIME 00:00:00 "};

uchar DateTime[7]; //所读取的日期时间

char Adjust_Index=-1; //当前调节的时间对象:,,分,是,日,月,年(1,2,3,4,6)

uchar Change_Flag[]= "-MHDM-Y"; //(分,时,日,月,年)(不调节秒与周)

/*---------延时程序------------------*/

void DelayMS(uint ms)

{

u char i;

while(ms--){for(i=0;i<120;i++);}}

//-----------向DS1302写入一字节------------------// void Write_A_Byte_TO_DS1302(uchar x)

{ u char i;

for(i=0;i<8;i++){

IO=x&0x01; //每一位与1与存入IO中

SCLK=1;SCLK=0; //一个高脉冲将数据送入液晶控制器

x>>=1; // 右移

}}

//-----------从DS1302读取一字节------------------// uchar Get_A_Byte_FROM_DS1302()

{ u char i,b=0x00;

for(i=0;i<8;i++){

b |= _crol_((uchar)IO,i);

SCLK=1;SCLK=0; //每一个高脉冲读取一位数据 }

return b/16*10+b%16; //返回BCD码

}

//-----------从DS1302指定位置读数据------------------// uchar Read_Data(uchar addr)

{

u char dat;

RST = 0;SCLK=0;RST=1; //RST高电平时读/写

Write_A_Byte_TO_DS1302(addr); //先写入地址

dat = Get_A_Byte_FROM_DS1302();

SCLK=1;RST=0;

return dat;

}

//---------向DS1302某地址写入数据--------------------//

void Write_DS1302(uchar addr,uchar dat)

{ S CLK=0;RST=1;

Write_A_Byte_TO_DS1302(addr);

Write_A_Byte_TO_DS1302(dat);

SCLK=0;RST=0; //高脉冲写入数据

}

//--------------设置时间----------------//

void SET_DS1302()

{ u char i;

//写控制字,取消写保护

Write_DS1302(0x8E,0x00);

//分时日月年依次写入

for(i=1;i<7;i++)

{ //分的起始地址10000010(0x82),后面依次是时,日,月,周,年,写入地址每次递增2

Write_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i]%10));

}

Write_DS1302(0x8E,0x80); //加保护

}

//----------读取当前日期时间------------//

void GetTime()

{uchar i;

for(i=0;i<7;i++){ DateTime[i]=Read_Data(0X81+2*i);}

}

//-----------读LCD状态------------------//

uchar Read_LCD_State()

{ u char state;

RS=0;RW=1;EN=1; //输出:D0~D7=状态字

DelayMS(1);

state=P0; //从P0口读LCD状态

EN = 0;DelayMS(1);

return state;

}

//-----------忙等待------------------//

void LCD_Busy_Wait()

{

w hile((Read_LCD_State()&0x80)==0x80);

DelayMS(5);

}

//-----------向LCD写数据------------------//

void Write_LCD_Data(uchar dat)

{

L CD_Busy_Wait();

RS=1;EN=0;RW=0; //写数据,EN为高脉冲,

P0=dat;EN=1;DelayMS(1);EN=0;

}

//-------------写LCD指令-------------------//

void Write_LCD_Command(uchar cmd)

{

L CD_Busy_Wait();

RS=0;EN=0; RW=0; //写指令,EN高脉冲,输出:D0~D7=数据 P0=cmd;EN=1;DelayMS(1);EN=0;

}

//-------------LCD初始化-------------------//

void Init_LCD()

{

W rite_LCD_Command(0x38); //设置16*2显示,5*7点阵,8位数据接口

DelayMS(1);

Write_LCD_Command(0x01); //显示清零,数据指针清零

DelayMS(1);

Write_LCD_Command(0x06); //写一个字符后地址指针自动加1

DelayMS(1);

Write_LCD_Command(0x0c); //设置开显示,不显示光标

DelayMS(1); }

//------------------------------------------

//设置液晶显示位置

//------------------------------------------

void Set_LCD_POS(uchar p){

Write_LCD_Command(p|0x80);//相当于在0x80基础上加入位置量

}

//----在LCD上显示字符串---------//

void Display_LCD_String(uchar p,uchar *s)

{ uchar i;

Set_LCD_POS(p);

for(i=0;i<16;i++)

{

Write_LCD_Data(s[i]); //在固定位置显示时间日期

DelayMS(1);

}

}

//---------日期与时间值转换为数字字符----------------//

void Format_DateTime(uchar d,uchar *a)

{

a[0]=d/10+'0';

a[1]=d%10+'0';

}

//判断是否为闰年

uchar isLeapYear(uint y)

{ r eturn (y%4==0&&y%100!=0)||(y%400==0);}

//求自2000.1.1开始的任何一天是星期几

//函数没有通过,求出总天数后再求星期几

//因为求总天数可能会超出uint的范围

void RefreshWeekDay()

{ u int i,d,w=5; //已知1999.12.31是周五

for(i=2000;i<2000+DateTime[6];i++)

{

d=isLeapYear(i)?366:365;

w=(w+d)%7;

}

d=0;

for(i=1;i

{ d+=MonthsDays[i]; }

d+=DateTime[3];

//保存星期,0~6表示星期日,星期一,二,...,六,为了与DS1302的星期格式匹配,返回值需要加1

DateTime[5]=(w+d)%7+1;

}

//*****年月日时分++/--********//

void DateTime_Adjust(char x)

{ switch(Adjust_Index)

{

case 6: //年00-99

if(x==1&&DateTime[6]<99) DateTime[6]++;

if(x==-1&&DateTime[6]>0) DateTime[6]--;

//获取2月天数

MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28;

//如果年份变化后当前月份的天数大于上限则设为上限

if(DateTime[3]>MonthsDays[DateTime[4]])

{ DateTime[3]=MonthsDays[DateTime[4]];}

RefreshWeekDay(); //刷新星期

break;

case 4: //月01-12

if(x==1&&DateTime[4]<12) DateTime[4]++;

if(x==-1&&DateTime[4]>1) DateTime[4]--;

MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28;

if(DateTime[3]>MonthsDays[DateTime[4]])

{ DateTime[3]=MonthsDays[DateTime[4]];}

RefreshWeekDay();

break;

case 3: //日00-28、29、30、31,调节之前首先根据年份得出该年中断二月天数

MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28;

//根据当前月份决定调节日期的上限

if(x==1&&DateTime[3]

if(x==-1&&DateTime[3]>0) DateTime[3]--;

RefreshWeekDay();

break;

case 2: //时

if(x==1&&DateTime[2]<23) DateTime[2]++;

if(x==-1&&DateTime[2]>0) DateTime[2]--;

break;

case 1: //分

if(x==1&&DateTime[1]<59) DateTime[1]++;

if(x==-1&&DateTime[1]>0) DateTime[1]--;

break;

}

}

//---定时器0每秒刷新LCD显示----//

void T0_INT() interrupt 1

{

TH0=-50000/256;

TL0=-50000%256;

if(++tCount !=2) return;

tCount=0;

//按指定格式生成待显示的日期时间串

Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5); Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8); Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11); //星期

strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]-1]); //时分秒

Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5); Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8); Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11); //显示年月日,星期,时分秒

Display_LCD_String(0x00,LCD_DSY_BUFFER1);

Display_LCD_String(0x40,LCD_DSY_BUFFER2);

}

//----------键盘中断(INT0)-------------//

void EX_INT0() interrupt 0

万年历系统设计方案和对策

电子万年历系统设计 The design of Electronic calendar system 专业:电子信息科学与技术 学号: 姓名:

电子万年历系统设计 摘要:近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,并且给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。虽然在日常生活中,各种信息处理终端如电脑、手机等给我们提供了准确的时间信息。但是在大多数场合却仅仅局限于个人的适用范围之内。在家居生活中,一款悬挂余居室墙壁上大方得体的电子钟不仅能为我们提供准确的时间显示,而且魅惑了环境,给单调的居室带来了现代化的气息,因而成为许多家庭的必备之选。 本文设计了一种基于八位串行输入-并行输出移位寄存器74HC164芯片,以STC89C52单片机为核心、数码显示的电子万年历,主要介绍了时钟芯片、温度传感器、仿真模块,以及万年历硬件和软件的设计,实现了准确显示,公历年、月、日、农历月、日、时、分、秒功能。 关键字:单片机;时钟芯片;温度传感器;仿真

The Design of Electronic Calendar System Abtract:In recent years, with computer penetration in the social sphere and the development of large-scale integrated circuits, MCU applications are constantly deepening, as it has a function of strong, small size, low power consumption, cheap, reliable, easy to use , And other characteristics, and therefore particularly suited to control the system and to human life brought about fundamental changes. SCM is by the application of technology products have entered the tens of thousands of households. The emergence of electronic calendar to the lives of people of many convenience. While in everyday life, dealing with all kinds of information terminals such as computers, mobile phones has provided us with accurate time information. However, in most occasions is limited to individuals within the scope of the application. In home life, hoisted more than a generous living room walls of the appropriate electronic bell can not only provide us with accurate time, and tantalized by the environment, bring to the monotonous room a modern flavor, so many families must Of the election. In this paper, a design based on eight serial input - output parallel shift register 74 HC164 chip to STC89C52 microcontroller as the core, digital display electronic calendar, mainly on the clock chip temperature sensor, simulation modules, hardware and calendar And software design, to achieve an accurate, the calendar year, month, day and the Lunar month, day, hours, minutes and seconds functions.

电子万年历设计

课程论文论文题目基于单片机的电子万年历设计 课程名称单片机原理及接口技术 专业年级 2014级自动化3班 学生姓名孙宏远贾腾飞 学号 2016年12 月3 日

摘要: 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。。 关键词:AT89C51单片机,DS1602时钟芯片,LCD1602显示屏。串口通信。 一:引言 本设计的基于单片机控制的电子万年历,具有年、月、日、星期、时、分、秒的显示等功能,实现过程就是由主控制发送信息给DS1302时钟芯片再由时钟芯片反馈给单片机,再由主控制器传送给LCD1602显示屏显示信息。并且可以在键盘设置模块输入修改时间,当键盘设置时间、日期时,单片机主控制根据输入信息,通过串口通信传送给DS1302时钟芯片,DS1302芯片读取当前新信息产生反馈传送给单片机,然后单片机根据控制最后输送显示信息到LCD1602液晶显示屏模块上显示。 二:硬件设计: 2.0.硬件的设计总框图 2.1 DS1032时钟电路 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。芯片如图。 DS1302的内部主要由移位寄存器、指令和控制逻辑、振荡分频电路、实时时钟以及RAM组成。每次操作时,必须首先把CE置为高电平。再把提供地址和命令信息的8位装入移位寄存器。数据在SCLK的上升沿串行输入。无论是读周期还是写周期发生,也无论传送方式是单字节还是多字节,开始8位将指定内部何处被进行访问。在开始 8个时钟周期把含有地址信息的命令字装入移位寄存器之后。紧随其后的时钟在读操作时输出数据。 2.2 LCD1602与AT89C52的引脚接线 LCD1602采用总线式与单片机相连,AT89c52的P1口直接与液晶模块的数据总线D0~D7相连;P2 口的0,1,2脚分别与液晶模块的RS、RW、E脚相连。滑动变阻器用于调整液晶显示的亮度。电路如图

电子万年历设计

摘要:随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活中。日历是人们不可或缺的日常用品。但一般日历都为纸制用品,使用不便,寿命不长。电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和24C02FLASH存储器,完成时间的自动调整和掉电保护,全部信息用液晶显示。时间、日期调整由三个按键来实现,并可对闹铃开关进行设置。日历能显示阳历和阴历年、月、日以及星期、时、分、秒。在显示阴历月份时,能标明是否闰月。关键词:电子万年历 52系列单片机时钟芯片FLASH存储器液晶显示 The Design of Electronic Calendar Abstract: With the rapid development of world economy and the forthcoming of information era, many kinds of mini-type intelligent domestic electric appliances appear in our life one after another. Calendars are necessary daily goods in people’s life. But they are generally paper goods with inconvenient use and short life. Electronic calendar adopts the technology of intelligent electronic control and display, and then improves the deficiency of paper calendars. The design adopts the core of AT89S52 single chip microcomputer, which constitutes controlling circuit, and integrates DS1302 clock chip and 24C02FLASH memory, which achieve self-adjusting of time and no power protecting. LCD displays all information. Time and date adjusting is carried out by three keys, which can also set the alarm clock. The calendar can display solar and lunar year, month, day, week, hour, minute, second. When displaying lunar months, leap month is showed. Keywords: electronic calendar 52 series single chip microcomputer clock chip flash memory LCD 1

单片机AT89c52电子万年历设计(带程序)

目录 一、摘要 (2) 二、设计 (3) 三、设计任务. (2) 四、设计要求 (3) 五、系统方案设计 (3) 1、系统 (3) 1)原理构成框图 (3) 2)设计思路 (4) 2、主程序设计 (4) 3、中断程序设计 (5) 5、时间调整电路的设计 (7) 六、系统评价 (7) 七、c语言程序注释及说明 (8)

一、摘要 单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。本设计是基于AVR单片机强大的控制功能制作而成的电子万年历,该电子万年历包括四大功能:实时显示年、月、日、时、分、秒、星期;人为的校正年、月、日、时、分、星期;第一次开机显示12-00-30。 二、设计目的 1、掌握C52程序用于实践并实现相应的功能; 2、掌握时钟程序的使用方法; 3、掌握时间函数的使用方法; 4、掌握键盘的程序使用方法; 三、设计任务 通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,

七个按钮连接P0口可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。 四、设计要求 (1)能够准确的计时,时间可在数码管上显示出来,默认显示为时、分、秒,每隔一分钟自动显示年、月、日及星期,也可通过按键控制显示,并可通过按键调节时间。 (2)第一次开机显示12-30-30。 (3)每半秒led彩灯闪烁一次 五、系统方案设计: 1、系统总体设计: 1) 原理构成框图 本设计用AT89C52作为核心控制部分,外接晶振电路与复位电路,以两个四位数码管作为显示部分,开关控制显示时间与日期,具体框图如图1所示,数码管框图如图2所示:

电子万年历

单片机课程设计报告 电子万年历设计 姓名: 学号: 专业班级: 指导老师: 所在学院:

摘要 本设计是电子万年历。具备三个功能:能显示: (1)显示年月日时分秒及星期信息 (2)具有可调整日期和时间功能 (3)与即时时间同步 我选用的是单片机AT89C52来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒及星期,温度等信息。 该电子万年历使用12MHZ晶振与单片机AT89C52相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性。所以在该设计与制作中我选用了单片机本电路是由AT89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。 因此,采用单片机原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。

电子万年历的设计与实现

毕业设计(论文)任务书 题目:电子万年历的设计与实现 任务与要求: 设计一以单片机为核心控制的万年历,具有多项显示和控制功能。要求:准确计 时,以数字形式显示当前年月日、星期、时间; 具有年月日、星期、时间的设置和调整功能;自行设计所需直流电源 时间: 2010年9 月 27 日至 2010 年 11 月 23 日共 8 周 所属系部:电子工程系

摘要 随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。 而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。所以,电子万年历无论作为比赛题目还是练习题目都是很有价值。 关键词:单片机;万年历 1

目录 1 概述 (5) 1.1单片机原理及应用简介 (5) 1.2系统硬件设计 (6) 1.3结构原理与比较.............................. 错误!未定义书签。2系统总体方案及硬件设计......................... 错误!未定义书签。 2.1系统总体方案................................ 错误!未定义书签。 2.2硬件电路的总体框图设计 (12) 2.3硬件电路原理图设计 (12) 3软件设计 (13) 3.1主程序流程图 (13) 3.2显示模块流程图 (14) 4P ROTEUS软件仿真 (15) 4.1仿真过程 (15) 4.2仿真结果 (16) 5课程设计体会 (17) 参考文献 (18) 附录:源程序代码附 (18) 结束语 (25) 2

电子万年历

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

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

单片机电子万年历含程序

CHANGZHOU INSTITUTE OF TECHNOLOGY 科研实践 项目名称:电子万年历设计 二级学院:电子信息与电气工程学院 专业:电气工程及其自动化班级: 10 电二 学生姓名:祝学东学号: 指导教师:庄志红职称:副教授 起止时间: 2013年12月9日—2013年12月20日 摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒、星期,并具有可调整日期和时间功能。 该电子万年历使用12MHZ晶振与单片机AT89C52相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

电子万年历设计(基于AT89C51单片机和DS1302时钟芯片)1

随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。 二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步…… 我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子万年历的设计,使其更加的具有市场。 本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。 除了采用集成化的时钟芯片外,还有采用MCU的方案,利用AT89系列单片微机制成万年历电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。AT89C51是由ATMEL 公司推出的一种小型单片机。95年出现在中国市场。其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受。 本文介绍了基于AT89C51单片机设计的电子万年历。 首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优

电子万年历

第一章绪论 1.1设计背景 从改革开放开始,电子工业已成为科技创新的重要领域,我国的电子产业也在新世纪开始高速发展,无论是产业结构,产业规模和技术水平都有了十分明显的进步和提升,而且电子产品在各个领域都有开创性的发展,使我们的生活变得更加智能化,为我国经济的发展做出了杰出的贡献。其中,单片机的大规模使用为我们的生活创造了极大的便利,可以说无时无刻不在影响着我们的生活。何为单片机,单片机全名为单片微控制器,它的结构组成就是将微型计算机的基本功能部件全都集成在一个半导体芯片上。尽管仅仅是一个芯片,但从单片机的构成和功能的角度来看充分具备一个计算机系统的中央处理功能。最重要的优点是,单片机体积小巧,可以任意嵌入到任何符合条件的应用系统中作为中央处理器进行指挥决策,是系统实现完全的智能化。当今世界,单片机已经无时无刻不在我们生活的周边存在,各类电子产品几乎都以单片机作为主控核心,通过单片机的控制使之更加智能快速,使我们的生活更加舒畅和方便。正是随着日常周边科学技术的进步,人们对待生活用品的要求也在逐步提高,时钟亦是如此,从古至今,人们对时间的概念就非常重视,从日晷到摆钟,经历了百年的发展,如今,人们对时钟的要求不仅仅是能够知道时间,还需要能够知道日期,星期,节气,天气情况等等,以便于满足人们对生活的各种需要,由此电子万年历就诞生了,正是因为电子万年历功能的多样性,使它在应用在各种场合,人们对它的需求量也就却来越大,电子万年历的发展空间也越来越广阔,成为了一项重要的产业。 1.2设计的目的及意义 中国从古至今就有重视时间的好传统,农民通过日照和鸡叫开始一天的劳作,商人通过古老的计时工具来确认是否应该开门迎客,学士知道时间后则开始一天的读书学习,这种传统一直绵延至今。当今社会,人们的生活节奏飞快,在工作中讲究快速和效率,需要在最短的时间内完成最合理的工作要求,所以人们通常需要在最短的时间内了解到最丰富的信息,人们不满足于只能看到此时此刻的时间信息,还需要了解过去和未来几天内的时间情况,包括农历,天

电子万年历(数码管显示)

程序 #include #include #define uchar unsigned char #define uint unsigned int #define jump_ROM 0xCC #define start 0x44 #define readdata 0xBE sbit dq=P1^7; sbit w1=P0^6; sbit w2=P0^5; sbit w3=P0^4; sbit w4=P0^7; sbit wela=P0^3; sbit A=P0^0; sbit b=P0^1; sbit C=P0^2; sbit SCLK=P1^0; //DS1302通讯线定义sbit DIO=P1^1; sbit RST=P1^2; sbit k1=P1^6; sbit k2=P1^5; sbit add=P1^4;

sbit sub=P1^3; uchar code smgw[]={0,1,2,3,4,5,6,7}; uchar code smgd[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //uchar code tab[]={0x077,0x12,0x0c7,0x0d3,0x0b2,0x0f1,0x0f4,0x13,0x0f7,0x0b3,0x00}; uchar temperature[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code xingqi[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f}; uchar tab1[9]; uchar tab2[9]; uchar nian,yue,ri,zhou,shi,fen,miao,a,shan,tt,shan; uchar knum; uchar q,j,tempp; void display(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=55;y>0;y--); } void delay1(int useconds) {int s; for(s=0;s

万年历电子系统设计方案

万年历电子系统设计方案 一、设计要求与方案论证 1.1 项目设计容、功能、指标: (1)基本要求 ①具有年、月、日、时、分、秒等功能; ②具有自动判别闰年闰月的功能 ③有一路闹钟 ( 2 ) 创新要求 ①具有闹钟功能,时间到后蜂鸣器响,led灯亮。 ②设置的时间日期掉电不丢失 ③具有温度计功能; 1.2项目设计方案和比较 1.2.1单片机芯片的选择方案和论证: 方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二: 采用STC89C52,片ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 所以选择采用AT89S52作为主控制系统. 1.2.2 显示模块选择方案和论证: 方案一: 采用Lcd液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见。 方案二: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示. 方案三: 采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 由于显示的容较多,采用led数码管不方便,所以采用了LCD液晶作为显示。

电子万年历设计

课程论文 论文题目基于单片机的电子万年历设计 课程名称单片机原理及接口技术 专业年级2014级自动化3班 学生姓名孙宏远贾腾飞 学号 2014485420144848 2016年12 月3 日

摘要: 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。。 关键词:AT89C51单片机,DS1602时钟芯片,LCD1602显示屏。串口通信。一:引言 本设计的基于单片机控制的电子万年历,具有年、月、日、星期、时、分、秒的显示等功能,实现过程就是由主控制发送信息给DS1302时钟芯片再由时钟芯片反馈给单片机,再由主控制器传送给LCD1602显示屏显示信息。并且可以在键盘设置模块输入修改时间,当键盘设置时间、日期时,单片机主控制根据输入信息,通过串口通信传送给DS1302时钟芯片,DS1302芯片读取当前新信息产生反馈传送给单片机,然后单片机根据控制最后输送显示信息到LCD1602液晶显示屏模块上显示。 二:硬件设计: 2.0.硬件的设计总框图 2.1 DS1032时钟电路 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。芯片如图。 DS1302的内部主要由移位寄存器、指令和控制逻辑、振荡分频电路、实时时钟以及RAM组成。每次操作时,必须首先把CE置为高电平。再把提供地址和命令信息的8位装入移位寄存器。数据在SCLK的上升沿串行输入。无论是读周期还是写周期发生,也无论传送方式是单字节还是多字节,开始8位将指定内部何处被进行访问。在开始 8个时钟周期把含有地址信息的命令字装入移位寄存

万年历汇编语言程序

F_S bit 00H ;计时1S的标志位 ORG 0000H LJMP START ORG 001BH LJMP PINTT1 ORG 0003H LJMP PINT0 ORG 0013H LJMP PINT1 ORG 0030H START: CLR P1.4 MOV SP,#60H MOV TMOD,#10H ;设置定时器T1方式字 MOV DPTR,#(65536-50000) MOV TH1,DPH MOV TL1,DPL SETB EA SETB ET1 SETB TR1 ;启动定时器T1 SETB EX0 ;启动外部中断0 SETB IT0 ;设定外部中断0为下降沿 MOV IP,#01H ;设定外部中断0优先级最高 SETB EX1 SETB IT1 MOV R4,#20 MAIN: JNB F_S,ABCD ; 标志位为0(定时时间为1s),则跳转 CLR F_S ;标志位置零 LCALL JISHI ;调用计时ABCD: MOV 53H,#0FH ; MOV 40H,#35H MOV 41H,#00H MOV 42H,#06H LCALL DISP ;调用显示程序 ;LCALL KEYS SJMP MAIN ;定时中断程序 PINTT1: MOV DPTR,#(65536-50000) MOV TH1,DPH ;重新设置初值 MOV TL1,DPL DJNZ R4,ABC ;是否为1S?,不是则返回 MOV R4,#20 ;重新设置计数初值 SETB F_S ;标志位置1 ABC: RETI ;外部中断0程序,用于调节年月日************************************ ********* PINT0: CLR EA ;关中断 CLR TR1 ;关定时器 PUSH ACC PUSH PSW PUSH 49H PUSH 40H PUSH 41H PUSH 42H PUSH 43H ;MOV 55H,#00H ;给55H初值,刚进入中断时使显示秒的数码管闪亮MOV 55H,#06H

电子万年历

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

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

LCD12864单片机电子万年历程序

********************************* #include<> #include<> #define LCD_Data P0 #define uchar unsigned char unsigned char sec,min,hour,day,month,year,cen,week, next,aa,bb,cc,dd,mm,temp0,LunarMonth, LunarDay,LunarYear; int temp; uchar tt=1; bit c_moon; bit cenbit=1; bit w; sbit LCD_RS=P2^0; sbit LCD_RW=P2^1; sbit LCD_E=P2^2; sbit PSB=P2^3; sbit DS1302_CLK=P3^7; sbit DS1302_IO=P3^6; sbit DS1302_RST=P3^5; sbit DS18B20=P2^5; sbit speak=P2^7; sbit SetKey=P1^4; // 按键功 能:设置 sbit SureKey=P1^5; // 按键功 能:确认 sbit PlusKey=P1^6; // 按键功 能:加 sbit ReduceKey=P1^7; // 按键功 能:减 sbit scl=P1^1; sbit sda=P1^0; void DisplayShengXiao(void); void delay(unsigned int a) // 延时 1MS/ 次 { unsigned char i; while(--a) { for(i=0;i<125;i++) ; } }

电子万年历

第一章绪论 1.1 设计背景 从改革开放开始,电子工业已成为科技创新的重要领域,我国的电子产业也在新世纪开始高速发展,无论是产业结构,产业规模和技术水平都有了十分明显的进步和提升,而且电子产品在各个领域都有开创性的发展,使我们的生活变得更加智能化,为我国经济的发展做出了杰出的贡献。其中,单片机的大规模使用为我们的生活创造了极大的便利,可以说无时无刻不在影响着我们的生活。何为单片机,单片机全名为单片微控制器,它的结构组成就是将微型计算机的基本功能部件全都集成在一个半导体芯片上。尽管仅仅是一个芯片,但从单片机的构成和功能的角度来看充分具备一个计算机系统的中央处理功能。最重要的优点是,单片机体积小巧,可以任意嵌入到任何符合条件的应用系统中作为中央处理器进行指挥决策,是系统实现完全的智能化。当今世界,单片机已经无时无刻不在我们生活的周边存在,各类电子产品几乎都以单片机作为主控核心,通过单片机的控制使之更加智能快速,使我们的生活更加舒畅和方便。正是随着日常周边科学技术的进步,人们对待生活用品的要求也在逐步提高,时钟亦是如此,从古至今,人们对时间的概念就非常重视,从日晷到摆钟,经历了百年的发展,如今,人们对时钟的要求不仅仅是能够知道时间,还需要能够知道日期,星期,节气,天气情况等等,以便于满足人们对生活的各种需要,由此电子万年历就诞生了,正是因为电子万年历功能的多样性,使它在应用在各种场合,人们对它的需求量也就却来越大,电子万年历的发展空间也越来越广阔,成为了一项重要的产业。 1.2设计的目的及意义 中国从古至今就有重视时间的好传统,农民通过日照和鸡叫开始一天的劳作,商人通过古老的计时工具来确认是否应该开门迎客,学士知道时间后则开始一天的读书学习,这种传统一直绵延至今。当今社会,人们的生活节奏飞快,在工作中讲究快速和效率,需要在最短的时间内完成最合理的工作要求,所以人们通常需要在最短的时间内了解到最丰富的信息,人们不满足于只能看到此时此刻的时间信息,还需要了解过去和未来几天内的时间情况,包括农历,天气,湿度等等。而电子万年历不同于普通的时钟,它在显示时间的同时也能同步显示出年月份,

电子时钟万年历程序

#include //调用单片机头文件 #define uchar unsigned char //无符号字符型宏定义变量范围0~255 #define uint unsigned int //无符号整型宏定义变量范围0~65535 #include "eeprom52.h" #include "nongli.h" bit flag_200ms ; bit flag_100ms ; sbit beep = P3^7; //蜂鸣器定义 bit flag_beep_en; uint clock_value; //用作闹钟用的 sbit dq = P3^1; //18b20 IO口的定义 uint temperature ; //温度变量 uchar flag_nl; //农历阳历显示标志位 uchar menu_1,menu_2; uchar key_time,flag_value; //用做连加的中间变量 bit key_500ms ; uchar n_nian,n_yue,n_ri; //农历显示的函数 #include "ds1302.h" #include "lcd1602.h" /******************把数据保存到单片机内部eeprom中******************/ void write_eeprom() { SectorErase(0x2000); byte_write(0x2000, fen1); byte_write(0x2001, shi1); byte_write(0x2002, open1); byte_write(0x2058, a_a); } /******************把数据从单片机内部eeprom中读出来*****************/ void read_eeprom()

相关文档
最新文档