单片机课程设计之智能电子钟.docx

上传人:b****3 文档编号:10905410 上传时间:2023-05-28 格式:DOCX 页数:36 大小:562.17KB
下载 相关 举报
单片机课程设计之智能电子钟.docx_第1页
第1页 / 共36页
单片机课程设计之智能电子钟.docx_第2页
第2页 / 共36页
单片机课程设计之智能电子钟.docx_第3页
第3页 / 共36页
单片机课程设计之智能电子钟.docx_第4页
第4页 / 共36页
单片机课程设计之智能电子钟.docx_第5页
第5页 / 共36页
单片机课程设计之智能电子钟.docx_第6页
第6页 / 共36页
单片机课程设计之智能电子钟.docx_第7页
第7页 / 共36页
单片机课程设计之智能电子钟.docx_第8页
第8页 / 共36页
单片机课程设计之智能电子钟.docx_第9页
第9页 / 共36页
单片机课程设计之智能电子钟.docx_第10页
第10页 / 共36页
单片机课程设计之智能电子钟.docx_第11页
第11页 / 共36页
单片机课程设计之智能电子钟.docx_第12页
第12页 / 共36页
单片机课程设计之智能电子钟.docx_第13页
第13页 / 共36页
单片机课程设计之智能电子钟.docx_第14页
第14页 / 共36页
单片机课程设计之智能电子钟.docx_第15页
第15页 / 共36页
单片机课程设计之智能电子钟.docx_第16页
第16页 / 共36页
单片机课程设计之智能电子钟.docx_第17页
第17页 / 共36页
单片机课程设计之智能电子钟.docx_第18页
第18页 / 共36页
单片机课程设计之智能电子钟.docx_第19页
第19页 / 共36页
单片机课程设计之智能电子钟.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计之智能电子钟.docx

《单片机课程设计之智能电子钟.docx》由会员分享,可在线阅读,更多相关《单片机课程设计之智能电子钟.docx(36页珍藏版)》请在冰点文库上搜索。

单片机课程设计之智能电子钟.docx

单片机课程设计之智能电子钟

题目:

智能电子钟

学生姓名

专业

班级

指导教师

成绩

工程技术学院

2016年3月

一、系统设计容1

1.1设计要求:

1

1.2可实现的具体功能:

1

二、总体设计2

2.1DS1302简介2

2.2LCDl602简介3

2.3AT89C51单片机简介3

三、硬件设计4

3.1原理图4

3.2PCB板丝印层4

3.3PCB板底层4

四、软件设计流程4

4.1总体设计4

4.2主程序流程图5

4.3显示流程图5

4.4DS1302读取流程6

4.5外部中断0流程6

4.6外部中断1流程7

五、仿真效果图9

六、总结与体会11

附录12

1、程序12

2、参考文献22

智能电子钟(LCD显示)

一、系统设计容

1.1设计要求:

以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:

(1)计时:

秒、分、时、天、周、月、年;

(2)闰年自动判别;

(4)时间、月、日交替显示;

(5)自定任意时刻自动开/关屏;

(6)计时精度:

误差w1秒/月(具有微调设置);

(7)键盘采用动态扫描方式查询。

所有的查询、设置功能均由功能键K1、K2完成。

本设计采用市场上流行的时钟芯片DS1302进行制作。

1.2可实现的具体功能:

智能电子钟的原理主要由4部分组成:

(1)单片机的外围设备,即单片机最小系统,此部分是保证单片机正常工作的必要部分;

(2)显示部分:

LCD显示,即显示年、月、星期、日、时、分、秒等;

(3)时钟芯片DS1302,DS1302是DALLAS公式推出的涓流充电时钟芯片,含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。

实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力;

(4)按键部分:

按键实现开关显示屏对时钟时间的微调,开关键在正常显示模式下按下开火关LCD显示;模式键:

可切换到时间调整界面,再按一次退出,此时开关屏键实现对

秒的加一操作。

二、总体设计

图2.1设计方案框图

2.1DS1302简介

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、星期、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V〜5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302部有一个31X8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

图2.2DS1302芯片

7^7

xir

2

1

JSCLK

