基于51单片机的数字时钟设计的毕业设计概要.docx

上传人:b****3 文档编号:6253019 上传时间:2023-05-09 格式:DOCX 页数:21 大小:256.76KB
下载 相关 举报
基于51单片机的数字时钟设计的毕业设计概要.docx_第1页
第1页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第2页
第2页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第3页
第3页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第4页
第4页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第5页
第5页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第6页
第6页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第7页
第7页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第8页
第8页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第9页
第9页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第10页
第10页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第11页
第11页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第12页
第12页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第13页
第13页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第14页
第14页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第15页
第15页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第16页
第16页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第17页
第17页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第18页
第18页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第19页
第19页 / 共21页
基于51单片机的数字时钟设计的毕业设计概要.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的数字时钟设计的毕业设计概要.docx

《基于51单片机的数字时钟设计的毕业设计概要.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字时钟设计的毕业设计概要.docx(21页珍藏版)》请在冰点文库上搜索。

基于51单片机的数字时钟设计的毕业设计概要.docx

基于51单片机的数字时钟设计的毕业设计概要

摘要2

Abstract3

第一章绪论4

1.1多功能数字钟设计的背景4

第二章AT89C51单片机简介4

2.1单片机介绍4

2.2单片机的应用特点5

2.3单片机的应用领域5

2.4单片机的中断与定时系统5

2.4.1MCS-51单片机中断系统5

2.4.2MCS-51单片机的定时器/计数器6

2.4.3MCS-51定时器/计数器的四种工作方式7

2.5AT89C51引脚功能介绍7

第三章设计方案9

3.1主程序9

3.2数码管显示模块10

3.3定时器计数器T0中断服务程序10

3.4按键处理模块10

第四章硬件电路设计10

4.1复位电路11

4.2时钟电路11

4.3按键电路12

4.4数码管显示电路13

4.5电源电路设计14

第五章软件设计与程序代码15

5.1软件选择与介绍15

5.1.1软件介绍15

5.1.2Proteus7.8的特点15

5.2软件仿真电路全图16

5.3源程序代码16

第六章结论21

参考文献22

致谢23

摘要

近几年,单片机在各个领域得到广泛的应用。

从工业到人们的日常生活,大部分的科技产品都是通过单片机来控制。

在它问世之前,自动控制设备得不到广泛的应用,这是因为控制设备的体积庞大,耗电量大,价格昂贵。

在第一台微处理器成功研制不久,第一个单片机就问世了。

因为其小巧的体积,低功耗,以及高效的性能,单片机受到了大家的欢迎。

本设计利用STC89C51单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用C语言进行软件编程,并用Proteus软件进行演示、验证。

主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机STC89C51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机的数字电子时钟。

它的计时周期为24小时,显满刻度为“23时59分59秒”,且配有8个独立键盘,可以灵活地调节时间和日期,并具有一定的扩展性。

关键词:

单片机,数字时钟,动态显示,LED数码管显示,独立按键。

第一章绪论

多功能数字钟设计的背景

单片机自从1976年由Intel公司推出MCS-48开始,迄今已有二十多年之久了。

由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,单片机应用领域已经从面向工业控制、通讯、交通、智能仪表等方面迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。

本文讨论的单片机多功能数字钟系统的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能多等多种特点。

不仅能满足所需要求而且还有很多功能可供扩展,有着广泛的应用实践领域。

第二章STC89C51单片机简介

2.1单片机介绍

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲:

一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可。

用它来做一些控制电器一类不是很复杂的工作足矣了。

我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!

它主要是作为控制部分的核心部件。

它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。

单片机是靠程序的,并且可以修改。

通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。

一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!

但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!

只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!

2.2单片机的应用特点

随着集成电路技术的发展,单片机的功能越变越强,涉及到各个电子应用领域。

目前单片机的系列也十分多,各有各的特点,如目前的MCS51系列、PIC系列等等,通过这几年的应用,普通感觉到特别需要单片机具有如下几个应用特点:

1.低功耗、宽电压工作范围,内部看门狗;

2.高速指令系统,单字节指令,精简指令集易学易用;

