文档库 最新最全的文档下载
当前位置:文档库 › 单片机电子日历时钟

单片机电子日历时钟

单片机电子日历时钟
单片机电子日历时钟

课程设计任务书

(指导教师填写)

课程设计名称单片机原理学生姓名专业班级

设计题目电子日历时钟

一、课程设计目的

1.培养学生文献检索的能力,如何利用Internet检索需要的文献资料。

2.培养学生综合分析问题、发现问题和解决问题的能力。

3.培养学生综合运用知识的能力和工程设计的能力。

4.培养学生理论联系实际的能力。

5.提高学生课程设计报告撰写水平。

二、设计内容、技术条件和要求

1设计内容

电子日历时钟系统主要功能为实时时间的显示,以AT89S51单片机为核心芯片,通过DS1302时钟芯片的功能扩展;在共阴极LED数码管上或LM1602液晶显示屏上显示出来。

(1)时钟芯片选用DS1302;

(2)数码管选用4位共阴极动态显示的数码管;

(3)能实时显示年、月、日和时、分、秒,用数码管显示时,要求年、月、日与时、分、秒交替显示,间隔1秒;

(4)可通过按键调节、设置当前时间。

2 设计要求

?设计单片机最小系统(包括复位按钮、晶振电路等);

?DS1302时钟芯片的控制设计。

?时间调节按键的电路设计。

?绘制实现本设计内容的硬件电路(原理图),系统的组成框图。

?相应的控制状态表;

?编写本课程设计内容的软件设计(包含程序流程图和对程序注释)。

?硬件实验部分可选用实验箱测试或Proteus仿真软件实现。

3 总体设计思想(供参考)

?正常情况下运行主程序,定时读取时钟芯片的实时时间,先读年、月、日,再读时、分、秒;

?时间调节可用1按键依次切换选择年、月、日、时、分、秒,相应位闪烁,另1按键每次加1 调节当前的时间设置。

?按键控制建议采用外部中断执行中断服务子程序,设置相应的时间调节子程序。

4 设计参考

基于AT89S51单片机的电子日历时钟有电源电路、单片机主控电路、按键控制电路和显示电路组成,DS1302的寄存器、控制命令及参考电路如图1和表1、表2所示:

图1 基于AT89S51单片机的交通信号灯控制系统框图表1 DS1302日历、时钟寄存器与控制字对照表

寄存器名称7 6 5 4 3 2 1 0 1 RAM/CK A4 A3 A2 A1 A0 RD/W

秒寄存器 1 0 0 0 0 0 0 分寄存器 1 0 0 0 0 0 1 小时寄存器 1 0 0 0 0 1 0 日寄存器 1 0 0 0 0 1 1 月寄存器 1 0 0 0 1 0 0 星期寄存器 1 0 0 0 1 0 1 年寄存器 1 0 0 0 1 1 0 写保护寄存器 1 0 0 0 1 1 1 慢充电寄存器 1 0 0 1 0 0 0 时钟突发寄存器 1 0 1 1 1 1 1

表2 DS14302内部主要寄存器分布表

寄存器名称

命令字取值范围各位内容

写读7 6 5 4 3 2 1 0

秒寄存器80H 81H 00-59 CH 10SEC SEC 分寄存器82H 83H 00-59 0 10MIN MIN 小时寄存器84H 85H 01-12或00-23 12/24 0 A HR HR 日期寄存器86H 87H 01-28,29,30,31 0 0 10DATE DATE 月份寄存器88H 89H 01-12 0 0 0 10M MONTH 周寄存器8AH 8BH 01-07 0 0 0 0 0 DAY 年份寄存器8CH 8DH 00-99 10YEAR YEAR

5 知识点准备:

?+5V电源原理及设计;

?单片机复位电路工作原理及设计(元件选择的依据);

?单片机晶振电路工作原理及设计(元件选择的依据);

?按键电路设计(了解常用按键设计方法)。

?DS1302芯片特性、驱动设计及应用;

?LM1602液晶显示屏特性、驱动设计及应用;

?AT89S51单片机引脚资源、引脚分配等;

?单片机汇编语言及程序设计(中断、延时子程序的设计)。

三时间进度安排

按教学计划规定,单片机原理课程设计总学时为1周,其进度安排和时间大致分配如下:

1.十三周周一至周二查阅资料、进行软、硬件初步设计;

2.十三周周三至周四上机调试,发现问题,解决问题,完善课程设计;

3.十三周周五、周六总结设计过程,编写课程设计报告书。

四主要参考文献

1、何立民. 单片机高级教程.第1版.北京:北京航空航天大学出版社,2001

2、MCS—51单片机应用设计张毅刚修林成胡振江编

3、MCS—51单片微型计算机原理与开发王树勋王朝玉张新发编

4、徐爱钧KEIL Cx V7.0单片机高级语言编程与uVision2应用实践,北京,电子工业出版社,2004

5、李全利、仲伟峰、徐军,单片机原理及应用,北京:清华大学出版社,2006

指导教师签字:2013年05月20日

电子日历时钟

一、 摘要

近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断的走向深入,由于它具有功能强、体积小、功耗低、价格便宜、工作可靠、使用方便等特点,因此他别适合与控制有关的系统,越来越广泛的应用与自动控制、智能化仪器、仪表,数据采集、军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,再根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。 本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器AT89s51、时钟电路DS1302、显示电

二、

三、140

2、复位电路

复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU 和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。

复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。

3、晶振电路

晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。

4、DS1302时钟模块