X2[

3

6

GND匸

4

5

]R5T

DS1302

8-PiiiDIPGOO-Mil)

 

 

□NDC

39

21

"IP2.0AS.

2.2LCD1602简介

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。

2.3AT89C51单片机简介

AT89C51(如图所示)是一种带4K字节闪烁可编程可擦除只读存储器

(FPEROM—FalshProgrammableandErasableReadOnlyMemory)

的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案

22pF

VCC

VCC

B1*

3V

2

8

29

30

■31

RST

PSEN

ALE

EA

P0.5/AD5

P0.7/AD7

P2.0/A8

P2.1/A9

P2.2/A10

P2.3/A11

P2.4/A12

P2.5/A13

P2.6/A14

P2.7/A15

33

32

21

22

23

24

25

26

28

三、硬件n设计

丄X2

I32.768kHz

3.勺原理图

30uFWD1

RST

SCLK

I/O

WD1100-11

3.2PCB板丝印层

■2

P1.0/T2P1.1/T2EX

P3.0/RXDP3.1/TXD

10

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

89C51

£亡肖a弧pn

P3.2/INT0

P3.3/INT1

P3.4/T0

P3.5/TI

P3.6/WR

P3.7/RD

13

14

16

17

J

87

54

32

1

1

[)

91

34

5

RP1

RESPACK4

JVCC

K1

鑒:

!

!

:

=■■=薫疆聽:

:

:

:

 

 

 

 

4.2主程序流程图

 

 

 

4.3显示流程图

清屏

设定光标位置

从DS1302读取要显

示的值

将读取的BCD码拆

分送LCD显示

4.4DS1302读取流程

SZ

设定DS1302为读

状态

2

写字节写入要读取

的值所在地址

读字节读出数据

返回数据

4.5外部中断0流程

sz

4.6外部中断1流程

 

等待按键释放

2

记录此时光标位置

 

五、仿真效果图

日期时间交替显示:

EEEEpnPDFVE

鬥IFh?

Fl*TD

巧汁

町邑価

P:

补iM氏匸丄的

峠討刖

4

08

00v25

£M_

■乂

nr5P*j:

K-i

LLrUl

LIMC3L

HVZPIMiRH知耳

陀二ifi]

-■^**12

Ml

uCtlXKX3

L

KL<

VO

闪他邯

即gAKp鬥ITi*3-ViTTsEiJuflm

P1

sm町島5Pl-flB

关屏

A

GHnnsea

RPt

rr5P*r»?

-i

 

a-1754£^0T.

hEHptplm叭可

LUJ1

U¥I=IL

hb-•-一-

EG

EHBEGEB

F

'■

叭TP”価H-厕

 

时间调整

六、总结与体会

历经一个星期的设计、修改、调试,最终,我们得到了想要的结果,感受成功之喜悦,但这并不意味着我们做得很好,相反,在这当中暴露出了我们在各个方面许许多多的问题,学到许多的同时感触也很深厚。

在硬件设计时,通过对需要系统的分析,单元模块的设计,元件的选取等,使我们了解到平时所学单片机课程的实用价值,以及设计过程中的大局协调、取舍、分析能力的培养。

在编程以及仿真时,充分将单片机原理的知识学以致用,既是对我们单片机基础知识的考验,又是对我们灵活运用及创新能力的检验;既考验我们的学习能力,又考验逻辑思维技巧;既体现了个人对课程设计的灵思妙想,又培养了团队之间的合作能力。

我们能够很好地完成这次课设,离不开在科学研究上实事的工作原则、一丝不苟的工作态度、勤于思考的工作方法、百折不饶的工作精神和精益求精的工作作风,此外,最重要的就是团队之间相处和谐、分工明确。

在大家的共同努力下,

得到了满意的成果,更使我们明白团队合作的重要与便利。

最后,衷心感谢老师在这次设计中耐心给予的大量帮助,解决了我程序中存在的不少问题,并指导了我一些设计的思路,也令我明白自己的大量不足之处,受益匪浅。

附录

1、程序

#include

#include

#defineucharunsignedchar

#defineDS1302_SECOND_WRITE0x80

