基于单片机的电子表的设计与制作Word下载.docx

上传人:b****1 文档编号:12962398 上传时间:2022-10-01 格式:DOCX 页数:21 大小:182.90KB
下载 相关 举报
基于单片机的电子表的设计与制作Word下载.docx_第1页
第1页 / 共21页
基于单片机的电子表的设计与制作Word下载.docx_第2页
第2页 / 共21页
基于单片机的电子表的设计与制作Word下载.docx_第3页
第3页 / 共21页
基于单片机的电子表的设计与制作Word下载.docx_第4页
第4页 / 共21页
基于单片机的电子表的设计与制作Word下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于单片机的电子表的设计与制作Word下载.docx

《基于单片机的电子表的设计与制作Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子表的设计与制作Word下载.docx(21页珍藏版)》请在冰豆网上搜索。

基于单片机的电子表的设计与制作Word下载.docx

1.1内容摘要

本次课程设计基于单片机原理技术介绍了一款于AT89C51芯片作为核心控制器的单片机电子表的设计与制作,主要有两个功能:

时钟和秒表。

其制作流程主要包括硬件电路原理的实现方案设计、软件程序编辑的实现、电子表正常工作的流程、原理图仿真实现、硬件实物的调试过程。

该单片机数字电子表采用LED数码管能够准确显示时间(显示格式为:

时时,分分,秒秒),可随时进行时间调整,时间可采用24小时制显示,还可实现时钟与秒表的切换,暂停与调时调分调秒,可按自己的要求设置扩展其它的功能。

1.2实验基本原理

利用AT89C51单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为0,每中断一次中断计数初值加1,当加到100时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。

为了将时间在6位LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

第2章设计思路及框图

2.1设计思路

针对要实现的功能,采用AT89S51单片机进行设计,AT89S51单片机是一款低功耗,高性能CMOS8位单片机,第一,熟悉AT89S51单片机,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

这是前期准备工作。

第二,设计硬件部分:

依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。

第三,画图部分:

设计好电路后进行画图。

第四,软件部分:

先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。

第五部分是软件仿真部分:

软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。

第六部分是硬件实现部分:

连接电路并导入程序检查电路,实现想要的功能。

2.2设计框图

此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:

显示电路用8个共阴极数码显示管、按键模块、晶振模块。

显示管分别显示:

小时、分钟和秒,通过动态扫描进行显示。

电路的总体设计框架如下:

 

图1

第3章硬件的设计

3.1主控制部件

89C51是一个8位单片机,片内ROM全部采用FLASHROM技术,晶振时钟为12MHz。

89C51是标准的40引脚双列直插式集成电路芯片,有4个八位的并行双向I/O端口,分别记作P0、P1、P2、P3。

第31引脚需要接高电位使单片机选用内部程序存储器;

第40脚为电源端VCC,接+5V电源,第20引脚为接地端VSS,通常在VCC和VSS引脚之间接0.1μF高频滤波电容。

硬件原理图如图2所示

图2

3.2显示模块

方案一:

静态显示。

静态显示,即当显示器显示某一字符时,相应的发光二极管恒定导通或截止。

该方式每一位都需要一个8位输出口控制。

静态显示时较小电流能获得较高的亮度,且字符不闪烁。

但因当所需显示的位数较多时,静态显示所需的I/O口数较大,造成资源的浪费。

方案二:

动态显示。

动态显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。

利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。

显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。

调整参数可实现较高稳定度的显示。

动态显示节省了I/O口,降低了能耗。

从节省单片机芯片I/O口和降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案二。

3.3晶振模块

单片机芯片可使用内部时钟电路和外部时钟电路两种方式产生电路所需的时钟脉冲,内部时钟电路实现可用石英晶体和微调电容外接即可达到,外部时钟电路实现需要一个外部脉冲源引入脉冲信号以保证个单片机之间时钟信号的同步。

从硬件实现难易角度考虑,内部时钟电路的实现比外部时钟电路的实现更简易。

既本数字电子钟设计所需的时钟源采用内部时钟电路实现。

所用定时方式为工作方式1,石英晶振为12M,即最小定时时间为1us,最大定时时间约为65.5ms,其电路图如下图2所示。

图3

3.4按键模块

本数字电子钟设计所需按键用于进行显示时间的调整与设置扩展的小键盘。

单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求,本电路采用P1口与按键相连。

其电路图如图4所示:

图4

3.5驱动模块

从实物制作简易程度与驱动数码管段码能力角度出发,本数字电子钟设计采用数码管段码与AT89C51P0口相连,单片机AT89C51的P2口控制数码管的片选信号,通过编程,单片机芯片即可控制段码电平的高低的方式实现数码管段码控制。

第4章电路设计原理图

图5

第5章程序设计

5.1程序流程图

在主程序的开始定义了一组固定单元用来存储计数的分、秒、时的存储单元。

在主程序中,对不同的按键进行扫描,实现秒表,时间调整。

系统总体流程图如图6所示。

图6

系统子程序流程图如图7所示:

5.2源程序

程序清单如下:

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

//七段共阴数码显示管段码表//

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

//定义初始化变量//

//秒表部分//

ucharDecisec=0;

//分秒//

ucharSec=0;

//秒//

ucharMint=0;

//分//

//时钟部分//

ucharSeconds=0;

ucharMinutes=0;

ucharHours=0;

ucharCount=0;

ucharNumb=0;

//按键部分//

sbitCHANGE=P1^0;

//切换:

可实现跑表与时钟互切//

sbitSTART=P1^1;

//开始//

sbitSTOP=P1^2;

//暂停//

sbitRST=P1^3;

sbitrst=P1^4;

sbitjia1=P1^5;

sbitjia2=P1^6;

sbitjia3=P1^7;

//复位//

//函数声明//

voiddelay(ucharms);

//延迟函数//

voidtime_pro1();

//秒表处理函数//

voidtime_pro2();

//时钟处理函数//

voidkeyscan();

//键盘扫描//

voiddisplay1();

//数码管显示秒表//

voiddisplay2();

//数码管显示时钟//

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

//主函数//

voidmain()

{

P1=0xff;

TMOD=0x11;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

TH1=(65536-10000)/256;

TL1=(65536-10000)%256;

EA=1;

ET0=1;

ET1=1;

TR0=1;

while

(1)

{

keyscan();

if(Numb==1)

{

display1();

}

if(Numb==0)

display2();

if(rst==0)

Hours=0;

Seconds=0;

Minutes=0;

}

if(jia1==0)

{

delay(5);

if(jia1==1)

{

Hours++;

if(Hours==24)

{Hours=0;

}

}

}

if(jia2==0)

{

if(jia2==1)

{

Minutes++;

if(Minutes==60)

{Minutes=0;

}

if(jia3==0)

if(jia3==1)

{

Seconds++;

if(Seconds==60)

{Seconds=0;

}

//延迟函数//

voiddelay(ucharms)

{

uchari,j;

for(i=ms;

i>

0;

i--)

for(j=500;

j>

j--);

//秒表处理函数//

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

voidtime_pro1()

if(Decisec==100)

{

Decisec=0;

Sec++;

if(Sec==1000)

Sec=0;

//时钟处理函数//

voidtime_pro2()

if(Seconds==60)

Seconds=0;

Minutes++;

if(Minutes==60)

Hours++;

if(Hours==24)

Hours=0;

//键盘扫描函数 

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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