图1所示出DS1302 的引脚排列,其中Vcc1 为后备电源,VCC2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302 由Vcc1 或Vcc2 两者中的较大者供电。当Vcc2 大于Vcc1+0.2V 时,Vcc2 给DS1302供电。当Vcc2 小于Vcc1 时,DS1302 由Vcc1 供电。X1 和X2 是振荡源,外接32.768kHz 晶振。RST 是复位/片选线,通过把RST 输入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字节数据的传送手段。当RST 为高电平时,所有的数据传送被初始化,允许对DS1302 进行操作。如果在传送过程中RST 置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。上电运行时,在Vcc≥2.5V 之前,RST 必须保持低电平。只有在SCLK 为低电平时,才能将RST 置为高电平。I/O 为串行数据输入输出端(双向),后面有详细说明。SCLK 始终是输入端。

数据输入输出(I/O)

在控制指令字输入后的下一个SCLK 时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0 开始。同样,在紧跟8 位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302 的数据,读出数据时从低位0 位到高位7。

5、按键调节电路

本设计总的用了三个按扭开关作为键盘,其中两个是调整时间增加、减少的键,第三个是切换年、月、日及时、分、秒的显示状态并在所切换的显示状态下配合加减两个键调整时间。

6、显示模块

LCM1602采用标准的16脚接口,其中: 第1脚:VSS为地电源第2脚:VDD 接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,

接地电源时对比最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电

位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时

选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进

行写操作。当RSRW共同为低电平时可以写入指令或者显示地址,当RS为低电平

RW为高电平时可读忙信号,当RS为高电平RW为低电平时可以写入数据.第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15~16脚:空脚

四、设计原理图

五、系统流程图

六、 七、

八、 参考文献

[1]杨子文 主编 单片机原理及应用 西安电子科技大学出版社 [2]何立民 主编 单片机中级教程 北京航空航天大学出版

附源程序:

#include

#define uint unsigned int

#define uchar unsigned char

uchar a,sec,hour,min,day,moon,year,week,flag,key1n,ZJL;//ZJL为中间量

#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)

#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)

//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)

sbit rs=P3^5;

sbit en=P3^7;

sbit rw=P3^6; //如果硬件上rw接地,就不用写这句和后面的rw=0了

//DS1302时钟芯片与C51之间的引脚连接定义

sbit IO=P2^2;

sbit SCLK=P2^1;

sbit RST=P2^0;

sbit ACC0=ACC^0;

sbit ACC7=ACC^7;

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

ACC累加器=A

ACC.0=E0H

ACC.0就是ACC的第0位。Acc可以位寻址。

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

//校时按键与C51的引脚连接定义

sbit key1=P2^5; //设置键

sbit key2=P2^6; //加键

sbit key3=P2^7; //减键

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

uchar code tab1[]={"20 - - "}; //年显示的固定字符

uchar code tab2[]={" : : "};//时间显示的固定字符

//延时函数,后面经常调用

void delay(uint xms)//延时函数,有参函数

{

uint x,y;

for(x=xms;x>0;x--)

for(y=110;y>0;y--);

}

/********液晶写入指令函数与写入数据函数,以后可调用**************/

/*在这个程序中,液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面*/

write_1602com(uchar com)//****液晶写入指令函数****

{

rs=0;//数据/指令选择置为指令

rw=0; //读写选择置为写

P1=com;//送入数据

delay(1);

en=1;//拉高使能端,为制造有效的下降沿做准备

delay(1);

en=0;//en由高变低,产生下降沿,液晶执行命令

}

write_1602dat(uchar dat)//***液晶写入数据函数****

{

rs=1;//数据/指令选择置为数据

rw=0; //读写选择置为写

P1=dat;//送入数据

delay(1);

en=1; //en置高电平,为制造下降沿做准备

delay(1);

en=0; //en由高变低,产生下降沿,液晶执行命令

}

lcd_init()//***液晶初始化函数****

{

write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);//开显示不显示光标

write_1602com(0x06);//整屏不移动,光标自动右移

write_1602com(0x01);//清显示

write_1602com(yh+1);//日历显示固定符号从第一行第1个位置之后开始显示

for(a=0;a<14;a++)

{

write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分

//delay(3);

}

write_1602com(er+2);//时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<8;a++)

{

write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号

//delay(3);

}

}

/*********************over***********************/

/***************DS1302有关子函数********************/

void write_byte(uchar dat)//写一个字节

{

ACC=dat;

RST=1;

for(a=8;a>0;a--)

{

IO=ACC0;

SCLK=0;

SCLK=1;

ACC=ACC>>1;

}

}

uchar read_byte()//读一个字节

{

RST=1;

for(a=8;a>0;a--)

{

ACC7=IO;

SCLK=1;

SCLK=0;

ACC=ACC>>1;

}

return (ACC);

}

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

void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据{

RST=0;

SCLK=0;

RST=1;

write_byte(add);

write_byte(dat);

SCLK=1;

RST=0;

}

uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址

{

uchar ZJL;

RST=0;

SCLK=0;

RST=1;

write_byte(add);

ZJL=read_byte();

SCLK=1;

RST=0;

return(ZJL);

}

uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制{

uchar Decimal;

Decimal=bcd>>4;

return(Decimal=Decimal*10+(bcd&=0x0F));

}

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

void ds1302_init() //1302芯片初始化子函数(2012-06-17,00:00:00,week7)