3.内部ROM结构,且具有廉价OTP(一次性写入程式)ROM,以便小批量生产,减少MASK风险;

4.程序保密功能,防止拷贝,保护成果;

5.方便的开发工具(仿真器与烧入器)。

2.3单片机的应用领域

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域。

2.4HT1380引脚功能介绍

1、HT1380的引脚功能

HT1380采用DIP8封装形式封装,其引脚分配如图3所示。

各引脚的功能及其用法如下。

1)、脚(NC):

空引脚。

2)、脚(X1):

内部振荡器输入脚。

3)、脚(X2):

内部振荡器输出脚。

HT1380片内集成有高增益的自激振荡放大电路,2)脚、3)脚为该放大电路的输入、输出引脚,2)脚、3)脚间接外接32.768khz的晶振,就可以产生频率为32.768khz的时钟信号。

4)、脚(GND):

接地引脚。

5)、脚(RST):

复位引脚。

当RST=0时,芯片复位,单片机对HT1380所建立的控制逻辑无效,所有数据传送终止。

当RST=1时,所建立的控制逻辑有效。

只有RST=1时,才可以对HT1380进行读、写或测试操作。

6)、脚(I/O):

数据输入/输出引脚。

7)、脚(SCLK):

串行时钟输入引脚。

8)、脚(VCC):

电源引脚。

2、HT1380的应用电路

HT1380的应用电路如下

HT1380的SCLK、I/O、RST脚分别与单片机的3根I/O口线P1.1、P1.2、P1.3相接,单片机的P1.1口线充当时钟线,向HT1380传送时钟信号,P1.2口线充当数据线,用来与HT1380之间传输数据,p1.3口线充当芯片选择控制线,控制芯片的选择。

C1、C2为5P~8P的小电容,起稳频和加速起振的作用。

第三章设计方案

通常通过单片机设计电子时钟有2种方法:

一是通过单片机内部的定时器计数器。

采用软件编程实现时钟计数,一般称为软时钟,这种方法硬件线路简单,程序比较复杂。

系统的功能一般与软件相关。

通常用于对时间精度要求不高的场合。

二是采用时钟芯片他的功能强大,功能不见集成在芯片内需,自动产生时钟等相关功能。

硬件成本较高,软件编程。

通常对时钟精确度要求较高的场合。

电子时钟的系统软件程序有、由主程序和子程序组成,主程序包含初始化参数设置,按键处理,数码管显示模块等。

在设计时候、各个模块都采用子程序结构设计。

在主程序中调用。

由于定时器,计数器采用中断方式处理,应此还用辨析定时器,中断服务子程序,在定时器,计数器中断服务子程序种对时钟进行调整。

3.1主程序

主程序执行流程图如图1所示。

主程序先对显示单元和定时器计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有建按下,则转入相应的功能程序。

图1主程序执行流程图

3.2系统框图

项目系统框图如图2所示。

 

3.3数码管显示模块

本设计的显示模块采用6位一体共阴极数码管,显示分为时钟显示模式,显示时钟模式,从右到左依次显示秒个位,秒十位,分个位,分十位,时个位,时十位;数码管显示的信息用6个内存单元存放,这6个内存单元为显示缓冲区,其中秒个位和秒十位,分个位和分十位,时个位和时十位分别由秒数据,分数据和小时数据分拆得到。

在本系统种数码管显示采用软件译码动态显示。

在存储器中首先建立一张显示信息字段码表,显示的时候,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出的所显示的字段码。

从P2口输出,同时在P1口将对应的位选码输出,选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。

3.4按键处理模块

按键处理设置为:

如果没有按键,则为时钟模式,时钟正常走时,当依次按下时间按键和秒按键时秒单元每次加1或减1,当加到59后跳为00,当按下分按键的时候,分单元每次加1或减1,当加到59的时候跳到00;当按下时按键的时候,时单元每次加1,当加到23的时候跳为00,反之亦然。

第四章硬件电路设计

4.1复位电路

MCS-51单片机的复位是由外部的复位电路来实现的。

复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。

上电复位:

上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。

上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。

为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。

上电自动复位是通过外部复位电路的电容充电来实现的。

只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。

