基于单片机系统 电子钟设计.docx

上传人:b****6 文档编号:5959072 上传时间:2023-01-02 格式:DOCX 页数:15 大小:315.97KB
下载 相关 举报
基于单片机系统 电子钟设计.docx_第1页
第1页 / 共15页
基于单片机系统 电子钟设计.docx_第2页
第2页 / 共15页
基于单片机系统 电子钟设计.docx_第3页
第3页 / 共15页
基于单片机系统 电子钟设计.docx_第4页
第4页 / 共15页
基于单片机系统 电子钟设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于单片机系统 电子钟设计.docx

《基于单片机系统 电子钟设计.docx》由会员分享,可在线阅读,更多相关《基于单片机系统 电子钟设计.docx(15页珍藏版)》请在冰豆网上搜索。

基于单片机系统 电子钟设计.docx

基于单片机系统电子钟设计

基于单片机系统的电子钟设计

目录

第一部分课程设计任务书1

一、课程设计题目1

二、课程设计时间1

三、课程设计提交方式1

四、设计要求1

第二部分课程设计报告1

一、AT89S51简介1

二、电子钟系统简介4

三、设计思路8

四、硬件设计电路8

五、软件设计流程10

六、程序源代码10

七、结束语13

八、参考文献13

第一部分课程设计任务书

1、课程设计题目

基于单片机系统的电子钟设计

二、课程设计时间

一周

三、课程设计提交方式

提交打印课程设计报告

4、设计要求

设计以单片机(AT89C51)为核心,时钟芯片DS1302、数码管显示驱动芯片MAX7219等元器件组成的电子钟系统。

实现可调的年、月、日、时、分、秒的显示。

第二部分课程设计报告

1、AT89S51单片机简介

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

图2.11AT89C51单片机

1.主要特性

与MCS-51兼容4K字节可编程闪烁存储器寿命:

1000写/擦循环数据保留时间:

10年全静态工作:

0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路

2.管脚说明

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

  P3口:

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

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

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

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

表一AT89C51的一些特殊功能口

P3.0RXD

串行输入口

P3.1TXD

串行输出口

P3.2/INT0

外部中断0

P3.3/INT1

外部中断1

P3.4T0

记时器0外部输入

P3.6/WR

外部数据存储器写选通

P3.7/RD

外部数据存储器读选通

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

  XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

  XTAL2:

来自反向振荡器的输出。

振荡器特性:

  XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

2、电子钟系统简介

DS1302的结构及工作原理:

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

引脚功能及结构

         

图2.12DS1302芯片

  图示表出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由Vcc1或Vcc2两者中的较大者供电。

当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

当Vcc2小于Vcc1时,DS1302由Vcc1供电。

X1和X2是振荡源,外接32.768kHz晶振。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

I/O为串行数据输入输出端(双向),SCLK始终是输入端。

DS1302的寄存器:

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。

时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。

DS1302与RAM相关的寄存器分为两类:

一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

MAX7219工作原理简介:

MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。

该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。

它的操作很简单,MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。

此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。

图2.1.3.1DS1302芯片MAX7219的外部引脚分配

引脚分配及功能 

图2.1.3.2MAX7219的内部引脚分配

各引脚的功能为:

DIN:

串行数据输入端

DOUT:

串行数据输出端,用于级连扩展

LOAD:

装载数据输入CLK:

串行时钟输入

DIG0~DIG7:

8位LED位选线,从共阴极LED中吸入电流

SEGA~SEGGDP7段驱动和小数点驱动

ISET:

通过一个10k电阻和Vcc相连,设置段电流

寄存器介绍 

MAX7219内部的寄存器如图所示,主要有:

译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。

编程时只有正确操作这些寄存器,MAX7219才可工作。

图2.1.3.3MAX7219内部的相关寄存器

分别介绍如下:

(1)译码控制寄存器(X9H)

如图所示,MAX7219有两种译码方式:

B译码方式和不译码方式。

当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。

实际应用中可以按位设置选择B译码或是不译码方式。

图2.1.3.4MAX7219的译码控制寄存器

(2)扫描界限寄存器(XBH)

如图所示,此寄存器用于设置显示的LED的个数(1~8),比如当设置为0xX4时,LED0~5显示。

 

图2.1.3.4MAX7219的扫描界限控制寄存器

(2)亮度控制寄存器(XAH)

共有16级可选择,用于设置LED的显示亮度,从0xX0~0xXF

(3)关断模式寄存器(XCH)

共有两种模式选择,一是关断状态,(最低位D0=0)一是正常工作状态(D0=1)。

3、设计思想

 

图2.2基于Proteus的单片机系统设计流程

四、硬件电路设计

主要元器件功能介绍:

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时。

具有调时功能。

时钟操作可通过AM\PM指示决定采用24或12小时格式。

MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片。

采用三线制串行接口技术进行数据传送,可直接与单片机连接,用户能方便地修改内部参数实现多位LED数码管显示。

内含有硬件动态扫描显示控制,每块芯片可驱动8个LED数码管。

Proteus电路图设计:

运行Proteus的ISIS后出现程序主窗口界面,鼠标左键单击窗口左侧的元器件工具栏的component.按钮,接着再点击窗口左侧的元器件选择区的PickDivices.按钮,弹出如图1所示的PickDevices窗口,再在Categ栏里点击MicroprocessorICs项后,在Results栏里会出现各种类型的CPU器件,找到AT89C51后双击,AT89C51就被添加到当前窗口左侧的元器件列表区了。

用同样的方法依次把DS130、MAX7219、数码管、晶振以及多个电阻、电容也添加到器件列表区里。

然后再依次点击列表区里的器件,单击左键把他们放到绘图区,右键选中元件,并编辑其属性,合理布局后,进行连线。

