6位LED显示时钟计时器Word文档下载推荐.docx

上传人:b****6 文档编号:17654265 上传时间:2022-12-07 格式:DOCX 页数:14 大小:280.99KB
下载 相关 举报
6位LED显示时钟计时器Word文档下载推荐.docx_第1页
第1页 / 共14页
6位LED显示时钟计时器Word文档下载推荐.docx_第2页
第2页 / 共14页
6位LED显示时钟计时器Word文档下载推荐.docx_第3页
第3页 / 共14页
6位LED显示时钟计时器Word文档下载推荐.docx_第4页
第4页 / 共14页
6位LED显示时钟计时器Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

6位LED显示时钟计时器Word文档下载推荐.docx

《6位LED显示时钟计时器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《6位LED显示时钟计时器Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

6位LED显示时钟计时器Word文档下载推荐.docx

3.硬件设计

时钟计时器的硬件电路如图所示。

该电路采用AT89S52单片机最小化应用实际;

采用共阳7段LED显示器;

P0口输出段码数据;

P2.0~P2.5口作列扫描输出;

P1.0、P1.1、P1.2、和P1.3口接4个按键开关,用于调时及功能设置;

P1.7端口接5v的小蜂鸣器,用于按键发音及定时提醒、整点到时提醒等;

为了提供共阳LED数码管的列扫描驱动电压,用三极管9012做电源驱动输出;

采用12MHZ晶振,可提高秒计时的精确性。

4.实验目的

1.掌握stc89c52编程原理。

a.掌握stc89c52可编程并行接口的工作原理及初始化方法,验证各种工作方式的功能。

b.掌握用stc89c52扩展PC机并行接口的方式。

c.了解stc89c52工作在方式1时,利用应答信号控制数据传输的过程。

2.了解键盘电路的工作原理。

矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。

在行线和列线的每一个交叉点上,设置一个按键。

这样键盘中按键的个数是4×

4个。

这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。

3.掌握键盘接口电路的编程方法。

设计人机界面接口,要求在微机屏幕上动态地显示当前实验的内容和实验的结果,包括stc89c52的工作方式,输入的数据和输出的结果

设计人机界面接口,要求在微机屏幕上,以菜单方式列出并行接口stc89c52原理实验的内容,并根据实验内容设置好工作方式选择跳线开关,用户可以通过键盘选择实验的内容。

设计原理与分析

1、实验原理:

为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。

 

(1)最小系统及控制原理图

(2)LED显示及驱动

4.软件设计

主程序

本设计中计时采用定时器T0中断完成,秒表使用定时器T1中断完成。

主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。

其主程序执行流程如下图

按时间鸣叫次数

以上为主程序流程图

显示子程序

时间显示子程序每次显示6个连续内存单元的十进制BCD码数据,首地址在调用显示程序时现指定。

显示时,先取出内存地址中的数据,然后查的对应的显示用段码从P0口输出,P2口将对应段码选中供电,就能显示该地址单元的数据值。

为了显示小数点及“-”“A”等特殊字符,在显示班级和计时时应采用不同的显示子程序。

定时器T0中断服务程序

定时器T0用于时间计时。

定时溢出中断周期设为50ms,中断进入后先进行定时中断初值校正,当中断里累计20次时,对秒计数单元进行加1操作。

时钟计数单元地址分别在70H~71H、76H~77H、78H~79H中,最大计时值为23时59分59秒。