按键复位:

电路在运行过程中,也可以通过按键进行复位。

当按下复位按键,复位引脚RST通过按键与地相接,得到低电平,从而实现复位。

电路图如图2所示:

图2复位电路

4.2时钟电路

时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。

因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。

常用的时钟电路有两种方式:

一种是内部时钟方式,另一种为外部时钟方式。

本文用的是内部时钟方式。

电路图如图3所示:

图3时钟震荡电路

MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。

这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。

4.3按键电路

按键的开关状态通过一定的电路转换为高、低电平状态。

按键闭合过程在相应的I/O端口形成一个负脉冲。

闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。

抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。

为了避免CPU多次处理按键的一次闭合,应采用措施消除抖动。

本文采用的是独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。

电路图如图4所示:

图4按键电路

P1.4口所接的按键为模式切换按键,当不按下此按键时为时钟显示模式,当按下此按键时为日期和星期显示模式。

当为时钟显示模式的时候,端口连接分别表示如下:

P0.4口表示调整秒、分“+”,按一下则时加1,当加到59后再加一次为0;

P0.3口表示调整秒、分“-”,按一下则时减1,当减到0后再减一次为59;

P0.4口表示调整时“+”,按一下则时加1,当加到23后再加一次为0;

P0.3口表示调整时“-”,按一下则时减1,当减到0后再减一次为23;

P0.2口表示确认键;

P0.1口表示调整秒按键;

P0.5口表示调整分按键;

P0.6口表示调整时按键;

4.4数码管显示电路

数码管是由6个发光二极管构成的显示器件。

在数码管中,若将二极管的阳极连在一起,称为共阳极数码管;若将二极管的阴极连在一起,称为共阴极数码管。

本设计用到的6个数码管均是共阴极的。

当发光二极管导通时,它就会发光。

每个二极管就是一个笔划,若干个二极管发光时,就构成了一个显示字符。

将单片机的I/O口控制相应的芯片与数码管的a-g相连,低电平的位对应的发光二极管亮,这样,由I/O口输出不同的代码,就可以控制数码管显示不同的字符。

本设计的6个数码管均采用动态显示方式,系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。

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

电路图如图5所示:

图5数码管显示电路

电路第五章软件设计与程序代码

5.1软件设计

5.1.1系统框图如图

5.1.2程序流程图如图

 

5.2软件仿真电路全图

图7软件仿真电路全图

此图为时钟显示模式,显示内容为15时9分49秒

图8软件仿真电路全图

此图为日期和星期显示模式,显示内容为6月4日星期二

5.3源程序代码

#include

#defineucharunsignedchar

#defineDCOUNT6

#defineMinusVal0x02

#definePlusVal0x04

#defineRightVal0x08

#defineLeftVal0x10

#defineTimeVal0x20

#defineDateVal0x40

#defineSetVal0x80

#defineCKeyVal25

#defineport_sP1

#defineport_bP2

#definekeyportP0

uchardatawcnt,second;

intdatatimcnt;

uchardatah,m,s;

ucharcodeled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//ucharcodeledctrl[]={0xfe,0xfd};

ucharbuf[8];