连线时当鼠标的指针靠近一个对象的引脚时,跟着鼠标的指针rICs就会出现一个“×”提示符号,点击鼠标左键即可画线了,需要拐弯时点击一下即可,在终点再点击确认一下就画出了一段导线,所有导线画完后,点击工具栏的Inter-sheeTerminal.按钮,添加上电源和接地符号,原理图的绘制就完成了。

图3.2.2Proteus中设计的电子时钟系统原理图

五、软件设计框图

图4.1系统程序流程图

6、程序源代码

#include"AT89X51.H"

#include"delay.h"

#include"max7219.c"

#include"music.c"

#defineucharunsignedchar

#defineuintunsignedintidata

sbitADD=P1^1;

sbitSUB=P1^0;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

voidshowDay(void);//显示时间

voidshowData(void);//显示日期

voidshowDishi(void);//显示定时

voidint_0(void);//中断0

voidint_1(void);//中断1

voidflash_max7219(unsignedcharn);//闪一个位max7219

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

/*实时时钟模块时钟芯片型号:

DS1302*/

/*/

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

sbitT_CLK=P2^3;/*实时时钟时钟线引脚*/

sbitT_IO=P2^4;/*实时时钟数据线引脚*/

sbitT_RST=P2^5;/*实时时钟复位线引脚*/

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

voidv_RTInputByte(ucharucDa);//往DS1302写入1Byte数据

ucharuc_RTOutputByte(void);//从DS1302读取1Byte数据

voidv_W1302(ucharucAddr,ucharucDa);//往DS1302写入数据

ucharuc_R1302(ucharucAddr);//读取DS1302某地址的数据

//voidv_BurstW1302T(uchar*pSecDa);//往DS1302写入时钟数据(多字节方式)

//voidv_BurstR1302T(uchar*pSecDa);//读取DS1302时钟数据

//voidv_BurstW1302R(uchar*pReDa);//往DS1302寄存器数写入数据(多字节方式)

//voidv_BurstR1302R(uchar*pReDa);//读取DS1302寄存器数据

voidv_Set1302(uchar*pSecDa);//设置初始时间,,输入:

pSecDa:

初始时间地址。

初始时间格式为:

秒分时日月星期年

voidv_Get1302(ucharucCurtime[]);//读取DS1302当前时间

 

ucharshowTime[8]={0,0,10,0,0,10,0,0};//显示的时间**********************************************全局变量

ucharsetTime[2]={0,0};//定时的设定

uchartime[7]={0,0x59,0x19,0x24,0x7,0x01,0x08};//秒分时日月星期年

ucharTmod=7;//此时的调节模式

voidmain()

{

delay_ms(200);

//sound();

initMAX7219();//初始化max7219

cls();//清屏max7219

//v_Get1302(&time);

//v_Set1302(&time);

EX0=1;

EX1=1;

IT1=1;//下降沿触发

IT0=1;

EA=1;//开中断

v_Get1302(&time);

showDay();

//int_1();

//int_0();

while

(1)

{

v_Get1302(&time);

showDay();

if((setTime[0]==time[2])&&(setTime[1]==time[1]))sound();

}

}

 

//************************************************显示时间

voidshowDay(void)

{

//将数据转化为显示格式

showTime[7]=time[0]&0x0f;//个位

showTime[6]=time[0]>>4;//十位

showTime[4]=time[1]&0x0f;

showTime[3]=time[1]>>4;

showTime[1]=time[2]&0x0f;

showTime[0]=time[2]>>4;

showTime[2]=showTime[5]=10;

disp_88(&showTime);

}

//*************************************************显示日期

voidshowData(void)

{

showTime[7]=time[3]&0x0f;

showTime[6]=time[3]>>4;

showTime[4]=time[4]&0x0f;

showTime[3]=time[4]>>4;

showTime[1]=time[6]&0x0f;

showTime[0]=time[6]>>4;

showTime[2]=showTime[5]=10;

disp_88(&showTime);

}

//*************************************************显示定时

voidshowDishi(void)

{

showTime[1]=setTime[0]&0x0f;

showTime[0]=setTime[0]>>4;

showTime[4]=setTime[1]&0x0f;

showTime[3]=setTime[1]>>4;

showTime[6]=12;

showTime[7]=13;

showTime[2]=showTime[5]=10;

disp_88(&showTime);

}

七、结束语

本文的电子钟系统是以单片机(AT89C51)为核心,时钟芯片DS1302、数码管显示驱动芯片MAX7219等元器件来共同组成的。

具体介绍了如何应用ProtelDXP进行电路原理图设计,KeilC51软件来调试程序以及Proteus的ISIS软件进行单片机系统的电子钟设计与仿真,以实现硬件软化的目的。

通过这次单片机课程设计,不仅加深了我们对单片机理论知识的理解,学会如何将理论很好地应用到实际当中去,而且学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。

创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。

八、参考文献

[1]曹巧媛主编.单片机原理及应用(第二版).北京:

电子工业出版社,2002

[2]何力民编.单片机高级教程.北京:

北京航空大学出版社,2000

[3]金发庆等编.传感器技术与应用.北京机械工业出版社,2002

[4]王锦标,方崇智.过程计算机控制.北京:

清华大学出版社,1997;36~40

[5]邵惠鹤.工业过程高级控制.上海:

上海交通大学出版社,1997;58—62,78—101

[6]胡寿松.自动控制原理.北京:

国防工业出版社,2000;103—124

[7]刘伯春.智能PID调节器的设计及应用.电子自动化,1995;(3):

20~25

[8]周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:

航空航天

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

当前位置:首页 > IT计算机 > 互联网

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

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