{

RST=0;

SCLK=0;

write_1302(0x8e,0x00); //允许写,禁止写保护

//write_1302(0x80,0x12); //向DS1302内写秒寄存器80H写入初始秒数据00

//write_1302(0x82,0x12);//向DS1302内写分寄存器82H写入初始分数据00

//write_1302(0x84,0x12);//向DS1302内写小时寄存器84H写入初始小时数据00 //write_1302(0x8a,0x04);//向DS1302内写周寄存器8aH写入初始周数据7

//write_1302(0x86,0x08);//向DS1302内写日期寄存器86H写入初始日期数据17 //write_1302(0x88,0x08);//向DS1302内写月份寄存器88H写入初始月份数据06 //write_1302(0x8c,0x12);//向DS1302内写年份寄存器8cH写入初始年份数据12 write_1302(0x8e,0x80); //打开写保护

}

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

//时分秒显示子函数

void write_sfm(uchar add,uchar dat)//向LCD写时分秒,有显示位置加、现示数据,两个参数{

uchar gw,sw;

gw=dat%10;//取得个位数字

sw=dat/10;//取得十位数字

write_1602com(er+add);//er是头文件规定的值0x80+0x40

write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码

write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码

}

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

//年月日显示子函数

void write_nyr(uchar add,uchar dat)//向LCD写年月日,有显示位置加数、显示数据,两个参数

{

uchar gw,sw;

gw=dat%10;//取得个位数字

sw=dat/10;//取得十位数字

write_1602com(yh+add);//设定显示位置为第一个位置+add

write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码

write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码

}

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

void write_week(uchar week)//写星期函数

{

write_1602com(yh+0x0c);//星期字符的显示位置

switch(week)

{

case 1:write_1602dat('M');//星期数为1时,显示

write_1602dat('O');

write_1602dat('N');

break;

case 2:write_1602dat('T');//星期数据为2时显示

write_1602dat('U');

write_1602dat('E');

break;

case 3:write_1602dat('W');//星期数据为3时显示

write_1602dat('E');

write_1602dat('D');

break;

case 4:write_1602dat('T');//星期数据为4是显示

write_1602dat('H');

write_1602dat('U');

break;

case 5:write_1602dat('F');//星期数据为5时显示

write_1602dat('R');

write_1602dat('I');

break;

case 6:write_1602dat('S');//星期数据为6时显示

write_1602dat('T');

write_1602dat('A');

break;

case 7:write_1602dat('S');//星期数据为7时显示

write_1602dat('U');

write_1602dat('N');

break;

}

}

//****************键盘扫描有关函数**********************

void keyscan()

{

if(key1==0)//---------------key1为功能键(设置键)--------------------

{

delay(9);//延时,用于消抖动

if(key1==0)//延时后再次确认按键按下

{

delay(20);

while(!key1);

key1n++;

if(key1n==9)

key1n=1;//设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环switch(key1n)

{

case 1: TR0=0;//关闭定时器

//TR1=0;

write_1602com(er+0x09);//设置按键按动一次,秒位置显示光标

write_1602com(0x0f);//设置光标为闪烁

ZJL=(sec)/10*16+(sec)%10;//秒数据写入DS1302

write_1302(0x8e,0x00);

write_1302(0x80,0x80|ZJL);//sec

write_1302(0x8e,0x80);

break;

case 2: write_1602com(er+6);//按2次min位置显示光标

write_1602com(0x0f);

break;

case 3: write_1602com(er+3);//按动3次,hour

write_1602com(0x0f);

break;

case 4: write_1602com(yh+0x0e);//按动4次,week

//write_1602com(0x0f);

break;

case 5: write_1602com(yh+0x0a);//按动5次,day

//write_1602com(0x0f);

break;

case 6: write_1602com(yh+0x07);//按动6次,moon

//write_1602com(0x0f);

break;

case 7: write_1602com(yh+0x04);//按动7次,year

//write_1602com(0x0f);

break;

case 8:

write_1602com(0x0c);//按动到第8次,设置光标不闪烁

TR0=1;//打开定时器

ZJL=(sec)/10*16+(sec)%10;

write_1302(0x8e,0x00);

write_1302(0x80,0x00|ZJL);//sec数据写入DS1302

write_1302(0x8e,0x80);

break; } }

}

//-----------------------------加键key2----------------------------

if(key1n!=0)//当key1按下以下。再按以下键才有效(按键次数不等于零)

{

if(key2==0) //上调键

{

delay(10);

if(key2==0)

{

delay(20);

while(!key2);

switch(key1n)

{

case 1:sec++;//设置键按动1次,调秒

if(sec==60)

sec=0;//秒超过59,再加1,就归零

write_sfm(0x08,sec);//令LCD在正确位置显示"加"设定好的秒数

ZJL=(sec)/10*16+(sec)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00); //允许写,禁止写保护

write_1302(0x80,ZJL); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD 码

write_1302(0x8e,0x80); //打开写保护

write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,光标自动右移,所以要指定返回

//write_1602com(0x0b);

break;

case 2:min++;

if(min==60)

min=0;

write_sfm(0x05,min);//令LCD在正确位置显示"加"设定好的分数据

ZJL=(min)/10*16+(min)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x82,ZJL);//向DS1302内写分寄存器82H写入调整后的分数据BCD 码

write_1302(0x8e,0x80);//打开写保护

write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

break;

case 3:hour++;

if(hour==24)

hour=0;

write_sfm(2,hour);//令LCD在正确的位置显示"加"设定好的小时数据

ZJL=(hour)/10*16+(hour)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x84,ZJL);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 4:week++;

if(week==8)

week=1;

write_1602com(yh+0x0C);//指定'加'后的周数据显示位置

write_week(week);//指定周数据显示内容

ZJL=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x8a,ZJL);//向DS1302内写周寄存器8aH写入调整后的周数据BCD 码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 5:day++;if(moon==1)

{if(day==32)

day=1;}

if(moon==2)

{if((year/4==0&&year/100!=0)||(year/400==0))//判断是否闰年

{if(day==29)

day=1;}

else if(day==28)

day=1;}

if(moon==3)

{if(day==32)

day=1;}

if(moon==4)

{if(day==31)

day=1;}

if(moon==5)

{if(day==32)

day=1;}

if(moon==6)

{if(day==31)

day=1;}

if(moon==7)

{if(day==32)

day=1;}

if(moon==8)

{if(day==32)

day=1;}

if(moon==9)

{if(day==31)

day=1;}

if(moon==10)

{if(day==32)

day=1;}

if(moon==11)

{if(day==31)

day=1;}

if(moon==12)

{if(day==32)

day=1;}//设定,1、3、5、7、8、10、12月有31天,4、6、9、11月有30天,二月闰年有29天,平年有28天

write_nyr(9,day);//令LCD在正确的位置显示"加"设定好的日期数据

ZJL=(day)/10*16+(day)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x86,ZJL);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 6:moon++;

