羽毛球计分器Word格式.docx

上传人:b****4 文档编号:16833662 上传时间:2022-11-26 格式:DOCX 页数:44 大小:409.50KB
下载 相关 举报
羽毛球计分器Word格式.docx_第1页
第1页 / 共44页
羽毛球计分器Word格式.docx_第2页
第2页 / 共44页
羽毛球计分器Word格式.docx_第3页
第3页 / 共44页
羽毛球计分器Word格式.docx_第4页
第4页 / 共44页
羽毛球计分器Word格式.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

羽毛球计分器Word格式.docx

《羽毛球计分器Word格式.docx》由会员分享,可在线阅读,更多相关《羽毛球计分器Word格式.docx(44页珍藏版)》请在冰豆网上搜索。

羽毛球计分器Word格式.docx

通过设置确认/清零键SB6确认后写入DS1302中。

数码管将从设置的时间开始动态显示时间。

通过SB2键可以选择需要显示的内容。

三、设计作用与目的

系统的设计主要利用STC89C51RD+单片机完成简易球类计分器的设计。

通过对整个系统的分析与设计,完成从理论知识到实践应用的过度,掌握基于单片机的产品设计与开发的相关理念,学会利用单片机完成简单的电子系统的设计与制作。

学会C语言的编程应用,培养良好的编程风格,掌握相关的编程或仿真软件的使用。

基于STC89C51RD+单片机的球类计分器的设计,掌握51单片机最小系统的设计与常见人机接口电路的设计,懂得简单电子电路的设计,掌握51单片机内部资源的使用,了解51单片机的外部结构与内部结构之间的关系,并能编程实现单片机的各部分相关功能。

四、所用设备及软件

基于STC89C51RD+单片机的,涉及到相关的软件和硬件。

4.1软件

系统设计主要使用到的软件有KeilC51、Protel99SE等。

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

Protel99SE是ProklTechnology公司开发的基于Windows环境下的电路板设计软件。

该软件功能强大,人机界面友好,易学易用,仍然是大中专院校电学专业必学课程,同时也是业界人士首选的电路板设计工具。

Protel99SE由两大部分组成:

电路原理图设计(AdvancedSchematic)和多层印刷电路板设计(AdvancedPCB)。

其中AdvancedSchematic由两部分组成:

电路图编辑器(Schematic)和元件库编辑器(SchematicLibrary)。

4.2硬件

硬件主要用到的是个人计算机及51单片机开发板完成。

在有完善的理论分析与设计后,制作硬件实物则需要以下硬件支持。

51单片机、DS1302芯片、电阻、电容、发光二级管、晶振、按键、数码管、万能板、杜邦线、电烙铁、焊锡等。

五、系统设计方案

5.1系统总体设计

整个设计分为四大模块,系统结构框图如图1。

STC89C51RD+单片机作为核心控制模块,独立键盘为输入模块,DS1302作为时钟模块,八位数码管及五个按键指示LED灯作为输出模块。

5.2工作原理

5.2.151单片机工作原理

单片机就是在一块硅片上面集成了微处理器(CPU)、存储器(RAM、ROM、EPROM)和各种输入、输出接口(定时器/计数器、并行I/O口、串行口、A/D转换器以及脉冲调制器PWM等),这样一块芯片具有一台计算机的属性,因为被称为单片微型计算机,简称单片机。

STC89C51RD+单片机有40条引脚,采用双列直插式封装。

针对本次设计,做出的I/O口定义如表1所示。

5.2.2DS1302工作原理

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

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字。

此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。

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

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

一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;

另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

表1系统接口定义

引脚名

单片机引脚

功能说明

备注

P0

P0.0~P0.7

连接数码管的段位控制段显示

P1_0

P1.0

显示切换键输入口

P1_1

P1.1

调整键输入口

P1_2

P1.2

加按键输入口

P1_3

P1.3

减按键输入口

P1_4

P1.4

设置切换键输入口

T_CLK

P1.6

DS1302时钟线接口

T_IO

P3.5

DS1302数据线接口

T_RST

P1.7

DS1302复位线接口

LED1

P1.5

指示按键SB2接口

LED2

P3.2