7AH单元内存放“熄灭符“数据(#0A),用于时间调整时的闪烁功能。

在计数单元中,采用十进制BCD码计数,满10进位。

流程图如下

T0中断计时程序流程图

5.系统调试

调试分为硬件调试和软件调试

硬件调试:

在焊接电路板的时候,应该从最基本的最小系统开始,分模块,逐个进行焊接测试。

在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,要不然发生错误时,不知道到底是哪一方出错了。

当然,在设计的过程中也存在着失误和不足,在调试中进行修改了。

软件调试:

软件为老师所提供提供,其原理在上一模块以作说明,在这里

再作说明,软件经调试无误,直接将其下再到单片机中,看是否达到所要的效果

软件部分是先参考书上的例子,然后自己根据硬件电路写程序,

由于以前所学是单片机汇编语言,所以这个系统在编写程序过程中都采用汇编语言编写。

刚刚开始,编写不会一次性通过,经过仔细分析修改最后编译成功。

6.设计总结

本文是关于基于ST89S52设计的时钟计时器,能够进行计时,显示时间,定时提醒等功能。

是非常实用的一个设计,此次的设计对于我们更好的学习和掌握相关知识有很大的帮助。

在此次设计中,我们得到以下体会:

一、在这次时钟计时器设计的过程让我进一步熟悉KEIL及Proteus的使用。

二、重新复习并进一步学习了MCS-52优点,明确了研究目标。

三、在后的设计中,既要想到电路器件的联合使用,又要灵活变通,举一反三。

四、在焊接方面,我们了解到焊接某些器件时,要先消去电烙铁上的静电,防止静电对芯片特别是放大器件造成伤害,焊接二极管、三极管等芯片时要快,防止持续高温损坏芯片。

我们在焊接时争取一次性焊接成功,当焊接好时再去检查时非常困难,所以要非常的仔细。

五、从中我们学习到了大家的团结是非常重要的,组里的每一个成员都是必不可少的,因此团结合作的精神是非常的重要的。

课程设计心得

在此次设计中,我们得到以下体会:

二、重新复习并进一步学习了单片机,明确了研究目标。

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

//

//采用8位LED动态扫描时钟演示程序

//LRM2004.03.31

//使用12MHZ晶振,P0口输出段码,P2口作列扫描,用共阳LED数码管

//

#include"

reg51.h"

codechardis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};

/*共阳LED段码表"

0"

"

1"

2"

3"

4"

5"

6"

7"

8"

9"

不亮"

*/

codecharscan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//列扫描控制字

datachardisdata[6]={0x00,0x00,0x00,0x00,0x00,0x00};

//计时单元数据初值,共6个

datachardis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};

//显示单元数据,共6个数据

datacharcon1s=0x00,con04s=0x00,con=0X00;

//1秒定时用

sbitkey0=0x90;

sbitkey1=0x91;

sbitkey2=0x92;

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

//1毫秒延时程序//

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

delay1ms(intt)

{

inti,j;

for(i=0;

i<

t;

i++)

for(j=0;

j<

120;

j++)

;

}

//键扫描子程序//

keyscan()

EA=0;

if(key0==0)

{

delay1ms(10);

while(key0==0);

if(dis[con]==10)

{dis[7]=dis[con];

dis[con]=dis[6];

dis[6]=dis[7];

con++;

TR0=0;

ET0=0;

TR1=1;

ET1=1;

if(con>

=6)

{con=0;

TR1=0;

ET1=0;

TR0=1;

ET0=1;

}

if(con!

=0)

if(key1==0)

while(key1==0);

disdata[con]++;

if(disdata[con]>

=10)

{disdata[con]=0;

dis[con]=disdata[con];

dis[6]=0x0a;

if(key2==0)

while(key2==0);

if(disdata[con]==0)

{disdata[con]=0x09;

else{disdata[con]--;

EA=1;

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

//扫描程序//

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

scan()

chark;

for(k=0;

k<

6;

k++)

P0=dis_7[dis[k]];

P2=scan_con[k];

delay1ms

(1);

P2=0xff;

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

//初始化程序//

clearmen()

inti;

dis[i]=disdata[i];

TH0=0x3C;

TL0=0xB0;

//;

50MS定时初值(T0计时用)

TH1=0x3C;

TL1=0xB0;

50MS定时初值(T1计时用)

TMOD=0X11;

//主程序//

/*********/

main()

clearmen();

while

(1)

scan();

keyscan();

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

//1秒中断处理程序//

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

voidtime_intt0(void)interrupt1

con1s++;

if(con1s==20)

con1s=0x00;

disdata[0]++;

if(disdata[0]>

disdata[0]=0;

disdata[1]++;

if(disdata[1]>

disdata[1]=0;

disdata[2]++;

if(disdata[2]>

disdata[2]=0;

disdata[3]++;

if(disdata[3]>

disdata[3]=0;

disdata[4]++;

if(disdata[4]>

disdata[4]=0;

disdata[5]++;

}

if(disdata[5]==2)

{

if(disdata[4]==4)

{

disdata[4]=0;

disdata[5]=0;

}

}

}

}

dis[0]=disdata[0];

dis[1]=disdata[1];

dis[2]=disdata[2];

dis[3]=disdata[3];

dis[4]=disdata[4];

dis[5]=disdata[5];

ET0=1;

//0.4秒闪烁中断程序//

voidtime_intt1(void)interrupt3

con04s++;

if(con04s==8)

con04s=0x00;

dis[7]=dis[con];

EA=1;

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

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

当前位置:首页 > 自然科学 > 化学

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

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