if(moon==13)

moon=1;

write_nyr(6,moon);//令LCD在正确的位置显示"加"设定好的月份数据

ZJL=(moon)/10*16+(moon)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x88,ZJL);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 7:year++;

if(year==100)

year=0;

write_nyr(3,year);//令LCD在正确的位置显示"加"设定好的年份数据

ZJL=(year)/10*16+(year)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x8c,ZJL);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

}

}

}

//------------------减键key3,各句功能参照'加键'注释---------------

if(key3==0)

{

delay(10);//调延时,消抖动

if(key3==0)

{

delay(20);

while(!key3);

switch(key1n)

{

case 1:sec--;

if(sec==-1)

sec=59;//秒数据减到-1时自动变成59

write_sfm(0x08,sec);//在LCD的正确位置显示改变后新的秒数

ZJL=(sec)/10*16+(sec)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00); //允许写,禁止写保护

write_1302(0x80,ZJL); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD 码

write_1302(0x8e,0x80); //打开写保护

write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

//write_1602com(0x0b);

break;

case 2:min--;

if(min==-1)

min=59;

write_sfm(5,min);

ZJL=(min)/10*16+(min)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x82,ZJL);//向DS1302内写分寄存器82H写入调整后的分数据BCD 码

write_1302(0x8e,0x80);//打开写保护

write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

break;

case 3:hour--;

if(hour==-1)

hour=23;

write_sfm(2,hour);

ZJL=(hour)/10*16+(hour)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x84,ZJL);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 4:week--;

if(week==0)

week=7;

write_1602com(yh+0x0C);//指定'加'后的周数据显示位置

write_week(week);//指定周数据显示内容

ZJL=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x8a,ZJL);//向DS1302内写周寄存器8aH写入调整后的周数据BCD 码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 5:day--;

if(moon==1)

{if(day==0)

day=31;}

if(moon==2)

{if((year/4==0&&year/100!=0)||(year/400==0))

{if(day==0)

day=29;}

else if(day==0) day=28;}

if(moon==3)

{if(day==0)

day=31;}

if(moon==4)

{if(day==0)

day=30;}

if(moon==5)

基于单片机的电子日历时钟设计

#include #define uchar unsigned char #define uint unsigned int //----端口定义--- sbit ACC_7=ACC^7; sbit RST1=P2^5; sbit IO=P2^6; sbit SCLK=P2^7; sbit k1=P3^2; sbit k2=P3^3; sbit k3=P2^2; sbit k4=P2^3; //uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 数码的位选,左到右 uchar tab_1302[7]={45,50,11,19,1,1,15}; uchar tab_time[8]={0,0,10,0,0,10,0,0}; //时间 uchar tab_day[8]={0,0,10,0,0,10,0,0,}; //年月日 uchar tab_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //0 1 2 3 4 5 6 7 8 9 - {"0123456789-"} ////////////=============函数声明============//////////////// void display_time(); void delayms(uint); void display_day(); void ds1302(); //获取DS1302的时间 void ds1302_init(); //DS1302的初始化 void write1302(uchar,uchar); //指定地址向DS1302写数据 uchar read1302(uchar); //指定地址向DS1302读数据 void ds1302(); void int0_init(); /////////=======中断初始化=======/////////// void int0_init() { EX0=1;

基于51单片机的电子台历设计

