数字钟课程设计报告书.docx

上传人:b****6 文档编号:7206090 上传时间:2023-01-21 格式:DOCX 页数:22 大小:235.54KB
下载 相关 举报
数字钟课程设计报告书.docx_第1页
第1页 / 共22页
数字钟课程设计报告书.docx_第2页
第2页 / 共22页
数字钟课程设计报告书.docx_第3页
第3页 / 共22页
数字钟课程设计报告书.docx_第4页
第4页 / 共22页
数字钟课程设计报告书.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数字钟课程设计报告书.docx

《数字钟课程设计报告书.docx》由会员分享,可在线阅读,更多相关《数字钟课程设计报告书.docx(22页珍藏版)》请在冰豆网上搜索。

数字钟课程设计报告书.docx

数字钟课程设计报告书

目录

一、设计任务与要求3

1设计目的3

2设计要求3

2.1任务及要求............................................................................3

2.2系统功能说明........................................................................3

2.3软件研制方面........................................................................4

2.4硬件研制方面........................................................................4

二、总体方案设计4

1电路的总体原理框图4

2实现时钟计时的基本方法5

3总体方案介绍5

3.1计时方案................................................................................5

3.2控制方案................................................................................5

三、数字钟的硬件设计6

1.1最小系统..................................................................................6

1.2时钟电路..................................................................................8

1.3单片机复位电路.......................................................................9

2、数码显示模块设计....................................................................10

3、仿真实现(电路连接图).........................................................11

4、实验板运行结果.......................................................................12

四、系统软件设计.13

1、源程序流程图...........................................................................13

2、时间显示流程图........................................................................13

3、源程序清单............................................................................13

五、设计总结20

1、设计过程中遇到的问题及解决方法20

2、设计体会21

参考文献22

 

一、设计任务与要求

1、设计目的

(1)通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。

(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;

(3)提高综合及灵活运用所学知识解决工业控制的能力,培养动手能力和实际应用能力。

2、设计内容

2.1任务及要求

①通过单片机内定时器控制走时,准确持续走时。

②在六个LED七段数码管上显示时、分、秒。

③具有通过键盘调整时、分、秒的功能。

2.2系统功能说明

数字钟的格式为:

HH:

MM:

SS,由左向右分别为:

时、分、秒。

完成显示由秒01一直加1至59,再恢复为00;分加1,由00至01,一直加1至59,再恢复00;时加1,时由00加至23之后秒、分、时全部清清零。

该数字钟使用T0作50ms的定时中断。

走时调整:

走时过程中,按下“暂停/继续”键可暂停、继续计时,按下“调时按键”键对“时”显示进行调整(每按一次加1);按下“调分按键”键对“分”显示进行调整(每按一次加1);按下“调秒按键”键“秒”显示进行调整(每按一次加1)。

2.3软件研制方面

1.采用模块化程序结构设计软件,首先将整个软件分成若干功能模块;

2.根据流程图,编写源程序;

3.上机调试各模块程序;

4.与硬件一起联调,最后完成全部调试工作。

2.4硬件研制方面

1.将整个硬件系统划分为若干功能单元电路,绘出整个系统原理电路图,注明各交单元电路间接口信号;

2.搭建硬件电路,完成各单元电路设计,包括选择合适的各类元器件和电路板设计(元件布局和走线)。

二、总体方案设计

1.电路的总体原理框图

根据以上的电子时钟的设计要求可以分为以下的几个硬件电路模块:

单片机模块、数码显示模块与按键模块,模块之间的关系图如下面得方框电路

时钟电路

复位电路单

片数码管显示

调整键盘

2.实现时钟计时的基本方法

利用STC系列单片机的可编程定时/计数器、中断系统来实现时钟定时。

(1)计数初值计算:

把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒。

假设使用T/C0,方式1,50ms定时,fosc=11.0592MHz。

则初值N满足N×1/11.0592MHz×12μs=50000μs=50ms

N=46080。

(2)采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);

(3)从秒到分和从分到时的计时是通过累加和数值比较实现。

3、总体方案介绍

3.1计时方案

利用STC89C52单片机内部的定时/计数器进行中断时,配合软件延时实现时、分、秒的计时。

