单片机课程设计 51单片机实现电子时钟.docx

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

单片机课程设计 51单片机实现电子时钟.docx

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

单片机课程设计 51单片机实现电子时钟.docx

单片机课程设计51单片机实现电子时钟

湖北文理学院

单片机课程设计

题目:

用51单片机实现电子时钟

 

院部物理与电子信息工程学院

专业名称电子信息科学与技术

班级1111

姓名杨庆月

学号**********

指导教师李刚

 

2013年12月09日

摘要-------------------------------------------------------------1

1单片机的相关知识-------------------------------------------1

1.1单片机的简介---------------------------------------------------1

1.2单片机的特点---------------------------------------------------1

1.389C52单片机的基本特点-------------------------------------------2

2电子时钟---------------------------------------------------3

2.1电子时钟的基本特点-----------------------------------------------3

2.2电子时钟的原理--------------------------------------------------4

3控制系统的硬件设计----------------------------------------4

3.1单片机型号的选择------------------------------------------------4

3.2lcd1602工作的原理----------------------------------------------4

3.3键盘电路的设计-------------------------------------------------6

3.4复位电路设计--------------------------------------------------------6

3.5时钟电路设计--------------------------------------------------7

3.6整体电路原理图------------------------------------------------7

4控制系统的软件的设计-------------------------------------8

4.1程序的设计-----------------------------------------------------8

4.2程序源代码-----------------------------------------------------8

5仿真结果和实物图----------------------------------------------19

5.1仿真结果-------------------------------------------------------------19

5.2实物图---------------------------------------------------------------19

6总结-----------------------------------------------------------------------------------------------20

参考文献-------------------------------------------------------21

摘要:

单片计算机即单片微型计算机。

由RAM,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。

而51系列单片机是各单片机中最为典型和最有代表性的一种。

这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

本设计主要设计了一个基于AT89C52单片机的电子时钟。

并在1602上显示相应的时间。

并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。

具有时钟和日历的功能,年限显示范围是2013-2099(可修改),且具有闰年自动修正功能

关键字:

单片机;子时钟;键盘控制;LCD1602。

1单片机识的相关知识

1.1单片机简介

MCS-51是INTEL公司在成功推广的MCS-48单片机基础上加以改进而成的8位单片机。

这种单片机大约是上世纪70年代末推出的,内部程序可重写的为8751,外扩程序的是8031,一次性生产,不可改变程序的是8051。

外形一般为DIP40封装。

不久又推出了增强型的8052,其资源更加丰富。

以后又采用CHMOS技术推出了80c51,耗电大大降低。

到了90年代,INTEL公司把精力放到更赚钱的计算机上,将51单片机技术转让给了一此其它公司,如ATMELPhilips等半导体制造公司,使51系列单片机的市场份额不断扩大。

尽管十多年前就有人认为51单片机会很快淘汰,但事实证明51单片机经过不断的改进后,由于技术成熟,使用方便,至今在8位单片机市场仍然拥有庞大的用户。

特别是MCS-51技术的20年专利期限到期后,大量的兼容型号不断推出。

从上世纪90年代后期开始,美国ATMEL公司在掌握快速擦写的存储器后,推出了AT89C系列,此系列在中国获得了广泛的应用。

在此之前,由于可擦写的8751价格昂贵,国内长时间采用8031+27C64这样的外扩存程序储器方式。

51单片机最初只有DIP40这种很古老的封装,后来推出了CHMOS工艺的80C51后开始有了PLCC44这种相对较小的方形封装。

AT89C系列中开始有20脚的DIP20的精简型封装,这极大方便了在一些相对简单的单片机应用,缩小了PCB的体积。

20脚的有AT89C1051、AT89C1051、AT89C1051,对应程序存储器分别为1K、2K、4K。

标准的51为4K程序空间,128字节的RAM,32条端口,5个中断,2个定时/计数器,12个时钟周期执行一条基本指令,最长的除法为48个周期。

52为8K程序空间,256字节的RAM,32条端口,6个中断,3个定时/计数器。

AT89S51是可在板上直接下载程序的改进型号,并增加了看门狗功能,AT89C51只能在编程器下写入程序,所以经常会有人在PCB上安装IC插座,以便取下来编程更新程序。

