89C51单片机课程设计之秒表设计实验报告Word文档格式.docx

上传人:b****5 文档编号:16896102 上传时间:2022-11-26 格式:DOCX 页数:13 大小:123.81KB
下载 相关 举报
89C51单片机课程设计之秒表设计实验报告Word文档格式.docx_第1页
第1页 / 共13页
89C51单片机课程设计之秒表设计实验报告Word文档格式.docx_第2页
第2页 / 共13页
89C51单片机课程设计之秒表设计实验报告Word文档格式.docx_第3页
第3页 / 共13页
89C51单片机课程设计之秒表设计实验报告Word文档格式.docx_第4页
第4页 / 共13页
89C51单片机课程设计之秒表设计实验报告Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

89C51单片机课程设计之秒表设计实验报告Word文档格式.docx

《89C51单片机课程设计之秒表设计实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《89C51单片机课程设计之秒表设计实验报告Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

89C51单片机课程设计之秒表设计实验报告Word文档格式.docx

5相关查阅资料

1.课程设计的目的和任务

1.1单片机秒表课程设计的概述

一、课程设计题目

秒表系统设计——用STC89C52RC设计一个4位LED数码显示“秒表”,显示时间为00.00~99.99秒,每10毫秒自动加一,每1000毫秒自动加一秒。

二、增加功能

增加一个“复位”按键(即清零),一个“暂停”和“开始”按键。

三、课程设计的难点

单片机电子秒表需要解决三个主要问题,一是有关单片机定时器的使用;

二是如何实现LED的动态扫描显示;

三是如何对键盘输入进行编程。

四、课程设计内容提要

本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及课程箱上的按键来设计计时器。

将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。

其中本课程设计有两个开关按键:

其中key1按键按下去时开始计时,即秒表开始键(同时也用作暂停键),key2按键按下去时数码管清零,复位为“00.00”.

五、课程设计的意义

1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。

2)掌握定时器、外部中断的设置和编程原理。

3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

4)该课程通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义

六、课程设计仪器

a)集成电路芯片8051,七段数码管,89C51单片机开发板

b)MCS-51系列单片机微机仿真课程系统中的软件(Keiluvision2)。

该课程设计要求进行计时并在数码管上显示时间,则可利用MCS-51系列单片机的芯片AT89C52的P3.2,P3.5作为按键的入口;

定时器T1作为每0.01秒加一的定时器。

其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;

“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时。

方框图如下图1:

开关

MCS-51

AT89C52RC

LED显示

图1数字秒表设计导向

1.3.1设计指标。

了解8051芯片的的工作原理和工作方式,使用该芯片对LED数码管进行显示控制,实现用单片机的端口控制数码管,显示分、秒,并能用按钮实现秒表起动、停止、99秒、清零等功能,精确到0.01秒。

要求选用定时器的工作方式,画出使用单片机控制LED数码管显示的电路图,并实现其硬件电路,并编程完成软件部分,最后调试秒表起动、停止、清零等功能。

1.3.2设计要求

1画出电路原理图(或仿真电路图);

2软件编程与调试;

3电路仿真与调试;

2.软件与硬件设计

单片机应用系统由硬件系统和软件系统两部分组成。

硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。

软件系统包括监控程序和各种应用程序。

在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。

与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。

在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。

在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。

配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED指示灯就可以进行处理了。

在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。

11.0592MHz晶振

2个独立式的按键

电源指示灯

电源开关

4个数码管显示

STC89C52RC

图2系统硬件结构框

此次选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。

其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图3所示:

开始

系统初始化

While

(1)

数码管显示选择

按键的扫描及处理

图3

3.1源程序及注释

/*-----------------------------------------------

名称:

数码管显示,按键控制秒表

论坛:

编写:

shifang

日期:

2009.5

修改:

内容:

中断按键控制,数码管显示,中断0控制计时和停止,中断1清零

------------------------------------------------*/

#include<

reg52.h>

//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

unsignedintmsecond,second;

//定义全局变量

bitGoFlag;

//定义停止,计时标志

#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换

sbitLATCH1=P2^2;

//定义锁存使能端口段锁存

sbitLATCH2=P2^3;

//位锁存

sbitKEY=P3^2;

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

//显示段码值0~9

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

//分别对应相应的数码管点亮,即位码

unsignedcharTempData[8];

//存储显示值的全局变量

voidDelayUs2x(unsignedchart);

//函数声明

voidDelayMs(unsignedchart);

voidDisplay(unsignedcharFirstBit,unsignedcharNum);

voidInit_Timer0(void);

voidCLR(void);