指示按键SB3接口

LED3

P3.3

指示按键SB4接口

LED4

P3.4

指示按键SB5接口

LDE5

P3.7

指示按键SB6接口

P2_0

P2.0

74LS138A口线接口

P2_1

P2.1

74LS138B口线接口

P2_2

P2.2

单片机上电后,DS1302从程序中写进的初始时间运行。

通过手动设置将当前的时间值写入DS1302的寄存器中。

DS1302将从设置的时间开始运行。

通过八位数码管显示当前的时间。

5.2.3数码管工作原理

数码管分为七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。

所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。

数码管又分为共阴极和共阳极两种类型,共阴极就是将八个LED的阴极连在一起接地,这样给任何一个LED的另一端高电平,它便能点亮。

而共阳极就是将八个LED的阳极连在一起。

数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。

显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。

数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。

所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;

共阳数码管的字符编码为11000000,即0xc0。

可以看出两个编码的各位正好相反。

同时根据数码管的驱动分类分为静态驱动和动态驱动。

本次设计中采用动态驱动显示。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

5.2.4独立按键工作原理

按键输入部分采用五个独立按键接到单片机的P1口。

独立按键又叫查询式按键。

查询式按键是各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他I/O口线上按键的工作状态。

查询式按键电路配置灵活,软件结构简单。

实际制作过程中,按键的位置可以任意放置,但是每个按键的接线端必须按照按键的功能连接要正确,不能错乱。

设计中五个独立按键的功能如表2所示。

表2按键功能定义

按键

功能

SB1

REST

单片机手动复位键

SB2

进行显示切换功能

SB3

时间设置时为调整键,计分时作为比分显示对换按键

SB4

时间设置时为加按键,计分时为A队加按键

SB5

时间设置时为减键,计分时为B队加键

SB6

设置确认键,计分时当一局结束后进行比分清零

六、系统硬件设计

6.1系统整体设计

按照系统设计功能的要求,系统由主控模块、时控模块、及显示模块和键盘接口模块共4个模块组成。

主控芯片使用51系列STC89C51RD+单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。

显示模块采用普通的共阴极极八位LED数码管。

数码管的位选采用一片74LS138的译码器,这样能减少I/O口的占用造成资源的浪费。

P0口作为数码管的段显,P0口作为输出口线时需要接上拉电阻。

程序下载需要一个USB转串口芯片,采用MAX232芯片。

6.2各单元电路设计

6.2.1单片机最小系统电路

单片机最小系统包括电源,复位电路,振荡电路。

单片机最小系统“最小”就是指一个单片机能开始独立工作所需的最基本的外部电路。

具体是指VCC脚接电源,GND接地,接好晶振,连上RC复位电路,另外值得注意的是在不需要扩展外部存储器的情况下EA脚接高电平,具体电路如图2所示。

图中的MAX232芯片是转串口芯片,下载程序时用。

单片机的RST脚是高电平复位,电路采用上电复位和手动复位的两种复位接法。

晶振电路选择晶振一般为12M,若用到单片机的串行口通信,则一般选择11.0592M的晶振。

主芯片是1系列STC89C51RD+单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统的51单片机。

6.2.2按键输入部分电路

按键输入部分由五个独立按键接到单片机的P1口,具体电路如图3所示。

在使用按键时需要对其消抖。

当有按键按下时单片机对应的引脚检测到低电平。

按键值的读取采用循环扫描法实现。

6.2.3数码管动态显示电路

七段数码管一般由八个发光二极管组成,其中由七个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。

当发光二极管导通时,相应的点或一个笔画发关。

控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单使用也方便。

发光二极管的阳极连接在一起的称为共阳极数码管,阴极连接在一起的称为共阴极数码管。

设计中采用共阴极的数码管,段显示由单片机的P0口控制,P0口做为输出口需要接上拉电阻。

位选由单片机的P2口的前三位控制。

P2口的前三位连接74LS138译码器实现对八位数码管的位选控制。

电路图如附录1。

6.2.4DS1302时钟电路

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

DS1302内部有一个31×

8的用于临时性存放数据的RAM寄存器。

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

DS1302与单片机的电路连接图如图4所示。

