基于单片机的数字钟.docx
- 文档编号:30572240
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:27
- 大小:176.60KB
基于单片机的数字钟.docx
《基于单片机的数字钟.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字钟.docx(27页珍藏版)》请在冰豆网上搜索。
基于单片机的数字钟
单片机系统设计项目(三级项目)
设计说明书
(2013/2014学年第二学期)
题目:
______数字钟___________
指导教师:
贾少锐、董克俭、付佳
设计周数:
2周
设计成绩:
2014年6月20日
目录
1设计要求2
2设计背景2
2.1PROTEUS软件简介2
2.2单片机简介及发展现状2
3设计方案3
3.1数字钟设计原理3
3.2系统硬件原理介绍4
3.2.1单片机STC89C524
3.2.2LCD1602液晶原理5
3.3设计流程图7
3.4.1单片机最小系统电路8
3.4.2液晶显示电路8
3.4.3按键电路9
3.4.4闹钟电路9
4设计结果10
4.1PROTEUS电路仿真图10
4.2硬件实际运行结果10
5设计总结11
6参考文献12
附录12
1设计要求
本次课程设计的是数字钟,具体要求是:
准确计时,以数字形式显示时、分、秒的时间;年以12个月计时形成,月以28(或29或30或31)日计时形成,日以24小时计时形式,分秒计时为60进位;校正时间功能,即能随意设定走时时间。
闹钟功能,一旦走时到该时间,能以声形式告警提示。
2设计背景
2.1PROTEUS软件简介
PROTEUS软件可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具。
微控制器系统相关的仿真需建立编译和调试环境,可选择KeilC51uVision2软件。
该软件支持众多不同公司的芯片,集编辑、编译和程序仿真等于一体,同时还支持PLM、汇编和C语言的程序设计。
2.2单片机简介及发展现状
单片机微型计算机简称单片机,是典型的嵌入式微控制器,常用英文字母的缩写MCU表示单片机,。
单片机由运算器、控制器、存储器、输入输出设备构成,相当于一个微型的计算机(最小系统),和计算机相比,单片机缺少了外围设备等。
单片机的应用具有面大量广的特点。
它的应用遍及各个领域,主要表现在以下几个方面:
(1)单片机在智能仪表中的应用:
单片机广泛地用于各种仪器仪表,使仪器仪表智能化,并可以提高测量的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。
(2)单片机在机电一体化中的应用:
机电一体化是械工业发展的方向。
机电一体化产品是指集成机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、钻床等。
单片机作为产品中的控制器,能充分发挥它的体积小、可靠性高、功能强等优点,可大大提高机器的自动化、智能化程度。
(3)单片机在实时控制中的应用:
单片机广泛地用于各种实时控制系统中。
例如,在工业测控、航空航天、尖端武器、机器人等各种实时控制系统中,都可以用单片机作为控制器。
单片机的实时数据处理能力和控制功能,可使系统保持在最佳工作状态,提高系统的工作效率和产品质量。
(4)单片机在分布式多机系统中的应用:
在比较复杂的系统中,常采用分布式多机系统。
多机系统一般由若干台功能各异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系、协调工作。
单片机在这种系统中往往作为一个终端机,安装在系统的某些节点上,对现场信息进行实时的测量和控制。
(5)单片机在人类生活中的应用:
自从单片机诞生以后,它就步入了人类生活,如洗衣机、电冰箱、电子玩具、收录机等家用电器配上单片机后,提高了智能化程度,增加了功能,倍受人们喜爱。
单片机将使人类生活更加方便、舒适、丰富多彩。
单片机已成为计算机发展和应用的一个重要方面。
另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
3设计方案
3.1数字钟设计原理
数字钟是利用单片机的内部的定时/计数器工作与定时方式,对机器周期计数形成基准时间(如10ms)然后用另外一个计数器或软件计数的形式对基准时间进行计数形成秒(如对l0ms计数100次),“秒”计数60次形成“分”,“分”计数60次形成“时”,“时”计数24次形成“日”,“日”计数为28(或29或30或31)次形成“月”,“月”计数12次形成“年”,年计数999次就清零,然后通过译码器,液晶把他们的内容在相应的位置显示出来。
在具体的设计时定时器采用中断方式工作,对时钟的形成在中断程序中实现,在主程序只是对定时/计数器的定义初始化,调用显示程序和控制程序的初始化。
另外为了使用的方便,也设计了按键,可以通过按键对时分秒进行调整,这样程序就加了按键程序,本次设计了加减按键,使用起来更加方便。
具体的原理概述可以用框图来表示,如图1所示。
图1系统框图
3.2系统硬件原理介绍
3.2.1单片机STC89C52
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,具有8K在系统可编程Flash存储器。
STC89C52提供以下标准功能:
8K字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路。
同时,STCT89C52可降至0Hz的静态逻辑系操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信接口及中断系统继续工作。
掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
STC89C52单片机采用高性能的静态80C51设计,并采用先进工艺制造,还带有非易失去性FLASH程序储器。
它是一种高性能、低功耗的8位CMOS微处理芯片,市场上应用最多。
其主要性能如下:
(1)8KBFlashROM,可以擦除1000次以上,数据保存10年。
(2)256字节内部RAM。
(3)电源控制模式。
(4)时钟可停止和恢复;
(5)6个中断源。
(6)4个中断优先级。
(7)4个8位I/O口。
(8)全双工增强型UART。
(9)3个16位定时器/计数器:
T0、T1、T2。
(10)全静态工作方式:
0-24MHz。
单片机STC89C52的引脚有四十个,其中正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
Pin9:
RESET/Vpd复位信号复用脚,当8052通电,时钟电路开始工作,在RESET引脚上出现2个时钟周期以上的高电平,系统即初始复位。
STC89C52的复位方式可以是自动复位,也可以是手动复位。
此外RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
Pin20、40:
分别是单片机的主电源引脚。
20脚是芯片的接地端。
40脚则是芯片的电源端。
二者是必不可少的,它们是单片机基本工作的条件。
Pin18、19:
XTAL1接外部晶振的一个引脚。
在单片机内部,它是上述振荡器的反相放大器的输入端。
当采用外部振荡时,该引脚接受振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。
则XTAL2接外部晶振另一个引脚。
在单片机内部它是上述振荡器的反相放大器的输出端。
采用外部振荡器时该引脚应该悬空。
STC89C51引脚分布图2所示。
图2STC89C52引脚分布图
3.2.2LCD1602液晶原理
1602液晶也叫1602字符型液晶(见图3),它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
显示电路既可以选用液晶显示器,也可以选用数码管显示,本次设计显示的字符数据比较多,采用液晶显示电路能够更好的清晰显示出日期和时间。
液晶采用的是1602LCD,其引脚接口说明如表1。
表11602LCD引脚说明表
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
DataI/O
2
VDD
电源正极
10
D3
DataI/O
3
VL
液晶显示偏压信号
11
D4
DataI/O
4
RS
数据命令选择端口(H/L)
12
D5
DataI/O
5
R/W
读/写选择端(H/L)
13
D6
DataI/O
6
E
使能信号
14
D7
DataI/O
7
D1
DataI/O
15
BLA
背光源正极
8
D1
DataI/O
16
BLK
背光源负极
1602LCD一共有16个引脚,每个引脚都有其相应的功能。
3脚:
VL,液晶显示偏压信号,用于调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,此脚电压为0时可以得到最强的对比度。
4脚:
RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为低电平时,则是进行命令字节的传输操作。
命令字节,即是用来对LCD1602的一些工作方式作设置的字节;数据字节,即使用以在1602上显示字节。
5脚:
R/W,读写选择端。
当此脚为高电平可对LCD1602进行读数据操作,反之进行写数据操作。
6脚:
E,使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。
7到14脚:
8位并行数据口,使得对LCD1602的数据读写大为方便。
图31602LCD引脚图
1602LCD在使用时要使用到状态和数据的读写,其基本操作时序如下。
(1)读状态:
输入:
RS=L,RW=H,E=H;输出:
D0到D7=状态字
(2)写指令:
输入:
RS=L,RW=L,D0到D7=指令码,E=高脉冲;输出:
无
(3)读数据:
输入:
RS=H,RW=H,E=H;输出:
D0到D7=数据
(4)写数据:
输入:
RS=H,RW=L,D0到D7=数据,E=高脉冲;输出:
无
此外还需要两个写时序。
当我们要写指令字,设置LCD1602的工作方式时,需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0到D7,最后E引脚一个高脉冲将数据写入。
当我们要写入数据字,在1602上实现显示时:
需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0到D7,最后E引脚一个高脉冲将数据写入。
3.3设计流程图3.4系统电路
3.4.1单片机最小系统电路
单片机小系统电路包括晶振电路和复位电路。
复位电路包括自动复位和开关复位两种方式。
其作用是在单片机在上电时或按下复位按钮时,瞬间电容两端电压不能突变,使RST管脚保持两个周期以上高电平状态,使单片机复位。
只要该正脉冲能够保持约10ms以上,单片机就能有效复位了。
晶振电路采用内时钟方式,通常用12MHZ晶体和电容组成的并联谐振电路作定时元件。
它由两个30pf电容,一个12M石英晶振组成。
电容一般选择30Pf左右,其大小对振荡频率有微小影响,可起频率微调作用。
在设计时,注意晶体和电容应尽可能与单片机靠近,减少寄生电容,保证震荡器可靠工作。
其电路图如图5。
图5单片机最小电路仿真图
复位电路中所选择的电容必须在10uf左右以上,否则,电容的充电时间不够长,影响单片机正常工作。
10K的电阻是为了在手动复位时,防止电源正负端短路,起到保护和限制电流作用。
3.4.2液晶显示电路
如图6所示,是通过一个10K的电位器调整对比度,从而达到合适的背光灯对比度。
16管脚接三极管然后B端接P2^6,C端接地。
当P2^6端接入为低电平此时三极管导通使背光灯亮,反之则灭,从而通过定时实现了背光灯节能功能。
图6液晶显示电路
3.4.3按键电路
本系统的按键电路如图7所示,当按键按下则I/O口接入低电平来驱动单片机实现功能。
设计按键的功能:
模式选择功能、时间设置功能、闹钟设置功能、秒表控制功能。
图7按键电路
3.4.4闹钟电路
图8闹钟电路
闹铃电路用于提供闹铃报警,主要由蜂鸣器构成。
单片机通过控制三极管的导通与截止,从而控制蜂鸣器的鸣叫。
其仿真图如图8所示。
4设计结果
4.1PROTEUS电路仿真图
通过前面单元电路的介绍,有了整体的电路仿真图。
通过Keil软件编译调试代码,生成.hex文件,在proteus软件中双击单片机,选择相应的.hex文件,点击OK键,执行电路图即可。
从图9可以看到部分显示结果。
所以在软件方面通过了测试,仿真结果表明,本设计实现了基本的功能要求。
4.2硬件实际运行结果
将之前测试好的程序下载到单片机中,启动电源键,液晶上显示初始化时间2000-00-00Mon00:
00:
00,通过菜单键选择日期,修改年月日,用加减键增减当前的年月日,之后按菜单键进行时间设置,与日期设置方法相同,从而设置当前时间。
再按菜单键进行闹铃设置,首先要设置一个闹铃时间,当时钟到达之前设定的闹铃时间时,蜂鸣器发出声响,提示闹铃时间已到。
具体实物实现如图10所示。
图10基于单片机的数字钟实际硬件图
5设计总结
本次课程设计从选题到最后的实际成型经历了近两个星期,中间的过程并不一直都很顺利。
从确定方案、仿真、绘图,中间需要收集许多资料,在阅读资料的过程中找到了理论与实际应用的结合点,这引起了我们小组的极大兴趣。
通过Proteus仿真软件进行仿真,这极大的提高了设计及调试的效率。
程序的调试是一个相对缓慢的过程,这中间不断会有新的想法涌现。
在达到目标功能的前提下,尽量地优化程序,希望达到更高的效率。
由于受到自身知识水平的限制,虽然尽了最大努力,最终成型的程序满足基本要求但并未达到自己的期望的地步,稍有遗憾。
通过这次课程设计,我深切的体会到理论与应用之间还是存在很大的差距。
将理论应用到实际,其中的过程可能并不如自己想象的顺利。
我们从中学到了如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我们奠定了实践基础。
同时在查找资料的过程中也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我们对团队精神的积极性和重要性有了更加充分的理解。
当顺利地完成自己设想的效果时,会发现最大的乐趣就是解决问题的过程。
但是也认识到我们存在的问题就是对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,导致编程的程序过于复杂。
在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。
对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和组员的讨论,理清了思路,反而得心应手。
在此次设计中,知道了做什么事都要有耐心,这是最重要的。
总之,此次课程设计使我们的能力得到了全方位的提高。
6参考文献
[1]刑小杰.单片机电子时钟设计[J].沈阳职业技术学院电器工程系,2006.9:
64-66.
[2]周功海,刘晓刚,何翠萍.单片机控电子时钟的设计.煤矿现代化,2007年第1期.
[3]贺敬凯,刘德新.单片机系统设计仿真与应用[M].西安电子科技大学出版社,2011
[4]楼然笛.单片机开发[M].人民邮电出版社,1994.
[5]李光才.单片机课程设计实例指导[M].北京航空航天大学出版社,2004.
[6]朱定华.单片机原理及接口技术实验[M].北方交通大学出版社,2002.11.
[7]刘湘涛.江世明.单片机原理与应用[M].电子工业出版社,2006.
附录
数字钟源程序代码:
/************************************************
程序说明:
多功能数字时钟
1.液晶显示屏默认显示2000-00-00Mon00:
00:
00
通过按键设置目当前时间。
2.设置一定时间,当时钟到达该时间时,蜂鸣器发出声响。
*************************************************/
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable0[]="2000-00-00Mon";
ucharcodetable1[]="00:
00:
00";
ucharcount;
uintAlarm_time[2]={55,55};
uintTime_buff[2]={61,25};//避免闹铃时间在00时的冲突
charshi,fen,miao;
charyear_H,year_L,month,day;
sbitbell=P2^0;sbitRs=P2^5;sbitRw=P2^6;sbitlcd_en=P2^7;
sbitSet=P3^4;sbitNext=P3^5;//Next键指示修改位置
sbitNum_up=P3^6;sbitNum_down=P3^7;//修改位数字减
/***********延时程序1ms**********************/
voiddelay(uintms){
uinti,j;
for(i=ms;i>0;i--)
for(j=120;j>0;j--);}
/************写入时、分、秒、星期、年月日***********************/
voidwrite_sfm(ucharadd,uchardate){
ucharshi,ge;
write_com(0x80+0x40+add);
shi=date/10;ge=date%10;
write_data(0x30+shi);
write_data(0x30+ge);
write_com(0x80+0x40+add);}
voidwrite_week(ucharweek)//写入星期
{
write_com(0x80+12);
switch(week){
case1:
write_data('M');delay(5);write_data('o');
delay(5);write_data('n');break;
case2:
write_data('T');delay(5);write_data('u');
delay(5);write_data('e');break;
case3:
write_data('W');delay(5);write_data('e');
delay(5);write_data('n');break;
case4:
write_data('T');delay(5);write_data('h');
delay(5);write_data('u');break;
case5:
write_data('F');delay(5);write_data('r');
delay(5);write_data('i');break;
case6:
write_data('S');delay(5);write_data('a');
delay(5);write_data('t');break;
case7:
write_data('S');delay(5);write_data('u');
delay(5);write_data('n');break;}}
voidwrite_nyr(ucharadd,uchardate){//写入年、月、日格式
uchardate_S,date_G;
date_S=date/10;date_G=date%10;
write_com(0x80+add);//设置所设置的十位
write_data(0x30+date_S);//转为ASCII码
delay(5);
write_data(0x30+date_G);
write_com(0x80+add);//将游标返回}
/************键盘检测*****************************/
voidkeyscan_set_sfm(set_alarm_flag){//当设置到分秒修改检测
ucharNext_num;
while(Set){
if(Next==0){
delay(5);
if(Next==0){
while(!
Next);Next_num++;
switch(Next_num){
case1:
write_com(0x80+0x40+7);break;//分钟位
if(set_alarm_flag==1)Next_num=0;break;case2:
write_com(0x80+0x40+4);//小时位
case3:
if(set_alarm_flag!
=1)
write_com(0x80+0x40+10);Next_num=0;break;}}}
if(Num_up==0){//数字的加操作delay(5);
if(Num_up==0){
while(!
Num_up);
if(set_alarm_flag==1&&Next_num==0)
Next_num+=2;
switch(Next_num){
case0:
miao++;if(miao==60)miao=0;
write_sfm(10,miao);break;
case1:
fen++;if(fen==60)fen=0;break;
case2:
shi++;if(shi==24)shi=0;
write_sfm(4,shi);break;}}}
if(Num_down==0){delay(5);
if(Num_down==0){
while(!
Num_down);
if(set_alarm_flag==1&&Next_num==0)
Next_num+=2;
switch(Next_num){
case0:
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
break;
case1:
fen--;
if(fen==-1)
fen=59;
write_sfm(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字
![提示](https://static.bdocx.com/images/bang_tan.gif)