#defineDS1302_MINUTE_WRITE0x82

#defineDS1302_HOUR_WRITE0x84

#defineDS1302_DAY_WRITE0x86

#defineDS1302_WEEK_WRITE0x8a

#defineDS1302_MONTH_WRITE0x88

#defineDS1302_YEAR_WRITE0x8c

#defineDS1302_PROTECT_WRITE0x8e

#defineDS1302_SECOND_READ0x81

#defineDS1302_MINUTE_READ0x83

#defineDS1302_HOUR_READ0x85

#defineDS1302_DAY_READ0x87

#defineDS1302_WEEK_READ0x8b

#defineDS1302_MONTH_READ0x89

#defineDS1302_YEAR_READ0x8dsbitIcden=P2A2;

sbitIcdrs=P2A0;

sbitwrite=P2A1;

sbitsck=P1A6;//时钟

sbitio=P1A7;//数据

sbitrst=P1A5;//DS1302复位

unsignedcharChinese_1[3]={0x2d,0x20,0x3a};//“-”“”

一二三四五六天

定义光标移动的位置

unsignedcharChinese_2[7]={0x31,0x32,0x33,0x34,0x35,0x36,0x37};//

//unsignedcharCursor[6]={0x81,0x83,0x85,0x90,0x92,0x94};//

unsignedcharnum=0;

unsignedintji=0;

unsignedintjiao=0;

voidDeIayms(unsignedintz)//延时

{

unsignedintx,y;

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

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

}

//Icd子程序

voidWrite_(unsignedchar)//写命令

{

Icdrs=0;

P0=;

DeIayms(5);

Icden=1;

Delayms(5);

lcden=0;

写数据

}

voidWrite_data(unsignedchardat)//

{

lcdrs=1;

P0=dat;

Delayms(5);

lcden=1;

Delayms(5);

lcden=0;

}

unsignedcharRead_()//读命令

{

unsignedchar;

write=1;

lcdrs=0;

lcden=1;

=P0;

Delayms(5);

write=0;

lcdrs=0;

lcden=0;

return;

}

voidinit_lcd()//lcd初始化

{

lcden=0;

Write_(0x38);

Write_(0x0c);

Write_(0x06);

Write_(0x01);

Write_(0x80);

}

//ds1302子程序

voidDS1302WriteByte(uchardat)//写字节

{

uchari;

sck=0;

Delayms

(2);

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

{

io=dat&0x01;//取最低位,注意DS1302的数据和地址都是从最低位开始传输的

Delayms

(2);

sck=1;

Delayms

(2);

sck=0;

dat>>=1;

}

}

ucharDS1302ReadByte()//读字节

{

uchari,dat;

Delayms

(2);

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

{

dat>>=1;

if(io==1)//当数据线为高时,证明该位数据为1

dat|=0x80;//要传输数据的当前值置为1,若不是,则为0sck=1;

Delayms

(2);

sck=0;

Delayms

(2);

}

returndat;

读命令

传输地址

读取要得到的时间/日期

}

ucharDS1302Read(ucharcmd)//

{

uchardat;

rst=0;

sck=0;

rst=1;

DS1302WriteByte(cmd);//

dat=DS1302ReadByte();//

sck=1;

rst=0;returndat;

}

voidDS1302Write(ucharcmd,uchardat)//写命令

{

rst=0;

sck=0;

rst=1;

DS1302WriteByte(cmd);//传输地址

DS1302WriteByte(dat);//写入时间/日期

sck=1;

rst=0;

}

voidInit_DS1302(void)//初始化

{

DS1302Write(0x8e,0x00);//写保护关

DS1302Write(DS1302_SECOND_WRITE,0x55);//初始秒值

DS1302Write(DS1302_MINUTE_WRITE,0x59);//初始分钟

DS1302Write(DS1302_HOUR_WRITE,0x23);//初始为24小时模式初始时间为

DS1302Write(DS1302_DAY_WRITE,0x02);//20xx年x月x日星期x

DS1302Write(DS1302_MONTH_WRITE,0x03);

DS1302Write(DS1302_YEAR_WRITE,0x16);

DS1302Write(DS1302_WEEK_WRITE,0x03);

DS1302Write(0x90,0x01);//充电

DS1302Write(0xc0,0xf0);//初始化一次标示

DS1302Write(0x8e,0x80);

}