ucharcodeledctrl[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

ucharidatadisdat[6];

ucharidatakeytim;

uchardataflashsite;

ucharsecond_buff;

ucharm_buff;

ucharh_buff;

intk;

bitdown,keytreated,setdis,dattim;

voiddisplay(uchar);

voiddisplay_hms();

voidinit_T1(void);

voiddisdate(void);

voiddistim(void);

voidkey(void);

voidmain()

{

second_buff=0;

m_buff=0;

h_buff=0;

second=0;

h=m=s=0;

init_T1();

timcnt=0;

wcnt=0;

while

(1)

{display_hms();

//PCON|=0x01;

}

}

voidinit_T1(void)

{

TMOD=0x11;

TL1=(65536-9216)%256;

TH1=(65536-9216)/256;

TL0=(65536-1843)%256;

TH0=(65536-1843)/256;

PT1=1;

ET1=1;

ET0=1;

EA=1;

TR1=1;

TR0=1;

}

voidtim_T1(void)interrupt3using1

{

TL1=(65536-9216)%256;

TH1=(65536-9216)/256;

timcnt++;

if(timcnt>=100)

{

timcnt=0;

second++;

if(second>=60)

{second=0;

m++;}

if(m>=60)

{m=0;

h++;}

if(h>=24)h=0;

buf[0]=second%10;

buf[1]=second/10;

buf[2]=0x40;

buf[3]=m%10;

buf[4]=m/10;

buf[5]=0x40;

buf[6]=h%10;

buf[7]=h/10;

}

//display_hms(h,m,second);

}

/*voiddisplay(uchartime)

{

port_s=0;

port_b=ledctrl[wcnt];

if(wcnt==0)xzzx

{port_s=led[time%10];}

else

{port_s=led[time/10];}

wcnt++;

wcnt=wcnt%2;

}*/

voidtim_T0(void)interrupt1using2

{TL0=(65536-1843)%256;

TH0=(65536-1843)/256;

key();

wcnt++;

wcnt=wcnt%8;

}

voiddisplay_hms()

{

//port_s=0;

switch(wcnt)

{case0:

{port_b=ledctrl[wcnt];

port_s=led[buf[0]];break;}

case1:

{

port_b=ledctrl[wcnt];

port_s=led[buf[1]];break;}

case2:

{

port_b=ledctrl[wcnt];

port_s=buf[2];break;}

case3:

{

port_b=ledctrl[wcnt];

port_s=led[buf[3]];break;}

case4:

{

port_b=ledctrl[wcnt];

port_s=led[buf[4]];break;}

case5:

{

port_b=ledctrl[wcnt];

port_s=buf[5];break;}

case6:

{port_b=ledctrl[wcnt];

port_s=led[buf[6]];break;}

case7:

{port_b=ledctrl[wcnt];

port_s=led[buf[7]];break;}

}

}

voidinit_distim(void)

{distim();

flashsite=6;

setdis=0;

dattim=0;

}

voidinit_disdat(void)

{disdate();

flashsite=6;

setdis=0;

dattim=1;

}

voidinit_settim(void)

{distim();

flashsite=6;

setdis=1;

dattim=0;

}

voidinit_setdat(void)

{disdate();

flashsite=0;

setdis=1;

dattim=1;

}

voidkplus(void)//0x04确定

{//if(setdis)

//disdat[flashsite]=(disdat[flashsite]+1)%10;

second=second_buff;

m=m_buff;

h=h_buff;TR1=1;

}

voidkminus(void)//0x02秒的设置

{//if(setdis)

//disdat[flashsite]=(disdat[flashsite]+10-1)%10;

TR1=0;

second_buff=second;

k=0;

}

voidktim(void)//0x20分的设置

{//if(setdis)init_settim();

//elseinit_distim();

TR1=0;

m_buff=m;

k=1;

}

voidkdat(void)//0x40时的设置

{//if(setdis)init_setdat();

//elseinit_disdat();

TR1=0;

h_buff=h;

k=2;

}

voidkleft(void)//0x10自加

{//if(setdis)

//flashsite=(flashsite+1)%DCOUNT;

switch(k)

{

case(0):

second_buff++;

if(second_buff>59)second_buff=0;

buf[0]=second_buff%10;

buf[1]=second_buff/10;break;

case

(1):

m_buff++;

if(m_buff>59)m_buff=0;

buf[3]=m_buff%10;

buf[4]=m_buff/10;break;

case

(2):

h_buff++;

if(h_buff>23)h_buff=0;

buf[6]=h_buff%10;

buf[7]=h_buff/10;break;

}

}

voidkright(void)//0x08自减

{//if(setdis)

//flashsite=(flashsite+DCOUNT-1)%DCOUNT;

switch(k)

{

case(0):

second_buff--;

if(second_buff==255)second_buff=59;

buf[0]=second_buff%10;

buf[1]=second_buff/10;break;

case

(1):

m_buff--;

if(m_buff==255)m_buff=59;

buf[3]=m_buff%10;

buf[4]=m_buff/10;break;

case

(2):

h_buff--;

if(h_buff==255)h_buff=23;

bu

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

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

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

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