该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。

3.2控制方案

STC89C52的P0口外接2个74HC573锁存器,其中一个锁存器接由六个LED数码管(LED6~LED1)构成的显示器,作LED的段码输出线,另一个锁存器作六个LED数码管的位控输出线,P2.6接段选锁存器,P2.7接位选锁存器,P3.4~P3.7口外接四个按键,构成键盘电路。

STC89C52是一种低功耗,高性能的CMOS8位微型计算机。

它带有8KFlash可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和80C52的指令系统及引脚兼容,片内Flash集成在一个芯片上,可用与解决复杂的问题,且成本较低。

简易电子钟的功能不复杂,采用其现有的I/O便可完成,所以本设计中采用此的设计方案。

3、数字钟的硬件设计

1.1最小系统

STC89C52单片机引脚图如下:

MCS-51单片机是标准的40引脚双列直插式集成电路芯片,其各引脚功能如下:

XTAL1(19脚)和XTAL2(18脚):

为振荡器输入输出端口。

当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

RST(9脚):

为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和GND(20脚):

为供电端口,分别接+5V电源的正负端。

P0口

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉  电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。

  

Flash编程和程序校验期间,P1接收低8位地址。

P2口

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

 

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

  

Flash编程或校验时,P2亦接收高位地址和一些控制信号。

P3口

P3口是一组带有内部上拉电阻的8位双向I/O口。

P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻  辑门电路。

对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

  

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,P3口还接收一些用于Flash闪速存储编程和程序校验的控制信号。

具体第二功能如表所示

P3引脚

兼用功能

P3.0

串行通讯输入(RXD)

P3.1

串行通讯输出(TXD)

P3.2

外部中断0(INT0)

P3.3

外部中断1(INT1)

P3.4

定时器0输入(T0)

P3.5

定时器1输入(T1)

P3.6

外部数据存储器写选通WR

P3.7

外部数据存储器写选通RD

RST

  复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/PROG

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

 

PSEN

  程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数  据)时,每个机器周期两次PSEN有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP

  外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接  地)。

需注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态。

  如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

  Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

 

1.2时钟电路

下图所示为时钟电路原理图,在AT89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。

而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。

时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。

1.3单片机复位电路

复位电路由两部分组成,电容和电阻。

此复位电路称上电复位。

上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容两端的电压达到电源电压时,电容充电电流为零,电容相当于开路,RST端为低电平,程序正常运行。

通常,我们还会在电容器两端并接一个按钮开关,如下图所示,此按钮开关就是一个手动的Reset开关。

2、数码显示模块设计

显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及产品工艺,单片机应用系统中常用的显示器有:

发光二极管LED显示器、液晶LCD显示器、CRT显示器等。

LED显示器是现在最常用的显示器之一,如下图所示。

共阴极共阳极

发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。

分段式显示器(LED数码管)由7条线段围成8字型,每一段包含一个发光二极管。

外加正向电压时二极管导通,发出清晰的光。

只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。

LED数码管有共阳、共阴之分。

系统采用动态显示方式,用P0口来控制LED数码管的段控线和位控线。

动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。

3、仿真实现(电路连接图)

 

4、实验板运行结果

四、系统软件设计

1、源程序流程图

初始化

 

清数码管显示

定时器赋初值

是否有键按下?

键盘调整时间

 

显示时间并计时

2、时间显示流程图

3、源程序清单

//==声明区=====================================================//

#include

#defineuintunsignedint//宏定义

#defineucharunsignedchar

uchartt,ff,ee,dd,cc,bb,aa;//分别定义定时器变量和时、分、秒的六位变量

sbitdula=P2^6;//定义段选位

sbitwela=P2^7;//定义位选位

sbitkey1=P3^4;//定义调时按键

sbitkey2=P3^5;//定义调分按键

sbitkey3=P3^6;//定义调秒按键

sbitkey4=P3^7;//定义暂停/继续计时按键

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,0x66,//0~9的七段LED共阴极数码表

0x6d,0x7d,0x07,0x7f,0x6f};

voidkey01();//声明调时按键子程序

voidkey02();//声明调分按键子程序

voidkey03();//声明调秒按键子程序

