单片机的数字时钟设计实验报告551909王健.docx

上传人:b****7 文档编号:11044475 上传时间:2023-02-24 格式:DOCX 页数:20 大小:264.02KB
下载 相关 举报
单片机的数字时钟设计实验报告551909王健.docx_第1页
第1页 / 共20页
单片机的数字时钟设计实验报告551909王健.docx_第2页
第2页 / 共20页
单片机的数字时钟设计实验报告551909王健.docx_第3页
第3页 / 共20页
单片机的数字时钟设计实验报告551909王健.docx_第4页
第4页 / 共20页
单片机的数字时钟设计实验报告551909王健.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

单片机的数字时钟设计实验报告551909王健.docx

《单片机的数字时钟设计实验报告551909王健.docx》由会员分享,可在线阅读,更多相关《单片机的数字时钟设计实验报告551909王健.docx(20页珍藏版)》请在冰豆网上搜索。

单片机的数字时钟设计实验报告551909王健.docx

单片机的数字时钟设计实验报告551909王健

 

单片机课程设计

设计题目:

简易数字时钟

班级:

11级自动化4班

姓名:

王健

学号:

2011551909

指导老师:

盘宏斌

完成日期:

2014年6月2日

单片机的数字时钟设计

摘要

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

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

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

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

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

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

并在数码管上显示相应的时间。

应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。

该方法仿真效果真实、准确,节省了硬件资源。

单片机数字时钟的课程设计

设计概述

通过课程设计,使我们巩固和加深对单片机基本知识的理解,学会查寻资料、方案设计、方案比较,以及单元电路设计等环节,进一步提高我们综合运用所学知识的能力,提高分析解决实际问题的能力。

锻炼分析、解决电子电路问题的实际本领,通过此综合训练,为以后毕业设计打下一定的基础。

89C51单片机简介

VCC:

电源。

GND:

接地。

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编程和校验时接收高八位地址信号和控制信号。

图2.189C51单片机

P3口:

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

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

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

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

口管脚备选功能

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)。

设计要求

自制一个单片机最小系统,包括串口下载、复位电路,采用内部定时器计时,或者采用外部时钟芯片DS1302,设计一个具有秒、分、日、月、年的数字时钟,采用四位一体数码管显示相关信息,秒、分显示一页,日、月显示一页,年显示一页。

系统设计

数字钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。

它的计时周期为24小时,显示满刻度为23时59分59秒,该数字钟电路主要由译码显示器、“时”,“分”,“秒”和振荡器组成。

将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。

“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。

“时计数器”采用24进制计时器,可实现对一天24小时的累计。

译码显示电路将“时”、“分”、“秒”、计数器的输出状态送到六段显示译码器译码,通过六位LED六段显示器显示出来。

该数字电子钟主体电路由以下几部分组成:

通过分频器产生标准秒信号;60进制分秒计数器以及24小时计数器;分、时的译码显示部分。

1.框图设计

2.知识点

学会使用并了解89C51的管脚,会利用编程设计数字电子时钟。

在设计的过程中要了解上电复位的概念上电后通过LED数码管来显示时分秒,并通过按键来进行设计时间的作用。

硬件设计

1电路图设计

2晶振与复位电路

3输入部分

4显示部分

软件设计

程序

#include

#defineucharunsignedchar

#defineuintunsignedint

voiddelayms(uint);

voiddisplay(uchar,uchar,uchar,uchar);

ucharm1=0,m=0,f=0,s=0,r=29,y=5,x;

uintn=2014;

ucharmge,mshi,fshi,fge,rshi,rge,yshi,yge,nqian,nbai,nshi,nge;

sbitkey1=P3^4;//显示月日

sbitkey2=P3^5;//显示年

sbitkey3=P3^6;//时间调整按钮

sbitkey4=P3^7;//实现加一

sbitkey5=P3^2;//实现减一