AT的51系列后来也推出了单周期的51,但价格没什么优势,国内很少使用。

最近几年宏晶在国内大量推广STC51系列单片机,最近又推出不少所谓1T的单片机,价格较低

STC采用串口直接下载程序,写入程序很方便。

1.2单片机的特点

1.单片机的存储器ROM和RAM时严格区分的。

ROM称为程序存储器,只存放

程序,固定常数,及数据表格。

RAM则为数据存储器,用作工作区及存放用户数

据。

2.采用面向控制的指令系统。

为满足控制需要,单片机有更强的逻辑控制能力,

特别是单片机具有很强的位处理能力。

3.单片机的I/O口通常时多功能的。

由于单片机芯片上引脚数目有限,为了

解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于

何种功能,可由指令来设置或由机器状态来区分。

4.单片机的外部扩展能力很强。

在内部的各种功能部件不能满足应用的需求

时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带

来了很大的方便。

1.389C52单片机介绍

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储

器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入

口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接

收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1

口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH

编程和校验时,P1口作为第八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,

输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且

作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由

于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器

进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优

势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的

内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL

门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输

入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C52的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外

部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时

间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的

地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不

变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外

部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,

将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,

ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机

器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号

将不出现。

EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不

管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA

端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加

12V编程电源(VPP)。

2电子时钟

2.1电子时钟的基本特点

现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英

钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要

经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用用液晶显

示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示

时间的功能,还可以进行时和分的校对,片选的灵活性好。

 

2.2电子时钟的原理

该电子时钟由89C52,1602液晶等构成,采用晶振电路作为驱动电路,由延时程序和循环程序达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。

而电路中有四个控制按键,一个是选择,一个进行加数,一个进行减数,还有一个保存。

例如按下选择键,然后1602显示光标,此时可以用加或减来进行调节,在按下选择键,光标移到不同的单位上,同理进行调节,最后待日期时间调节好后,按下保存键,时钟开始计时。

3控制系统的硬件设计

3.1单片机型号的选择

通过对51单片机的学习,认为STC89C52是最理想的电子时钟开发芯片。

STC89C52,最终认为89C52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用高密度非易失存储器制造技术制造,与工业标准的MCS-52指令集和输出引脚相兼容。

还有一点重要原因,就是采用AT89C52时不能用开发板进行程序的下载,所以最终选用STC89C52进行设计。

3.21602工作原理及显示电路

字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背

光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样

1602液晶的基本的操作分为以下四种:

状态字读操作:

输入RS=低、RW=高、EP=高;输出:

DB0~7读出为状态字;

数据读出操作:

输入RS=高、RW=高、EP=高;输出:

DB0~7读出为数据;

指令写入操作:

输入RS=低、RW=低、EP=上升沿;输出:

无;

数据写入操作:

输入RS=高、RW=低、EP=上升沿;输出:

无。

如图1602模块的引脚

LCD1602正面

LCD1602背面

1602与单片机连接图

3.3键盘电路设计

本时钟采用四个按键控制,一个(实物图蓝色线24号引脚)是选择,一个进行加数(实物图紫色线25号引脚),一个进行减数(实物图灰色线26号引脚),还有一个保存(实物图白色线27号引脚)。

例如按下选择键,然后1602显示光标,此时可以用加或减来进行调节,在按下选择键,光标移到不同的单位上,同理进行调节,最后待日期时间调节好后,按下保存键,时钟开始计时。

3.4复位电路设计

单片机复位有上电复位和手动复位两种方式,上电复位是接通电源后利用RC充电来实现复位。

手动复位是通过人为干预,强制系统复位。

连接至9号复位引脚

 

复位电路如图所示,可以实现上电复位和手动复位功能。

3.5时钟电路设计

系统时钟源由内部时钟方式产生,时钟电路由12MH晶振和两个30PF瓷片电容组成,构成自激振荡,形成振荡源提供给单片机。

电容可在5PF到30PF之间选择,电容的大小对振荡频率有微小影响,可起频率微调作用。

3.6整体电路原理图

4控制系统的软件设计

4.1程序设计

由于C语言程序设计较汇编可读性强,可移植性,且可以大大降低编程的难

度和缩短开发周期,本系统程序采用c语言设计。

