数字时钟 单片机课程设计桂电.docx

上传人:b****7 文档编号:9975057 上传时间:2023-02-07 格式:DOCX 页数:33 大小:278.31KB
下载 相关 举报
数字时钟 单片机课程设计桂电.docx_第1页
第1页 / 共33页
数字时钟 单片机课程设计桂电.docx_第2页
第2页 / 共33页
数字时钟 单片机课程设计桂电.docx_第3页
第3页 / 共33页
数字时钟 单片机课程设计桂电.docx_第4页
第4页 / 共33页
数字时钟 单片机课程设计桂电.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

数字时钟 单片机课程设计桂电.docx

《数字时钟 单片机课程设计桂电.docx》由会员分享,可在线阅读,更多相关《数字时钟 单片机课程设计桂电.docx(33页珍藏版)》请在冰豆网上搜索。

数字时钟 单片机课程设计桂电.docx

数字时钟单片机课程设计桂电

 

单片机原理课程设计报告

 

题目:

电子日历时钟

院系:

计算机科学与工程学院

专业:

计算机科学与技术

指导教师:

俸皓

 

2014年5月3号

 

目录

1课程设计的内容与要求1

2数字时钟的基本原理1

3开发环境及芯片绍3

4总体设计4

5Proteus仿真结果8

6课程设计心得体会9

7参考文献10

8附录11

 

摘要

随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断的走向深入,由于它具有功能强、体积小、功耗低、价格便宜、工作可靠、使用方便等特点,加上单片机具有集成度高、处理功能强、可靠性高、性能稳定等优点,在工业控制、智能仪器仪表、办公自动化、家用电器等诸多领域得到广泛的普及和应用。

本文基于51单片机的数字钟是实现时间和日期的显示的计时装置。

从而达到学习、了解单片机相关指令在各方面的应用。

系统由主控制器AT89s51、时钟电路DS1302、显示电路、按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。

数字钟的精度、稳定度远远超过老式机械钟。

与传统机械钟相比,它具有走时准确、显示直观无机械传动装置等优点。

它以其小巧,价格低廉,走时精度高,使用方便,便于集成化而受到了人们的欢迎并很快走进了千家万户。

此次课程设计,数字钟具有显示时间、日期和闹铃功能,并对其可以进行设置,能对闰年进行判别。

关键字:

数字电子钟单片机

一:

课程设计的内容与要求

1课程设计内容

本次课程设计要求设计一个电子日历时钟系统,主要功能为实时时间和日期的显示和调节控制,以AT89S51单片机为核心芯片,通过DS1302时钟芯片的功能扩展,在共阴极LED数码管上或LM1602液晶显示屏上显示出来。

该系统应包含以下几个方面的内容

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

DS1302时钟芯片的控制设计。

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

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

相应的控制状态表;

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

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

2课程设计要求

1.八位数码管动态显示;

2.实现年、月、日、时、分、秒

3.能交替显示时间和日期或自定义选择显示

4.时间和日期都可以设定和调整

5.实现闹铃设置和闹铃功能

6.闪烁显示所选择所要调整的位

7.具备闰年的判别。

8.设置时间和日期时,动态扫描不受到影响。

9.只采用3个独立按键实现所有功能

二:

数字钟的基本原理

本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。

本系统采用单片机AT89C51作为本设计的核心元件,利用7段共阳LED作为显示器件。

接入阳LED显示器,可显示年,月,日,时,分钟,秒,计时方式是24小时制,P0口接数码管的段码位接口,P2看接数码管的位码接口,KEY1(位选按键)接P2.5口,KEY2(调整按键加键)接到P2.6口,KEY3(调整按键减键)接P2.7口。

秒信号提供采用对定时器工作方式1,在计数溢出时计时20ms,再对其累加50次达到1s的时间,并以此作为秒信号提供。

单片机外围接有定时嘀嘀系统,定时时间到,扬声器发出嘀嘀声,提示预先设定时间电器的起停时间到,从而控制电器的起停。

电路由下列部分组成:

时钟电路、复位电路、控制电路、LED显示,闹铃电路,芯片选用AT89C51单片机。

 

软件设计

闰年算法流程图如图4:

图4闰年算法流程图

 

能被4整除的且不能被100整除的年份为闰年。

或则能被4整除能被100整除且能被400整除的年份为闰年。

三:

开发环境及芯片介绍

1.keil软件介绍

KeiluVision2是德国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,KeilC51生成的目标代码效率非常高,使用传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。

KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。

C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。

C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:

编译器,汇编器,实时操作系统,项目管理器,调试器。

uVision2IDE可为它们提供单一而灵活的开发环境。

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,使您能在很短的时间内就能学会使用keilc51来开发您的单片机应用程序。

2.Proteus软件介绍

Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。

在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

3.芯片AT89C51介绍

AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