/*------------------------------------------------

主函数

voidmain(void)

{

unsignedcharnum=0;

EX0=1;

//外部中断0开

IT0=1;

//IT1=0表示边沿触发

EX1=1;

//外部中断1开

IT1=1;

//IT1=1表示边沿触发

Init_Timer0();

while

(1)//主循环

{

TempData[0]=dofly_DuanMa[second/10];

//分解显示信息,如要显示68,则68/10=668%10=8

TempData[1]=dofly_DuanMa[second%10];

TempData[2]=0x40;

//"

-"

TempData[3]=dofly_DuanMa[msecond/10];

TempData[4]=dofly_DuanMa[msecond%10];

//主循环中添加其他需要一直工作的程序

}

}

显示函数,用于动态扫描数码管

输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示

如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

voidDisplay(unsignedcharFirstBit,unsignedcharNum)

staticunsignedchari=0;

DataPort=0;

//清空数据,防止有交替重影

LATCH1=1;

//段锁存

LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit];

//取位码

LATCH2=1;

//位锁存

LATCH2=0;

DataPort=TempData[i];

//取显示数据,段码

i++;

if(i==Num)

i=0;

定时器初始化子程序

voidInit_Timer0(void)

TMOD|=0x01;

//使用模式1,16位定时器,使用"

|"

符号可以在使用多个定时器时不受影响

//TH0=0x00;

//给定初值

//TL0=0x00;

EA=1;

//总中断打开(总中断控制开关)

ET0=1;

//定时器中断打开(允许中断0的发生)

TR0=1;

//定时器开关打开(定时器T0开始工作)

定时器中断子程序

voidTimer0_isr(void)interrupt1

staticunsignedcharnum;

TH0=(65536-2000)/256;

//重新赋值2ms

TL0=(65536-2000)%256;

Display(0,8);

if(GoFlag)

num++;

if(num==5)

num=0;

msecond++;

if(msecond==100)//100进1

msecond=0;

second++;

//秒加1

if(second==100)

second=0;

外部中断0程序

voidISR_INT0(void)interrupt0

if(!

KEY)//如果检测到低电平,说明按键按下

DelayMs(20);

//延时去抖,一般10-20ms

if(!

KEY)//再次确认按键是否按下,没有按下则退出

GoFlag=!

GoFlag;

//利用外部中断打开和关闭定时标志用于开始和停止计时

}

外部中断1程序

voidISR_INT1(void)interrupt2

if(GoFlag==0)//停止时才可以清零

CLR();

}/*------------------------------------------------

数值清零

voidCLR(void)

//利用外部中断清零

voidDelayUs2x(unsignedchart)

{

while(--t);

voidDelayMs(unsignedchart)

while(t--)

//大致延时1mS

DelayUs2x(245);

图4按键原理图

图5显示电路

图6电源电路原理图

通过最后软件对程序的编译,组建,执行,还有最终生成.hex文件,把.hex下载到TX-1C开发板的STC89C52RC单片机上的最终效果图如下:

下图:

开始运行,执行自动加1

下图为复位后的显示

“开始自加”运行,一直加到99秒

以下是我在设计这个秒表过程中所总结的心得,整个过程主要是:

设计程序----修正程序----扩展功能----完善程序,经过自己的独立思考与查阅相关知识,最终完成这个作品.

通过对本次课程的课程设计,使自己深刻的认识到自己的很多不足之处,在实际动手操作能力的不足,在进行程序编程时,自己需要,认真审题,看懂题目的要求!

对于软件编程不益太简单或者太难。

做到既能把课题完成又能锻炼自己的能力!

根据课题要求,复习相关的知识,查询相关的资料。

根据课程条件,找到适合的方案,找到需要的元器件及工具,准备课程。

根据课程设计的要求和自己所要增加的功能写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序和增加额外的功能程序。

然后再进行程序调试和相应的修改,以达到能够实现所要求的功能的目的。

还要根据课程的实际情况,添加些额外程序来使系统更加的稳定,如开关的去抖(采用延迟)。

程序要尽量做到由各个子程序组成,在有些程序后面最好加注释,这样在程序出错的检查过程中可以更容易查找的到,也更简洁,更明白易懂。

该课程设计的程序可以参考MCS-51系列单片机,也可自己根据自己熟悉的方法来编程如单片机C语言。

在设计控制开关时,注意2个中断的打开和关闭的先后顺序,否则就会出错。

这次的单片机课程设计重点是理论与实际的相结合。

该设计从头到尾都要自己参与,熟悉了对整个设计的过程,更系统的锻炼了自己。

2011年12月23日

年月日

年月日

5相关资料查阅

【1】孙育才编著.MCS-51系列单片微型计算机及其应用.东南大学出版社.2009.12

【2】郭天祥编著.51单片机C语言教程-入门、提高、开发、拓展全攻略.电子工业出版社.2010.05

【3】刘刚编著.ProtelDXP2004SP2原理图与PCB设计.电子工业出版社.2009.07

【4】丁峻岭主编.C语言程序设计.中国铁道出版社.2009.12

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

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

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

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