ucharcodetable[]={//共阴极数字编码表

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

voidkeyscan();

voidsg()

{

nqian=n/1000;

nbai=n/100%10;

nshi=n%100/10;

nge=n%10;

yshi=y/10;

yge=y%10;

rshi=r/10;

rge=r%10;

fshi=f/10;

fge=f%10;

mshi=m/10;

mge=m%10;

}

voidqr()//定时器部分

{if(m1==20)

{m1=0;

m++;

if(m==60)

{m=0;

f++;}

if(f==60)

{f=0;

s++;}

if(s==24)

{s=0;

r++;}

if(y==2)

{if(r==29)

{r=1;

y++;

}

}

elseif(y==4||6||9||11)

{if(r==31)

{r=1;

y++;

}

}

else

{if(r==32)

{r=1;

y++;

}

}

if(y==13)

{y=1;

n++;

}

}

}

voiddisplay(ucharqian,ucharbai,ucharshi,ucharge)//数码管显示部分

{

sg();

P2=0xfe;

P0=table[qian];

delayms(5);

P2=0xfd;

P0=table[bai];

delayms(5);

P2=0xfb;

P0=table[shi];

delayms(5);

P2=0xf7;

P0=table[ge];

delayms(5);

}

voidinit()//初始函数

{TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ET0=1;

TR0=1;

}

voidkeyscan()//时间调整按钮选择

{sg();

if(key1==0)

{delayms(10);

if(key1==0)

{

while(!

key1)

{

display(yshi,yge,rshi,rge);

}

while(!

key1);

}}

if(key2==0)

{delayms(10);

if(key2==0)

{

while(!

key2)

{

display(nqian,nbai,nshi,nge);

}

while(!

key2);

}}

if(key3==0)

{delayms(10);

if(key3==0)

{x++;

TR0=0;

if(x==6)

{x=0;TR0=1;}

while(!

key3);

}

}

if(x!

=0)//定义时间调整范围

{switch(x)

{case1:

if(key4==0)

{delayms(10);

if(key4==0)

{m++;

if(m==60)

{m=0;

f++;}

while(!

key4)

{display(fshi,fge,mshi,mge);

}

}

}

if(key5==0)

{delayms(10);

if(key5==0)

{m--;

if(m==-1)

{m=59;

f--;}

while(!

key5)

{display(fshi,fge,mshi,mge);

}

}

}

case2:

if(key4==0)

{delayms(10);

if(key4==0)

{f++;

if(f==60)

{f=0;

s++;}

while(!

key4)

{display(fshi,fge,mshi,mge);

}

}

}

if(key5==0)

{delayms(10);

if(key5==0)

{f--;

if(f==-1)

{f=59;

s--;}

while(!

key5)

{display(fshi,fge,mshi,mge);

}

}

}

case3:

if(key4==0)

{delayms(10);

if(key4==0)

{r++;

if(r==32)

{r=1;

y++;}

while(!

key4)

{display(yshi,yge,rshi,rge);

}

}

}

if(key5==0)

{delayms(10);

if(key5==0)

{r--;

if(r==0)

{r=31;

y--;}

while(!

key5)

{display(yshi,yge,rshi,rge);

}

}

}

case4:

if(key4==0)

{delayms(10);

if(key4==0)

{y++;

if(y==13)

{y=1;}

while(!

key4)

{display(yshi,yge,rshi,rge);

}

}

}

if(key5==0)

{delayms(10);

if(key5==0)

{y--;

if(y==0)

{y=12;}

while(!

key5)

{display(yshi,yge,rshi,rge);

}

}

}

case5:

if(key4==0)

{delayms(10);

if(key4==0)

{n++;

while(!

key4)

{display(nqian,nbai,nshi,nge);

}

}

}

if(key5==0)

{delayms(10);

if(key5==0)

{n--;

while(!

key5)

{display(nqian,nbai,nshi,nge);

}

}

}

}

}}

voidmain()

{init();

while

(1)

{

display(fshi,fge,mshi,mge);

keyscan();

}

}

voiddelayms(uintxms)//延时函数

{uinti,j;

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

for(j=110;j>0;j--);}

voidT0_time()interrupt1//定时中断

{m1++;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

qr();

}

经验体会

在盘老师的教导下,通过一周的学习基本懂得了数字时钟的原理和设计,通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分,也让我了解了关于数字钟的原理与设计理念,要设计一个电路先进行软件模拟仿真再进行实际的电路制作。

但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。

而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。

所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。

通过这次学习,让我对各种电路都有了大概的了解。

在今后的其他工作中,也可以把这次设计中的收获运用进去,这是我此次课程设计得到的最大财富。

课程设计是大学生活中重要阶段的工作,是真正考验我们能力的一项教学内容,在这个过程中我认真思考,不断尝试,收获了很多在平时的课堂上收获不到的东西。

课程设计即将结束,我会吸取课程设计中的经验和教训,在今后的工作中少走弯路。

实物图

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

当前位置:首页 > 考试认证 > IT认证

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

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