AT89C51是一个低电压,高性能CMOS型8位单片机,片内含4KB的可反复擦写的Flash只读程序存储器(ROM)和128B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51为用户提供了许多高性价比应用场合,可灵活应用于各种控制领域。

 

四:

总体设计

1总体设计思想

Ÿ

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

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

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

2.调时间按键设计

采用51单片机系列AT89S51.对时钟进行控制,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。

(1.开机时,获取系统当前时间开始计时;

(2.P2.7控制调整键,每按一次对应位减1;

(3.P2.6控制位选键,每按一次对应位加1;

(4.P2.5控制切换键,每按一次在时间、日期、闹钟间切换;

3.具体的设计模块

3.1主控制模块

AT89S51系列单片机中有PDIP,PLCC,TQFP多种封装形式。

本设计采用的是PDIP封装40管脚的单片机

3.2复位电路模块

复位是单片机的初始化操作。

单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。

因而,复位是一个很重要的操作方式。

但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。

复位电路的基本功能是:

系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。

为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。

3.3晶振电路模块

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

3.4DS1302时钟模块

X1和X2是振荡源,外接32.768kHz晶振。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

数据输入输出(I/O)

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

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

3.5按键调节电路模块

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

3.6闹钟模块

当到达时间时,喇叭得电发出嘀嘀声,扬声器发出嘀嘀声,且扬声器两端同时变为高电平。

 

3.7显示模块

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脚:

空脚。

4总设计原理图

 

五:

Proteus仿真结果

1仿真步骤

第一步:

用keil软件对程序进行编译,编译通过后,会自动生成HEX文件。

第二步:

在Proteus的元件库中找到AT89C51以及相应的元件,按照硬件设计中的说明把各部件连接起来组成一个定时闹钟的硬件系统。

第三步:

把在keil环境调试下生成的.HEX文件装入到AT89C51里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现。

第四步:

验证系统能否实现所要求的功能,并检验错误。

2仿真结果

当点击key1时,会有光标在各个选项间跳转,出现一闪一闪的光标,按下key2和key3即可进行加和减的相当调节,使用非常方便快捷。

 

六:

课程设计心得体会

经过几个周的努力,自己设计的电子时钟终于成功运行了,虽然还有些功能不够完善,界面和操作也不是很人性化,但还是很开心。

虽然在做课程设计以前已经系统的把单片机课本认真的学习了一下,但是在刚开始时还是有点一头雾水,不知道该从哪里下手。

令人庆幸的是经过几周的学习,虽然过程很艰辛,问了很多朋友,但是总算实现了定时闹钟的功能,所有的努力都很值得。

这几周的大部分时间都在研究程序怎么处理,在这个过程中加深了我对编程语言的应用,而且也更加了解到软硬件配套的重要性。

单片机是一门应用性很强的学科,课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程,为自己今后从事与单片机控制系统有关的工作打下了基础。

通过此次课程设计,使我更进一步地熟悉了芯片的结构,掌握了芯片工作原理和其具体的使用方法。

通过编写程序,让我感觉到C语言便捷和强大。

此次电路以AT89S51为核心控制部件,以数码管为显示模块,以石英晶振为计时部件。

在Protues仿真中,没有得到解决的是闹铃的问题。

除此之外,能完成实训要求的基本和发挥部分的功能,用3个按键实现了设计要求的几乎所有功能。

经过本次课程设计,使我明白了一个道理,在做设计软件程序时,要有一个清晰的思路和一个完整的软件流程图。

模块化的设计思想在程序设计中的作用是十分大的,它可以为你提供一个比较清晰的思路,并且很容易找到头绪,不至于在设想一个程序时感觉到无从下手。

要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。

刚开始我在编写程序时,很不习惯于写注释,感觉很麻烦,而且没用,但是在修改的过程中我就遇到了较大的麻烦,以至于不得不重新的作了注释,以增加程序的易读性,从而使修改过程变得容易一些。

总之,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写设计报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,看到自己几周的小成果,感觉一切的辛苦和艰难都是值得的。

 

七:

参考文献

[1]马淑华.单片机原理与接口技术.:

北京邮电大学出版社,2007.

[2]阎石.数字电子技术基础:

高等教育出版社,1989

[3]余发山.单片机原理及应用技术:

中国矿业大学出版社.2003

[4]楼然苗.51系列单片机设计实例:

 北京航空航天出版社,2004

[5]黄仁欣.单片机原理及应用技术:

清华大学出版社,2005

[6]何立民.单片机高级教程.北京:

北京航空航天大学出版社,2001

 

八:

附录

#include

#defineuintunsignedint

#defineucharunsignedchar

uchara,sec,hour,min,day,moon,year,week,flag,key1n,ZJL;

#defineyh0x80

#defineer0x80+0x40

sbitrs=P3^5;

sbiten=P3^7;

sbitrw=P3^6;

sbitIO=P2^2;

sbitSCLK=P2^1;

sbitRST=P2^0;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

sbitkey1=P2^5;//设置键

sbitkey2=P2^6;//加键

sbitkey3=P2^7;//减键

ucharcodetab1[]={"20--"};

ucharcodetab2[]={":

:

"};

voiddelay(uintxms)//延时函数,有参函数

{

uintx,y;

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

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

}

write_1602com(ucharcom)//液晶写入指令函数

{

rs=0;

rw=0;

P1=com;

delay

(1);

en=1;

delay

(1);

en=0;

}

 

write_1602dat(uchardat)//液晶写入数据函数

{

rs=1;

rw=0;

P1=dat;

delay

(1);

en=1;

delay

(1);

en=0;

}

 

lcd_init()//晶初始化函数

{

write_1602com(0x38);

write_1602com(0x0c);

write_1602com(0x06);

write_1602com(0x01);

write_1602com(yh+1);

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

{

write_1602dat(tab1[a]);

}

write_1602com(er+2);

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

{

write_1602dat(tab2[a]);

}

}

voidwrite_byte(uchardat)//写一个字节

{

ACC=dat;

RST=1;

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

{

IO=ACC0;

SCLK=0;

SCLK=1;

ACC=ACC>>1;

}

}

ucharread_byte()//读

{

RST=1;

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

{

ACC7=IO;

SCLK=1;

SCLK=0;

ACC=ACC>>1;

}

return(ACC);

}

voidwrite_1302(ucharadd,uchardat)//向1302芯片写函数

{

RST=0;

SCLK=0;

RST=1;

write_byte(add);

write_byte(dat);

SCLK=1;

RST=0;

}

ucharread_1302(ucharadd)//从1302读数据函数

{

ucharZJL;

RST=0;

SCLK=0;

RST=1;

write_byte(add);

ZJL=read_byte();

SCLK=1;

RST=0;

return(ZJL);

}

ucharBCD_Decimal(ucharbcd)//BCD码转十进制函数

{

ucharDecimal;

Decimal=bcd>>4;

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

}

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

voidds1302_init()//初始化

{

RST=0;

SCLK=0;

write_1302(0x8e,0x00);

write_1302(0x8e,0x80);

}

voidwrite_sfm(ucharadd,uchardat)//向LCD写时分秒

{

uchargw,sw;

gw=dat%10;

sw=dat/10;

write_1602com(er+add);

write_1602dat(0x30+sw);

write_1602dat(0x30+gw);

}

voidwrite_nyr(ucharadd,uchardat)//向LCD写年月日

{

uchargw,sw;

gw=dat%10;

sw=dat/10;

write_1602com(yh+add);

write_1602dat(0x30+sw);

write_1602dat(0x30+gw);

}

 

voidwrite_week(ucharweek)//写星期函数

{

write_1602com(yh+0x0c);

switch(week)

{

case1:

write_1602dat('M');

write_1602dat('O');

write_1602dat('N');

break;

case2:

write_1602dat('T');

write_1602dat('U');

write_1602dat('E');

break;

case3:

write_1602dat('W');

write_1602dat('E');

write_1602dat('D');

break;

case4:

write_1602dat('T');

write_1602dat('H');

write_1602dat('U');

break;

case5:

write_1602dat('F');

write_1602dat('R');

write_1602dat('I');

break;

case6:

write_1602dat('S');

write_1602dat('T');

write_1602dat('A');

break;

case7:

write_1602dat('S');

write_1602dat('U');

write_1602dat('N');

break;

}

}

voidkeyscan()//键盘扫描函数

{

if(key1==0)/

{

delay(9);

if(key1==0)

{

delay(20);

while(!

key1);

key1n++;

if(key1n==9)

key1n=1;

switch(key1n)//key1选取功能键

{

case1:

TR0=0;

write_1602com(er+0x09);

write_1602com(0x0f);

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

write_1302(0x8e,0x00);

write_1302(0x80,0x80|ZJL);

write_1302(0x8e,0x80);

break;

case2:

write_1602com(er+6);

write_1602com(0x0f);

break;

case3:

write_1602com(er+3);

write_1602com(0x0f);

break;

case4:

write_1602com(yh+0x0e);

break;

case5:

write_1602com(yh+0x0a);

break;

case6:

write_1602com(yh+0x07);

break;

case7:

write_1602com(yh+0x04);

break;

case8:

write_1602com(0x0c);

TR0=1;

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

write_1302(0x8e,0x00);

write_1302(0x80,0x00|ZJL);

write_1302(0x8e,0x80);

break;}

}

}

if(key1n!

=0)/

{

if(key2==0)

{

delay(10);

if(key2==0)

{

delay(20);

while(!

key2);//key2加1功能键

switch(key1n)

{

case1:

sec++;

if(sec==60)

sec=0;

write_sfm(0x08,sec);

ZJL=(se

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1