DS1302有三个口线:

RST复位、I/O数据线、SCLK串行时钟。

图中的五个LED灯用于指示按键是否按下,当按键按下时对应的LED灯亮,松手时LED灯灭。

七、系统软件设计

系统采用模块化编程,各部分相互独立又紧密联系。

许多程序太长或太复杂,很难写在单一单元中。

如果把代码分为较小的功能单元,将大大简化编程过程。

模块化程序一般比单块程序容易编写、调试和修改。

只要把各个单元之间的接口定义好,各个单元的详细设计就可以独立进行了。

使用模块化方法可以更快地开发程序,因为较小的子程序比大程序更容易理解、设计和测试。

子程序可以重用,

为一个程序编写的代码经常可以用于其它的程序。

7.1主程序流程设计

程序的执行有一个逻辑层次,C语言就是一些函数的组合,编程就是去编写一些函数以满足客观实际要求,在编写函数过程中的一些逻辑层次里面,有顺序、循环、跳转等等不同的控制逻辑。

基于STC89C51RD+单片机的羽毛球计分器主函数是由初始化函数、时间设置函数、显示函数组成。

主函数流程图如图5所示。

任何程序开的开始都是从main函数开始执行的,一个程序也只能有一个main函数。

主程序如下:

voidmain()

{

init();

while

(1)

{

switch(FLAGE)

case0:

{STETime();

break;

}

case1:

{DISPLAY();

}

}

}

7.2子程序程设计

子程序包含较多,针对本次设计,列出部分主要的子程序。

其中主要包含的子程序有初始化子程序、时间设置子程序、按键扫描子程序、显示子程序、延时子程序等等。

其中几个主要子程序流程图如下所示。

图6为显示程序流程图。

FLAGE1是显示的标志位,通过按键SB2改变其值。

显示程序如下:

voidDISPLAY(void)//进行显示

switch(FLAGE1)

{DISPLAY1();

}//显示比分

{DISPLAY2();

}//显示局数比分

case2:

{DISPLAY3();

}//显示时、分、秒

case3:

{DISPLAY4();

}//显示年、月、日

KEYDEAL();

//按键扫描处理程序

程序开始

写命令字节一位

复位端变高启动一次数据传送工作

时钟线发脉冲

够8次了?

写数据字节一位

复位端变低

结束

Y

N

图7写DS1302流程图

比分显示程序

FLAGE1==0?

FLAGE1==2?

FLAGE1==1?

局分显示程序

按键扫描程序

图6显示程序

FLAGE1==3?

年月日显示程序

时分秒显示程序

图7是写写一个字节到DS1302子程序。

程序如下:

voidv_W1302(ucharucAddr,ucharucDa)

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(ucAddr);

//写地址

_nop_();

v_RTInputByte(ucDa);

//写1Byte数据

T_CLK=1;

八、实验调试结果

通过前期的硬件电路的设计与软件设计后。

通过KeilC51软件进行编程,编程语言是C语言。

C语言是一种面向过程的编程语言。

STC89C51RD+单片机能兼容C51,使用C语言能编程效率更高。

调试使用的一快C51系列的开发板。

在自身设计原理图的基础上利用开发板的硬件资源搭建自己的实验平台。

实验中按键采用杜邦线接单片机I\O口通过接地模拟按键按下。

经过反复的修改测试,设计终于达到了预期的效果。

图8中数码管显示的是测试是的时间(第一排是年、月、日,第二排是时、分、秒)。

图9中数码管显示的是A、B两队的比分与局分。

九、设计中的问题及解决方法

问题一:

如何实现局分的计数?

羽毛球比赛中两位选手在对手没获得20分情况下,自身取得21分那么本局取胜。

在同时获得20分及以上分时谁先净胜对方3分者赢。

为了实现自动计算局分需要对没加一次的分数后对比分比较。

比较时会有几种不同的情况,需要一一列出。

问题二:

如何实现按键的复用?

设计中使用到了5个独立按键。

计分器启动后需要对DS1302时钟芯片进行时间设置需要用到5个独立按键。

在进入计分后5个独立按键的功能发生了变化。

因此在程序编写过程中对按键处理需要分情况,采用标志位的方式能够解决这一问题。