摘要 本设计是一个基于单片机AT89S51的简易电子台历,附有复位电路,时钟电路,键盘电路。复位电路是单片机的初始化操作,除了正常的初始化外,当程序运行出错后或者操作失误使系统进入死锁状态时,为摆脱困境,也需要能够通过独立式键盘电路进行启动,调整,再运行,时钟电路采用12MHZ的晶振,作为系统的时钟源,具有较高的准确性。 在上电或者复位时数码管显示年,月,日,时,分,秒。A键用于模式调整,形成一个循环,按一次键,即对秒调整。再按一次对分调整,如此循环。B键用于按下A键之后进行加1的操作,按一次加1,C键用于减1的操作,按一次减1。能够完成从00时00分00秒到23时59分59秒的循环计时,过23时59分59秒,日期增加1,当日期达到1个月后,月进位1,满12个月后,年进位1,年的首2位保持不变,始终为20。单片机并行口的电子台历的设计在AT89S51的P0口和P2口外接由14个LED数码管(LED7~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.7~P2.0作LED的段码年月日的位控输出线(P2.7~P2.0对应于LED7~LED0),P1.7~P1.0对应时间的数码管,P3口外接三个按键A、B、C(对应于P3.0~P3.2)。数码管为4位一体的共阳极的数码管,数码管采用动态扫描法,从右往左依次点亮,显示数字。 关键字:单片机、电子台历、数码管 ABSTRACT The design is a single electrical calendar basing SCMC of AT89S51. There are restoration circuit, clock circuit and keyboard circuit. Restoration circuit is used as an original operation, besides normal start-up, when the program runs mistakenly and system loses its order ,in order to get rid of the trouble, it also need to restart ,adjust and run through keyboard. Clock circuit uses 12MHZ Crystal as the source of the calendar ,with a high accuracy. When the system starts, the display shows year, month ,day, week and time the A keyboard is used to start and adjust, the B keyboard is used to add 1,when press it ,the date will add 1, the C keyboard is used to minus 1, when press it , the date will minus 1.It can make a cycle from 00:00 to 23:59:59.The display includes 14 LEDS, the SCMC joins the display in the P1, P0 ports and P2 ports, the SCMC joins the keyboards in the P3 scan, lighting the LEDS from right to left , showing the numbers. Keywords: SCMC, Calendar LED

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

基于单片机的电子日历

设计任务书 设计题目: 电子万年历 设计要求:显示范围:2001-2099;日月正常显示,并能识别闰年闰月;时间采用24 小时制。显示格式:日期按照年月日排列,如2006 年12 月20 日显示为:20061220;时间按时分秒排列,如 12 点 30 分 55 秒显示为 12:30:55。 显示位数:16位 7段 LED数码管作正常显示和节电显示。

目录 摘要 (1) 前言 (2) 1概论 (3) 1.1概述 (3) 1.2单片机的发展历程 (3) 1.3时钟日历的特性 (3) 2系统原理与硬件设计 (5) 2.1硬件选择 (5) 2.2AT89C51 单片机简介 (6) 2.3时钟芯片介绍 (12) 2.4LED 简介 (18) 2.574LS154 简介 (20) 2.6ULN2003 简介 (20) 3软件设计 (22) 3.1主程序 (22) 3.2读取时间的子程序 (24) 3.3显示刷新子程序 (27) 4调试过程及数据分析 (30) 4.1硬件调试 (30) 4.2软件调试 (30) 4.3K EI L 调试 (31) 4.4试验箱调试 (31) 结论 (32) 致谢 (33) 参考文献 (34)

附录 A: (35)

摘要 本次设计采用时钟日历芯片 DS12887,这种时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新在计算机汇编语言的驱动下每秒自动进行一次,但不需程序干预其输出状态。此外,这种时钟芯片带有锂电池做后备电源,具备永不停止的计时功能和可编程方波输出功能,可用作实时测控系统的采样信号等。这种时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。本次设计中的LED 数码管电子时钟电路采用24 小时制记时方式,日期和时间用16 位数码管显示。设计采用 AT98C51单片机,使用 5V电源供电,并且在按键的作用下可以进入省电(不显示LED 数码管)和正常显示两种状态。 本次设计采用AT89C51单片机的扩展芯片和UNL2003芯片做驱动,由多块LED数码管构成的显示系统,与传统的基于8/16位普通单片机的LED显示系统相比较,本系统在不显著地增加系统成本的情况下,可支持更多的LED数码管稳定显示。 关键词:时钟芯片、AT89C51、时钟日历

基于51单片机的万年历的设计

单片机课程实训SCM PRACTICAL TRAINING

目录 第一部分课程设计任务书 (1) 一、课程设计题目 (1) 二、课程设计时间 (1) 三、实训提交方式 (1) 四、设计要求 (1) 第二部分课程设计报告 (2) 一、单片机发展概况 (2) 二、MCS-51单片机系统简介 (2) 三、设计思想 (3) 四、硬件电路设计 (3) 1. 总体设计 (3) 2. 晶振电路 (4) 3. 复位电路 (4) 4. DS1302时钟电路 (5) 5. 温度采集系统电路 (5) 6. 按键调整电路 (6) 7. 闹钟提示电路 (6) 五、软件设计框图 (7) 六、程序源代码 (8) 1. 主程序 (8) 2. 温度控制程序 (11) 3. 日历设置程序 (13) 4. 时钟控制程序 (18) 5. 显示设置程序 (20) 七、结束语 (23) 八、课程设计小组分工 (23) 九、参考文献 (23)

第一部分课程设计任务书 一、课程设计题目 用中小规模集成芯片设计制作万年历。 二、课程设计时间 五天 三、实训提交方式 提交实训设计报告电子版与纸质版 四、设计要求 (1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。(2)可通过键盘自动调整时间。 (3)具有闹钟功能。 (4)能够显示环境温度,误差小于±1℃ (5)计时精度:月误差小于20秒。

第二部分课程设计报告 一、单片机发展概况 单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段: 第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。 第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。 第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。 二、MCS-51单片机系统简介 MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。MCS-51单片机由CPU 、RAM 、ROM 、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。8051单片机的基本性能有: ◆8位CPU; ◆布尔代数处理器,具有位寻址能力; ◆128B内部RAM,21个专用寄存器; ◆4KB内部掩膜ROM; ◆2个16位可编程二进制加1定时器/计数器; ◆32个(4×8位)双向可独立寻址的I/O口; ◆1个全双工UART(异步串行通信口); ◆5个中断源,两级中断结构; ◆片内振荡器及时钟电路,晶振频率为1.2MHz~12MHz; ◆外部程序/数据存储器寻址空间均为64KB; ◆111条指令,大部分为单字节指令; ◆单一+5V电源供电,双列直插40引脚DIP封装。

电子时钟单片机【完整版】

烟台南山学院 单片机课程设计题目电子时钟 姓名: 所在学院 所学专业: 班级: 学号: 指导教师: 完成时间:

随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。 由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。 在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。实验证明效果良好,可以投入使用。 本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。本系统为多功能数字钟的系统。本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。 关键词:单片机 AT89S52 电子时钟汇编语言

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

基于51单片机电子万年历设计 专业:机电设备维修与管理姓名:杜洪浦指导老师: 摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分和秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3到5V电压供电。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路以及串口下载电路等组成。在单片机的选择上使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序,显示程序等。程序采用汇编语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 关键词时钟电钟,DS1302,液晶LCD1602,单片机 目录 1设计要求与方案论证 (2) 1.1 设计要求 (2) 1.2 系统基本方案选择和论证 (2) 1.2.1单片机芯片的选择方案和论证 (2) 1.2.2 显示模块选择方案和论证 (3) 1.2.3时钟芯片的选择方案和论证: (3) 1.3 电路设计最终方案决定 (3) 2系统的硬件设计与实现 (3) 2.1 电路设计框图 (4) 2.2 系统硬件概述 (4) 2.3 主要单元电路的设计 (4) 2.3.1单片机主控制模块的设计 (4)

本科毕业设计--基于51单片机的电子日历设计

成都电子机械高等专科学校成教院毕业设计(论文) 论文题目:基于51单片机的电子日历设计 教学点:重庆科创职业学院 指导老师:张忠雨职称:讲师 学生姓名:聂燕学号: 2011700558 专业:应用电子技术 成都电子机械高等专科学校成教院制 2012 年 3 月 9 日

成都电子机械高等专科学校成教院毕业设计(论文)任务书 题目:基于51单片机的电子日历设计 任务与要求: 通过单片机设计电子日历数码管正常显示阳历、阴历日期,显示的格式为年-月-日,利用外部按键的操作实现阳历和阴历之间的 转换,实现阴历和阳历显示的暂停、运行等功能。 时间:2011年12月15日至2012 年3月15日共12 周教学点:重庆科创职业学院 学生姓名:聂燕学号:2011700558 专业:应用电子技术 指导单位或教研室: 指导教师:张忠雨职称:讲师 成都电子机械高等专科学校成教院制

毕业设计(论文)进度计划表

摘要 设计以单片机AT89C51为核心部件的电子日历,利用74LS245作为驱动器,74LS138作为译码器使用,六个七段数码管均采用共阴极的方式,P0口作为段选码输出口,P2口作为位选码输出口。 本次设计的题目是基于单片机的电子日历设计,可以正常的显示年、月、日,还可以利用外部按键实现阴历和阳历之间的转换以及暂停等功能。电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。适用于家庭、公司、机关等众多场所。为人们的日常生活、出行安排提供了方便,成为人们日常生活中不可缺少的一部分。 本次设计可分为两部分:硬件系统、软件系统。 硬件系统包括:AT89S51单片机、74LS245驱动器、74LS138译码器、RC复位电路、+5V直流电源电路、去抖电路、动态显示扫描电路。 软件系统主要有单片机的编程构成。 关键词:单片机,日历,位码,段码,显示

用数码管显示实时日历时钟的应用设计

(用数码管显示实时日历时钟的应用设计)

摘要 本课题通过MCS-51单片机来设计电子时钟,采用汇编语言进行编程,可以实现以下一些功能:小时,分,秒和年,月,日的显示。本次设计的电子时钟系统由时钟电路,LED显示电路三部分组成。51单片机通过软件编程,在LED数码管上实现小时,分,秒和年,月,日的显示;利用时钟芯片DS1302来实现计时。本文详细介绍了DS1302 芯片的基本工作原理及其软件设计过程,运用PROTEUS软件进行电路连接和仿真,同时还介绍了74LS164,通过它来实现I|O口的扩展。 关键词:时钟芯片,仿真软件,74LS164 目录 前言 0.1设计思路 (8) 0.2研究意义 (8)

一、时钟芯片 1.1 了解时钟芯片……………………………………………….8-9 1.2 掌握时钟芯片的工作原理………………………………….10-11二、74LS164 2.1 了解74LS164........................................................11-12 2.2 掌握的74LS164工作原理. (12) 三、数码管 3.1 熟悉常用的LED数码管...........................................12-13 3.2 了解动态显示与静态显示. (13) 四、程序设计 4.0 程序流程图 (14) 4.1 DS1392的驱动.......................................................15-16 4.2 PROTUES实现电路连接. (17) 4.3 数码管的显示:小时;分;秒 (18) 4.4 数码管显示:年;月;日 (19) 五、总结…………………………………………………………………..20-21 六、附页程序………………………………………………………………22-31前言

基于stc51单片机的LCD1602显示时间_的电子万年历(显示当前温度)

1 课设所需软件简介 1.1 Keil uVision4的简要介绍 2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。 2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。 Keil C51开发系统基本知识Keil C51开发系统基本知识 1. 系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 2. Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

基于AT89C51单片机的电子万年历的设计_课程设计报告

课程设计报告 设计名称:电子万年历设计 专业班级:自动化10101班 完成时间:2013年6月9日 报告成绩:

摘要 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。 关键字AT89C51;电子万年历; DS1302

1 绪论 1.1 课题研究的背景 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89C51单片机作为核心,功耗小,能在3V 的低压工作,电压可选用3~5V电压供电。 此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 1.2课题的研究目的与意义 二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。 由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。 1.3课题解决的主要内容 本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面: (1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。 (2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。 (3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。 (4)根据设计的硬件电路,编写控制AT89C51芯片的单片机程序。 (5)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。 (6)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。 (7)软件设计时必须要有完善的思路,要做到程序简单,调试方便。

最新毕业设计:基于单片机的电子日历时钟

一课程设计题目:电子日历时钟 二实现的功能: 基本功能: (1)显示北京时间,并且能够校准时间; (2)程序使用汇编语言; (3)显示的时、分、秒之间以及年、月、日间以小数点分隔;(4)显示公历日期,并且能够校准日期; 发挥功能: (5)运动秒表; (6)闹钟功能; (7)自动整点报时。 三课程设计的目的: 课程标志性内容的设计理解和综合运用,对所学内容进行一次实操,学以致用。 四、设计方案说明 1、硬件部分 (1)采用6位LED数码管显示日期或者时间。 (2)显示器的驱动采用“动态扫描驱动”,且采用“一键多用”的设计方案,系统电路大为简化。使用小数点表示闹 钟设置状态; (3)电路连接使用PCB,使电路连接简洁美观

2、软件部分 (1)“时钟”基准时间由单片机内部的定时中断提供,考虑因素:定时时间是“秒”的整除数,且长短适宜。最长不 能超过16位定时器的最长定时时间;最短不能少于中断服 务程序的执行时间。基准时间越短,越有利于提高时钟的 运行精确度。基准时间定为0.05秒。 (2)用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现实现“秒”定时,同理 进行“分”﹑“时”定时,以及“日”﹑“月”﹑“年” 定时。 (3)LED 数码管显示器采用“动态扫描驱动”考虑问题:驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间 短),而驱动信号的间歇时间必须小于“余辉时间”(电流 大余辉时间长),但驱动电流大小受硬件电路能力和LED 数码管极限功耗的制约。 (4)动态扫描显示方式在更新显示内容时,考虑到因LED数码管余辉的存在可能会造成显示字符的模糊,所以新内容 写入显示器之前将所有的LED数码管熄灭。 (5)关于自动识别“月大﹑月小”和“平年﹑润年”问题的考虑 a)月大和月小 2月另外计算;

基于单片机及时钟芯片DS1302的电子时钟设计

目录 摘要 一、引言 (1) 二、硬件电路设计 (2) 2.1 主要芯片 (2) 2.1.1 微处理器 (2) 2.1.2 DS1302简介 (4) 2.1.3 DS1302引脚说明 (5) 2.1.4 74ls245简介及引脚说明 (5) 2.2 时钟硬件电路设计 (6) 2.2.1 时钟电路设计 (7) 2.2.2 整点报时功能 (8) 2.2.3 硬件原理图 (9) 三、proteus和keil软件仿真及调试 (9) 3.1 电路的仿真 (9) 3.2 软件调试 (9) 四、C语言程序 (10) 五、参考文献 (13)

电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。 本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。本设计应用AT89C52芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。 本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。 关键词:电子钟;多功能;AT89C52;时钟芯片

一、引言 时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。从古代的水漏、十二天干地支,到后来的机械钟表以及当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。 1.1 多功能电子时钟研究的背景和意义 20世纪末,电子技术获得了飞速的发展。在其推动下,现代电子产品几乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展与信息化程度,同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂容易使人忘记当前的时间。然而遇到重大事情的时候,一旦忘记时间,就会给自己或他人造成很大麻烦。平时我们要求上班准时,约会或召开会议必然要提及时间;火车要准点到达,航班要准点起飞;工业生产中,很多环节都需要用时间来确定工序替换时刻。所以说能随时准确的知道时间并利用时间,是我们生活和工作中必不可少的[1]。 电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、0按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。

单片机课程设计 电子日历时钟显示器设计

目录 1.题目设计要求 (1) 2.开发平台简介 (1) 3.系统硬件设计 (2) 3.1设计原理 (2) 3.2器件的功能与作用 (2) 3.2.1 MCS51单片机AT89C51 (2) 3.2.2复位电路 (3) 3.2.3晶振电路 (4) 3.2.4 DS1302时钟模块 (4) 3.2.5 引脚功能及结构 (4) 3.2.6 DS1302的控制字节 (5) 3.2.7 数据输入输出(I/O) (5) 3.2.8 DS1302的寄存器 (6) 3.2.9 液晶显示LCD1602 (6) 3.2.10 串行时钟日历片DS1302 (8) 4.系统软件设计 (10) 4.1程序流程 (10) 4.2程序代码 (10) 5.系统仿真调试 (20) 5.1仿真原理图设计 (20) 5.2仿真运行过程 (21) 5.3仿真运行结果 (21) 6.总结 (21) 7.参考文献 (22)

1.题目设计要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2.开发平台简介 2.1系统仿真平台Proteus Proteus软件是由英国Labcenter Electronics公司开发的EDA工具软件,已有近20年的历史,在全球得到了广泛应用。Proteus软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩。和我们手头其他的电路设计仿真软件,他最大的不同即它的功能不是单一的。另外,它独特的单片机仿真功能是任何其他仿真软件都不具备的。 2.2软件开发平台Keil C Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51生成的目标代码效率之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

实时日历时钟显示系统的设计

微机原理及应用课程设计任务书 20 xx -20 xx 学年第 x 学期第 xx 周- xx 周 题目实时日历时钟显示系统的设计 内容及要求 内容:实时日历时钟显示系统 要求:设计一个实时日历时钟显示系统的程序。用“年/月/日”,“时:分:秒”(都是两位)的形式连续显示系统时间 进度安排 课程设计内容时间分配 方案论证1天 分析、设计、调试、运行3天 检查、整理、写设计报告、小结1天 合计5天 学生姓名: xx 指导时间: xxxx 指导地点: xxxx 任务下达任务完成 考核方式 1.评阅√ 2.答辩√ 3.实际操作□ 4.其它□指导教师系(部)主任 注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。 2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。

此次微机原理课程设计要求设计一个实时日历时钟显示系统。 本程序利用DOS中断2AH号功能调用取系统年月日,再逐个显示各数据,利用2CH号功能调用取系统时间,逐个显示各数据。用“时:分:秒”(都是两位)的形式连续显示系统时间,并利用计算机提供的软件调试工具对所编写程序进行调试,记录下整个调试分析的过程与运行结果。 任务安排: 主程序: xx:主体程序和流程设计 xx:日历调用显示系统 xx:时间调用显示系统 子程序: xx:显示两位数字的子程序

一、课程名称 (2) 二、课程内容及要求 (2) 三、小组组成 (2) 四、设计思路 (3) 五、程序流程图及介绍 (4) 六、调试 (5) 七、总结 (7) 八、参考资料 (9) 附录 (9)

一、课程名称:实时日历时钟显示系统的设计 二、课程内容及要求 课程内容:实时日历时钟显示系统 要求:设计一个实时日历时钟显示系统的程序。用“年/月/日”,“时:分:秒”(都是两位)的形式连续显示系统时间 三、小组组成: 成员: xx, xx, xx, xx 任务安排: 主程序: xx:主体程序和流程设计 xx:日历系统 xx:时间系统 子程序: xx:显示两位数字的子程序

基于51单片机的电子日历+温度显示设计

2 电子日历设计与实现 2.1 任务分析 一、功能 本设计要求具有显示生肖、年、月、日、星期、时、分、秒等功能;阳历与阴历能够自动关联;具有温度计功能;具备年、月、日、星期、时、分、秒校准功能;设计最终达到效果如图2-1。 图2-1 设计效果图 二、系统原理 按照系统设计功能的要求,系统由单片机、时钟模块DS1302、显示模块12864、键盘以及温度采集模块DS18B20共5部分电路组成,电路构成框图如图2-2所示。 图2-2 系统设计原理框图 三、系统硬件要求 本设计电路采用AT89S51单片机为控制核心,AT89S51具有在线编程功能,低功耗,能在3V超低压工作。时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。DS1302内部有一个用于临时性存放数据的31*8RAM寄存器。器件在加电情况下,可自动生成年、月、日、周、时、分、秒时间数据,该器件具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。 温度的采集采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,温度传感器DS18B20还具有测量精度高、

测量范围广等优点。显示部分用12864LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形,显示多样,清晰可见,能够达到较好的显示效果。 2.2电路设计 一、单片机主控制模块的设计 AT89S51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。 单片机的最小系统如图3-1所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端,单片机电路如图2-3 所示。 图2-3 单片机电路 二、时钟电路模块的设计 DSl302数据操作原理: DSl302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。 DS1302的引脚连接如图2-4所示。其中VCC1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由VCC1或VCC2两者中的较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。当VCC2

电子日历时钟设计

目录 1题目设计的要求 (1) 2 系统硬件设计 (1) 2.1设计原理 (1) 2.2器件的功能与作用 (1) 2.2.1 MCS51单片机AT89C51 (1) 2.2.2 串行时钟日历片DS1302 (2) 2.2.3 液晶显示LCD1602 (3) 3 系统软件设计 (4) 3.1程序流程 (4) 3.2程序代码 (5) 4 系统仿真调试 (12) 4.1仿真原理图设计 (12) 4.2仿真运行过程 (12) 4.3仿真运行结果 (13) 5 总结 (13) 6 参考文献 (13)

1题目设计的要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2 系统硬件设计 2.1 设计原理 图3.1 电路原理图 2.2 器件的功能与作用 2.2.1 MCS51单片机AT89C51 XX AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件

采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。 由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。 AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 2.2.2 串行时钟日历片DS1302 系统的组成与工作原理: 系统由单片机AT89C52,串行日历时钟片DS1302,液晶显示模组LCD1602。 DS1302的CLOCK与AT89C52的P1.6相连,RST与P1.5相连,IO与P1.7相连。 LCD1602的D0~D7与AT89C51的P0.0~P.7相连,并接上拉电阻,RS与P2.0相连,RW与P2.1相连,E与P2.2相连。 DS1302是DALLAS公司拖出的涓流充电时钟芯片,内含有一个实时时钟/日历和31个季节静态RAM,通过简单地串行接口与单片机进行通信,实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24小时或12小时格式,DS1302与单片机之间能简单地采用同步串行方式进行通信,仅需用到RES复位、I/O 数据线、SCLK串行时钟3个口线。对时钟、RAM的读/写,可以改用单字节方式或多达31个字节的字符组方式。DS1302工作时功耗很低,保持数据和时钟信息是功率小于1mW。DS1302广泛应用于电话传真、便携式仪器及电池供电的仪器仪表等产品领域中。 RT-1602 字符型液晶模块是以两行16个子的5*7点阵吐信来显示字符的液晶显示器。 DS1302有8个引脚: X1、X2:32.768kHz晶振介入引脚。 GND:地。 RST:复位引脚,低电平有效。 I/O:数据输入/输出引脚,具有三态功能。 SCLK:串行时钟输入引脚。 Vcc1:工作电源引脚。 Vcc2:备用电源引脚。 DS1302有一个控制寄存器,12个日历,时钟寄存器和31个RAM。 控制寄存器 控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字就为控制命令。它用于对DS1302读写过程进行控制,它的格式如下:

相关文档
相关文档 最新文档