电子时钟的设计论文.docx
《电子时钟的设计论文.docx》由会员分享,可在线阅读,更多相关《电子时钟的设计论文.docx(29页珍藏版)》请在冰点文库上搜索。
电子时钟的设计论文
信息工程学院硬件课程设计说明书
电子时钟的设计
学生学号:
K*********
******
专业班级:
K0312416
******
第一章绪论
硬件设计是学生理论联系实际的重要实践教学环节,是对学生进行的一次综合性专业设计训练。
通过课程设计使学生获得以下几方面能力,于此同时为毕业设计(论文)奠定基础。
1.进一步巩固和加深所学一门或几门相关专业课(或专业基础课)理论知识,培养设计、计算、绘图、计算机应用、文献查阅、报告撰写等基本技能;
2.培养学生实践动手能力及独立分析和解决工程实际问题的能力;
3.培养学生的团队协作精神、创新意识、严肃认真的治学态度和严谨求实的工作作风。
本次设计是设计一个电子时钟,由直流稳压电源,单片机系统,振荡电路,按键电路,数码显示电路六部分组成。
直流稳压电源为整个系统提供5V电压,键盘电路用于调节时间,通过功能程序的编写,使按键具有调节时间的作用。
单片机系统通过与各个部分相连以达到调试和通过数码显示电路显示实时时间,通过程序的编写,驱动LCD1602显示时间,同时使电路具有时间调整功能,并且能够显示年月日及时分秒。
第二章设计原理介绍
2.1原理框图
本次设计的原理图如图2-1
图2-1
2.2设计原理
本系统采用由89C52型单片机为核心构成复位电路,键盘电路,时钟电路,LCD1602液晶显示电路及电源电路。
从而实现单片机小系统的设计与LCD1602的驱动电路接口设计。
由AT89C51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。
只要通过设置特殊功能寄存器TMOD,即可完成。
定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。
现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。
对于这20次我们就可以采用软件的方法来统计了。
因此,我们设定TMOD=00000001B,即TMOD=01H
下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出
TH0=(216-50000)/256
TL0=(216-50000)MOD256
当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。
通过软件编程从而实现万年历程序与键盘扫描与按键判断。
第三章芯片功能介绍
3.1AT89C52
AT89C52是美国ATMEL公司生产的一种低功耗,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),芯片兼容标准MCS-51指令系统。
AT89C52将具有多种功能的8位CPU与Flash存储单元结合在一个芯片上,为很多嵌入式控制应用提供了非常灵活而又便宜的方案。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
主要功能特性:
·兼容MCS51指令系统·8k可反复擦写(>1000次)FlashROM
·32个双向I/O口·256x8bit内部RAM
·3个16位可编程定时/计数器中断·时钟频率0-24MHz
·2个串行中断·可编程UART串行通道
·2个外部中断源·共6个中断源
·2个读写中断口线·3级加密位
·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能
其引脚图如图3-1所示
图3-1
管脚说明:
(1)VCC:
电源电压
(2)GND:
接地
(3)RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(4)/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
(5)XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
(6)XTAL2:
来自反向振荡器的输出。
(7)P0口:
P0口为一个8位漏级开路双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
(8)P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能吸收或输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
(9)P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可吸收或输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
(10)P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可吸收或输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C52的一些特殊功能口,如下表3-1所示:
口管脚
备选功能
P3.0RXD
串行输入口
P3.1TXD
串行输出口
P3.2/INT0
外部中断0
P3.3/INT1
外部中断1
P3.4T0
记时器0外部输入
P3.5T1
记时器1外部输入
P3.6/WR
外部数据存储器写选通
P3.7/RD
外部数据存储器读选通
表3-1
P3口同时为闪烁编程和编程校验接收一些控制信号。
(11)ALE//PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
(12)/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
在本设计中所用到的引脚有VCC,GND,RST,/EA/VPP,XTAL1,XTAL2,P1口,P2口。
3.2LCD1602
现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。
LCD1602显示模块具有体积小,功耗低,显示内容丰富等特点。
LCD1602可以显示2行16个字符,有8位数据总线D0~D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。
如图3-2
图3-2
各引脚详细功能如下,1602采用标准的16脚接口,其中:
第1脚:
VSS为地电源
第2脚:
VDD接5V正电源
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15~16脚:
L+与L-分别接电源正端及地。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图3-3所示,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
1602液晶模块内部的控制器共有11条控制指令,如图3-3所示,
图3-3
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置
指令2:
光标复位,光标返回到地址00H
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符
指令7:
字符发生器RAM地址设置
指令8:
DDRAM地址设置
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据
指令11:
读数据
第四章各部分电路介绍
4.1直流稳压电源
直流稳压电源的电路图如图4-1所示,但在本次实验中,直流稳压电源不作为设计内容,以成品代替。
图4-1
如图所示,220V交流电通过双12V变压器变为12V的交流电,12V交流电通过四个二极管的全桥整流后变为12V直流电,然后经过电解电容(470μF)进行一级滤波,以去除直流电里面的杂波,防止干扰。
12V直流电出来后再经过三端稳压器7805稳压成为稳定的5V电源,其中7805的Vin脚是输入脚,接12V直流电源正极,GND是接地脚,接12V直流电源负极,Vout为输出脚,它和接地脚的电压就是+5V了。
5V电源出来再经过电解电容的二级滤波,使5V电源更加稳定可靠。
此时一个稳定输出5V的电源已经设计好,对于本设计它完全能够满足单片机及集成块所需电源的要求。
4.2振荡电路
AT89C52与其它型号的MCS—51单片机一样,片内有一由高增益反相放大器构成的振荡器。
反相放大器的输入端为XTALl,输出端为XTAL2,两端接石英晶体及两个电容形成稳定的自激振荡器。
电容通常取30PF左右。
振荡频率范围是1.2—12MHz,如下图4-2(左)所示。
晶体振荡器的振荡信号从XTAL2端输出到片内的时钟发生器上。
时钟发生器为二分频器.向CPU提供两相时钟信号P1和P2。
时钟信号的周期称作机器状态时间s是振荡周期的2倍。
每个时钟周期有两个节拍(相)P1和P2,CPU就以两相时钟P1和P2为基本节拍指挥AT89C52单片机各部件协调工作。
下图4-2(右)给出片内时钟发生原理。
图4-2
本系统的振荡电路图如图4-3所示,振荡电路为12M晶体产生振荡,为单片机提供固定频率。
通过分频等产生基本秒信号,为计数器计数提供基准。
图4-3
4.3按键电路
独立式按键接口设计:
独立式按键就是各按键相互独立,每个按键单独占用一根I/O口线,每根I/O口线的按键工作状态不会影响其他I/O口线上的工作状态。
因此,通过检测输入线的电平状态可以很容易判断哪个按键被按下了。
优点:
电路配置灵活,软件结构简单。
缺点:
每个按键需占用一根I/O口线,在按键数量较多时,I/O口浪费大,电路结构显得复杂。
因此,此键盘是用于按键较少或操作速度较高的场合。
上电路中独立式按键电路,各按键开关均采用了上拉电阻,是为了保证在按键断开时,各I/O有确定的高电平。
如输入口线内部已有上拉电阻,则外电路的上拉电阻可省去。
为提高电路的判断速度,此按键电路采用中断形式,不断检测四个支路的电位变化;当按键按下后,接口电位被拉低,程序产生中断,执行指定功能。
各按键功能:
KEY_1:
设置——选择要调整的选项
KEY_2:
键——调整小时
KEY_3:
键——调整秒钟
KEY_4:
定——去定此次修改成功
此模块与单片机的接口电路图如图4-4
图4-4
4.4复位电路
复位电路是在单片机的复位RST9引脚上进行的在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
单片机复位的条件是:
必须使RSW阳或RST引脚(9)加上持续两个机器周期(即24个振荡周期)的高电平。
如,若时钟频率为12MHz,每机器周期为1μs,则只需2μs以上时间的高点平,在RST引脚出现高电平后的第二个机器周期执行复位。
本系统采用上电复位电路,它足利用电容充电来实现的。
在接电瞬间,RESET端的电位与VCC相同,随着充电电流的减少,RESET的电位逐渐下降。
只要保证RESET为高电平的时间大于两个机器周期,使能正常复位。
如图4-5
图4-5
4.5显示电路
显示电路与单片机的硬件连接如图4-6,显示电路是由LCD1602与AT89C52相连组成的,通过驱动程序,使液晶显示模块显示时间
图4-6
第五章按键程序
按键程序采用中断形式,不断检测按键出的电位变化,因再按动按键时有抖动现象,所以程序中有延时程序,防止抖动现象。
具体程序如下如图5-2:
第六章总结
通过本次硬件的设计与制作,让我进一步的了解了设计电路的过程,同时也是对我这三年来的学习的一个总结,更是在从实验室退出又一次接触到电子线路与单片机,通过这次实习,我了解到了51单片机的下载与仿真,更为重要的是深入的理解430单片机与51单片机的区别,这就使我想到要不是在课堂上学习过单片机原理,我可能就不在本次实习中把理论与实践相结合。
在以后的学习中只有把我们只有把理论和实践相结合才能更好的完成我们的工作。
同时在实习的过程中,我还学会了团队协作精神、创新意识、严肃认真的治学态度和严谨求实的工作作风,我们小组运用大家的智慧完成了这次设计,其中缺了任何一个环节都是不行的,这种协作的能力也是我们应该注意培养的。
对于这次实习我总结了以下几点:
1、首先要有扎实的理论基础,理论通不过思路就无法清晰的指导实践。
2、要在设计初期对每个器件的所要放的位置和所要占的空间应该有清醒的认识,如果空间把握不好,就会在后来的布局中感觉空间不足,即使勉强把需要用的器件全部放上,焊接出来的结果也不美观。
3、在焊接电路时,尽可能的使电路的各模块之间分开,布线要整齐。
这样既有利于自己检查调试电路,也有利于与同学进行交流。
步线凌乱,容易出现短接现象,也会造成调试困难。
总之,通过这次实习让我受益匪浅,从中我得到了很多锻炼,也了解到了自己的不足,在今后的学习中我会努力完善这些不足,争取从容自信的步入社会。
第七章参考文献
[01]翟玉文.电子设计与实践[M].北京:
中国电力出版社,2005引用起始页356页
[02]张毅刚.单片机原理及应用[M]北京:
高等教育出版社,2003引用起始页145页
[03]MCS-51系列单片机实用接口技术[M]北京:
北京航空航天大学出版社引用起始页156页
[4]张伟.单片机原理及应用[M].北京:
机械工业出版社
[5]余锡存.单片机原理及接口技术[M].西安:
西安电子科技大学出版社
附录
电子时钟原理图:
一.key.c
#include"reg52.h"
#include"key.h"
externunsignedcharmin_flag;//标志位,控制分数码管闪烁
externunsignedcharhour_flag;//标志位,控制时数码管闪烁
externunsignedcharshi;
externunsignedcharfen;
unsignedcharkey_flag=0;//标志位,有按键被按下
unsignedcharkey_con=0;//控制位,控制按键(K1)被按下
/*
独立按键P12连接到51单片机P1端口
k1对应的端口为P1.3
k2对应的端口为P1.2
k3对应的端口为P1.1
k4对应的端口为P1.0
*/
codeunsignedchararr[]={0xf7,0xfb,0xfd,0xfe};
unsignedcharread_key(unsignedcharkey)
{
unsignedchari;
for(i=0;i<8;i++)
{
if(!
(key&1))
{
returni+1;
}
key>>=1;//key=key>>1;
}
return0;
}
voidkey_scan2(void)
{
unsignedchartemp;
//键盘扫描
temp=key4_scan();
if(temp)
{
if(!
key_flag)
{
if(temp==4)//K1被按下
{
key_con++;
if(key_con==1)//第一次按下调整小时的数值
{
hour_flag=1;
min_flag=0;
}
elseif(key_con==2)//第二次按下调整分的数值
{
hour_flag=0;
min_flag=1;
}
else//第三次按下取消调整
{
hour_flag=0;
min_flag=0;
key_con=0;
}
}
if(temp==3)//增加数值
{
if(hour_flag)
{
shi++;
if(shi>23)
{
shi=0;
}
}
elseif(min_flag)
{
fen++;
if(fen>59)
{
fen=0;
}
}
}
if(temp==2)//减少数值
{
if(hour_flag)
{
shi--;
if(shi>250)
{
shi=23;
}
}
elseif(min_flag)
{
fen--;
if(fen>250)//非负数,减的时候不会小于0
{
fen=59;
}
}
}
}
key_flag=1;
}
else
{
key_flag=0;
}
}
/*
扫描独立键盘,
输入参数:
无
返回值:
有键按下时:
返回对应的数字
没有按键:
返回0
*/
unsignedcharkey4_scan(void)
{
unsignedchartemp;
P1=0xf;
if(P1!
=0xf)//有按键被按下
{
temp=P1&0xf;//1110
returnread_key(temp);
}
return0;
}
unsignedcharsub_key_scan(unsignedcharkey)
{
unsignedchartemp;
P1=key;//判断第一行
temp=P1>>4;
if(temp!
=0xf)
{
returnread_key(temp);
}
return0;
}
/*
矩阵键盘
硬件连接:
P13连接到51单片机P1端口
P1.0对应P13的1脚
P1.1对应P13的2脚
P1.2对应P13的3脚
……
P1.7对应P13的8脚
输入参数:
无
返回值:
有键按下时:
返回对应的数字
没有按键:
返回0
*/
unsignedcharkey16_scan(void)
{
unsignedchartemp;
unsignedchari=0;
P1=0xf0;
if(P1!
=0xf0)//有按键被按下
{
for(i=0;i<4;i++)//用函数扫描4行
{
temp=sub_key_scan(arr[i]);
if(temp)
{
returntemp+(i*4);
}
}
}
return0;
}
二.Key.h
#ifndefKEY_H
#defineKEY_H
unsignedcharkey4_scan(void);
unsignedcharkey16_scan(void);
voidkey_scan2(void);
#endif
三.Led_reg.c
#include"reg52.h"
/*
P2连接位码,P2.0连接Q4B,P2.1连接Q3B,P2.2连接Q2B,P2.3连接Q1B
P0端口连接段码,P0.0连接A,。
。
。
。
P0.7连接DP
*/
codeunsignedcharled_arr[]=
{0xc0,0xf9,0xa4,0xb0,0x99,