4.2程序源代码

#include//包含单片机寄存器的头文件

#include//包含_nop_()函数定义的头文件

#defineucharunsignedchar

#defineuintunsignedint

sbitRS=P2^0;//寄存器选择位,将RS位定义为P2.0引脚

sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚

sbitE=P2^2;//使能信号位,将E位定义为P2.2引脚

sbitBF=P0^7;//忙碌标志位,将BF位定义为P0.7引脚

ucharcodetable[]="2013-12-07WEEK6";//初始化液晶显示16

ucharcodetable1[]="TIME:

19-27-50";//14

ucharcount,s1num;

charsecond,minute,hour,day,month,year,week;

sbits1=P2^3;//功能键

sbits2=P2^4;//加键

sbits3=P2^5;//减键

sbits4=P2^6;//保存并退出

/*延时若干毫秒*/

voiddelay(ucharn)

{

uchari,a,b;

for(i=0;i

for(b=199;b>0;b--)

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

}

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

函数功能:

判断液晶模块的忙碌状态

返回值:

result。

result=1,忙碌;result=0,不忙

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

ucharBusyTest(void)

{

bitresult;

RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态

RW=1;

E=1;//E=1,才允许读写

_nop_();//空操作

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

result=BF;//将忙碌标志电平赋给result

E=0;//将E恢复低电平

returnresult;

}

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

函数功能:

写指令

入口参数:

dictate

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

voidWriteInstruction(uchardictate)

{

while(BusyTest()==1);//如果忙就等待

RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令

RW=0;

E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,

//就是让E从0到1发生正跳变,所以应先置"0"

_nop_();

_nop_();//空操作两个机器周期,给硬件反应时间

P0=dictate;//将数据送入P0口,即写入指令或地址

_nop_();

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

E=1;//E置高电平

_nop_();

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令

}

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

函数功能:

写数据

入口参数:

y(为字符常量)

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

voidWriteData(uchary)

{

while(BusyTest()==1);

RS=1;//RS为高电平,RW为低电平时,可以写入数据

RW=0;

E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,

//就是让E从0到1发生正跳变,所以应先置"0"

P0=y;//将数据送入P0口,即将数据写入液晶模块

_nop_();

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

E=1;//E置高电平

_nop_();

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令

}

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

函数功能:

对LCD的显示模式进行初始化设置

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

voidLcdInitiate(void)

{

ucharnum;

second=50;

minute=27;

hour=19;

week=6;

day=7;

month=12;

year=13;

count=0;

s1num=0;

E=0;

delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间

WriteInstruction(0x38);//显示模式设置:

16×2显示,

//5×7点阵,8位数据接口

delay(5);//延时5ms?

,给硬件一点反应时间

WriteInstruction(0x38);

delay(5);

WriteInstruction(0x38);//连续三次,确保初始化成功

delay(5);

WriteInstruction(0x0c);//显示模式设置:

显示开,无光标,

//光标不闪烁

delay(5);

WriteInstruction(0x06);//显示模式设置:

光标右移,字符不移

delay(5);

WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除

delay(5);

WriteInstruction(0x80);

for(num=0;num<16;num++)//让液晶显示日期

{

WriteData(table[num]);

delay(5);

}

WriteInstruction(0x80+0x40);

for(num=0;num<14;num++)//让液晶显示时间

{

WriteData(table1[num]);

delay(5);

}

TMOD=0x01;//定时器中断初始化

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

//-------写年月日---------------

voidwrite_nyr(ucharadd,uchardate)

{

uchari,j;

i=date/10;

j=date%10;

WriteInstruction(0x80+add);

WriteData(0x30+i);

WriteData(0x30+j);

}

//--------写时分秒---------------

voidwrite_sfm(ucharadd,uchardate)

{

uchari,j;

i=date/10;

j=date%10;

WriteInstruction(0x80+0x40+add);

WriteData(0x30+i);

WriteData(0x30+j);

}

//-------------写星期-------------

voidwrite_week(ucharadd,uchardate)

{

WriteInstruction(0x80+add);

WriteData(0x30+date);

}

//---------该年是否是闰年-------------

bitleap_

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

当前位置:首页 > 小学教育 > 语文

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

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