voidSplit_display(unsignedcharaddress)//取数显示

{

unsignedchari;

i=DS1302Read(address);

i=i/16+'0';

Write_data(i);//显示十位

Delayms(3);

i=DS1302Read(address);i=i%16+'0';

Write_data(i);//显示个位

Delayms(5);

}

voidDispaly_shi()//显示时间

{

 

Write_(0x84);

Split_display(DS1302_HOUR_READ);//

Write_data(Chinese_1[2]);//显示“:

Delayms(3);

Split_display(DS1302_MINUTE_READ);//

Write_data(Chinese_1[2]);

Delayms(3);

Split_display(DS1302_SECOND_READ);//

Delayms(3);

Delayms(50);

}

显示小时

显示分钟

显示秒

 

 

voidDisplay_nian()//显示年月日

{

uchari;

Write_(0x82);

Delayms(100);

Write_(0x82);

Delayms(100);

Write_data('2');

Delayms(5);

Write_data('0');

Delayms

(1);

Split_display(DS1302_YEAR_READ);//显示年份

Write_data(Chinese_1[0]);//显示“-”

Delayms(3);

Split_display(DS1302_MONTH_READ);//显示月份

Write_data(Chinese_1[0]);

Delayms(3);

Split_display(DS1302_DAY_READ);//显示日期

Write_data(Chinese_1[1]);

Delayms(3);

Write_data(Chinese_1[1]);

Delayms(3);

i=DS1302Read(DS1302_WEEK_READ);//显示星期i=i%16+'0';

Write_data(i);

Delayms(3);

Write_(0x82);

Delayms(50);

}

voidinter0()interrupt0//按键中断1

{

ji=ji+1;

if(ji%2==0)

Write_(0x0c);

else

Write_(0x08);

}

voidinter2()interrupt2//按键中断2

{

unsignedchark,j,i,b;

//Delayms(500);

while(INT1!

=1);

b=Read_();

b=ACC&0x7f;

Write_(0x01);

Dispaly_shi();

EA=0;

EX0=0;EX1=0;k=DS1302Read(DS1302_SECOND_READ);

while(INT1)

{

Write_(0x8a);

Write_(0x0f);

if(INT0==0)

{

Delayms(10);if(INT0==0)

{

if(k<0x59)

{

ACC=k;

#pragmaasmadda,#1daa

#pragmaendasmk=ACC;

else

{

DS1302Write(DS1302_SECOND_WRITE,k);

while(k!

=0)

{k=DS1302Read(DS1302_SECOND_READ);}

Write_(0x01);

Dispaly_shi();

}

Write_(0x8a);

i=k/16+'0';

j=k%16+'0';

Write_data(i);

Delayms(3);

Write_data(j);

while(!

INT0);

}

}

}

while(!

INT1);

DS1302Write(DS1302_SECOND_WRITE,k);

Write_(0x0c);

Write_(0x01);

if(jiao==0)

{Dispaly_shi();}

else{Display_nian();}

Write_(b);

EA=1;

EX0=1;EX1=1;

}

voidmain()

{

uchari;

write=0;

Delayms(50);

IT0=1;IT1=1;

EX0=1;EX1=1;

EA=1;

init_lcd();

Init_DS1302();

while

(1)

{

Write_(0x01);

for(i=9;i>0;i--)

Dispaly_shi();

Write_(0x01);

for(i=9;i>0;i--)

Display_nian();

Delayms(50);

};

}

2、参考文献

郭文川.MCS-51单片机原理、接口及应用电子工业出版社2013.01吴国凤、宣善立.C/C++程序设计高等教育出版社2009.09江思敏、明Protel电路设计教程清华大学出版社2006.12莫名到奇妙.DS1302中文资料,带源代码XX文库2012.5.10

wubanwudi.

超详细的ds1302使用说明及其例程XX文库2011.08.10

指导教师评语:

成绩评定:

指导教师:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2