voidkey04();//声明暂停/继续计时按键子程序

voiddisplay(ucharff,ucharee,uchardd,ucharcc,ucharbb,ucharaa);//声明显示子程序

voiddelay(uintz);//声明延时子程序

voidinit();//声明初始化子程序

//==主程序=====================================================//

voidmain()

{

init();//初始化子程序

while

(1)

{

if(key1==0)//键盘扫描

key01();

if(key2==0)

key02();

if(key3==0)

key03();

if(key4==0)

key04();

if(tt==20)

{

tt=0;

aa++;

if(aa==10)

{

aa=0;

bb++;

}

if(bb==6)

{

bb=0;

cc++;

}

if(cc==10)

{

cc=0;

dd++;

}

if(dd==6)

{

dd=0;

ee++;

}

if(ee==10)

{

ee=0;

ff++;

}

if(ff==2&&ee==4)

{

ee=0;

ff=0;

}

}

display(ff,ee,dd,cc,bb,aa);//以24小时方式显示时间

}

}

//==延时子程序=====================================================//

voiddelay(uintz)//延时子程序(约zms)

{

uintx,y;

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

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

}

//==初始化子程序===================================================//

voidinit()//

{

ff=0;//数码管显示清零

ee=0;

dd=0;

cc=0;

bb=0;

aa=0;

tt=0;//定时变量清零

wela=0;//位选清零

dula=0;//段选清零

TMOD=0x01;//定时器0工作于方式1

TH0=(65536-46080)/256;//定时器赋初值

TL0=(65536-46080)%256;

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//开定时器0

}

//==定时器0=====================================================//

voidtimer0()interrupt1//定时50ms

{

TH0=(65536-46080)/256;

TL0=(65536-46080)%256;

tt++;

}

//==显示子程序===================================================//

voiddisplay(ucharff,ucharee,uchardd,ucharcc,ucharbb,ucharaa)//显示子程序

{

dula=1;

P0=table[bb];

dula=0;

P0=0xff;

wela=1;

P0=0xef;

wela=0;

delay

(1);

dula=1;

P0=table[aa];

dula=0;

P0=0xff;

wela=1;

P0=0xdf;

wela=0;

delay

(1);

dula=1;

P0=table[dd];

dula=0;

P0=0xff;

wela=1;

P0=0xfb;

wela=0;

delay

(1);

dula=1;

P0=table[cc];

dula=0;

P0=0xff;

wela=1;

P0=0xf7;

wela=0;

delay

(1);

dula=1;

P0=table[ff];

dula=0;

P0=0xff;

wela=1;

P0=0xfe;

wela=0;

delay

(1);

dula=1;

P0=table[ee];

dula=0;

P0=0xff;

wela=1;

P0=0xfd;

wela=0;

delay

(1);

}

//==调时按键=======================================================//

voidkey01()//调时按键

{

if(key1==0)

{

delay(5);//消抖

if(key1==0);

while(!

key1);

delay(5);//松手检测

while(!

key1);

TR0=0;

ee++;

if(ee==10)

{

ee=0;

ff++;

}

if(ff==2&&ee==4)

{

ee=0;

ff=0;

}

display(ff,ee,dd,cc,bb,aa);

}

}

//==调分按键=======================================================//

voidkey02()//调分按键

{

if(key2==0)

{

delay(5);//消抖

if(key2==0);

while(!

key2);

delay(5);//松手检测

while(!

key2);

TR0=0;

cc++;

if(cc==10)

{

cc=0;

dd++;

}

if(dd==6)

dd=0;

display(ff,ee,dd,cc,bb,aa);

}

}

//==调秒按键======================================================//

voidkey03()//调秒按键

{

if(key3==0)

{

delay(5);//消抖

if(key3==0)

while(!

key3);

delay(5);//松手检测

while(!

key3);

TR0=0;

aa++;

if(aa==10)

{

aa=0;

bb++;

}

if(bb==6)

bb=0;

display(ff,ee,dd,cc,bb,aa);

}

}

//==暂停/继续计时按键=============================================//

voidkey04()//暂停/继续计时按键

{

if(key4==0)

{

delay(5);//消抖

if(key4==0);

while(!

key4);

del

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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