问题三:

硬件设计问题

在硬件设计时P0口需要加上拉电阻,不加上拉电阻驱动不了数码管。

测试是用到开发板,而开发板上的独立按键与设计的独立按键不一致,需要用杜邦线给低电平模拟按键触发。

十、设计心得

基于51单片机的羽毛球计分器是单片机控制系统中单片微型机应用与设计的重要组成部分。

羽毛球计分器的控制电路由按键输入部分、单片机控制部分、显示以及DS1302时钟部分组成。

在基于51单片机的羽毛球计分器设计中,整个设计能达到预期的设计要求,但是也有许多需要改进的地方如。

通过本次单片机课程的学习与基于51单片的电子万年历的设计,把理论用到实践中去,动手动脑解决学习过程中遇见的问题,巩固与加强相关的知识,学会做人做事,培养刻苦专研的精神,为未来的工作与生活打下坚实的基础。

在设计过程中,虽然遇到很多麻烦,花了大量时间去调试,但是最终我还是完成了电路的设计任务。

由此我知道,做好每一件事,必须要有耐心、信心、决心,以及严谨的态度。

在这过程中有时候没时间吃饭,没时间睡觉,我还是坚持下来了,因为在背后一直有鼓励我、支持我的家人。

非常感谢父母给我生命,在这二十多年里,不辞劳苦的养育我,给我进入大学学习的机会,我将用我一辈子的收获来回报父母的恩情。

参考文献

[1]周丽娜.Protel99SE电路设计技术(基础、案例篇)[M].北京:

中国铁道出版社.2009.

[2]焦宝文.课程设计指南[M].北京:

清华大学出版社.1983.

[3]杨垒,于复生,郭梅静.基于AT89S52的定时器设计[J].山东建筑大学学报,2006(05)

[4]林毅.基于AT89C51单片机构成的键盘显示电路[J].现代电子技术,2006(13)

[5]坂本正文.步进电机应用技术[M].北京:

科学出版社,2010.

[6]http:

//

[7]

[8]

附录1:

系统总体结构电路原理图

附录2:

程序清单

#include<

reg52.h>

#include<

intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

*独立按键*/

sbitP1_0=P1^0;

sbitP1_1=P1^1;

sbitP1_2=P1^2;

sbitP1_3=P1^3;

sbitP1_4=P1^4;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

sbitT_CLK=P1^6;

/*实时时钟时钟线引脚*/

sbitT_IO=P3^5;

/*实时时钟数据线引脚*/

sbitT_RST=P1^7;

/*实时时钟复位线引脚*/

sbitLED1=P1^5;

//按键按下指示

sbitLED2=P3^2;

sbitLED3=P3^3;

sbitLED4=P3^4;

sbitLED5=P3^7;

/*初始时间设置*/

ucharflag;

//显示切换标志

ucharsign4;

//更改完成标志

ucharsign5;

//显示切换标志

uintsec0=0;

//秒

uintmin0=0;

//分

uinthour0=0;

//小时

uintday0=1;

//天

uintmonth0=1;

//月

uintyear0=13;

//年

uintyearh=20;

uintcursor=0;

//当前光标闪烁位

uchara=0xff;

//LED显示掩码

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

//共阴极极数码管段

ucharcodetable1[]={0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8};

//译码器选择显示的位

uinttable2[6]={0,0,0,0,0,0};

//存储改变的数据

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0X40,

0x39,0x5e,0x79,0x71

};

uchara0,a1,a2,a3,a4,a5,a6,a7;

ucharkey2;

//按键值记忆

ucharc1,c2;

//存储局数

ucharsign,sign1,sign2,sign3;

ucharFLAGE;

//标志位1

ucharFLAGE1;

//标志位2

/*函数声明*/

voidinit(void);

//初始化程序

voidSTETime(void);

//设置DS1302的时间

voidDISPLAY1(void);

//显示比分

voidDISPLAY2(void);

//显示局数比分

voidDISPLAY3(void);

//显示时、分、秒

voidDISPLAY4(void);

//显示年、月、日

voiddisplay(uchar,uchar

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

当前位置:首页 > PPT模板

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

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