手动计分器

本文档详细介绍了手动计分器的开发过程,包括需求分析、总体设计、模块设计与实现、系统测试等。设计内容涉及动态数码管显示、独立按键控制、LCD1602时间显示等功能。采用STC89C52单片机,实现了手动计分、赛程控制、时间显示等操作,并通过系统测试验证了其功能。
摘要由CSDN通过智能技术生成

目录

一、需求分析(从用户角度 UML)

         1.1设计内容

1.2 设计目标

1.3实验平台和工具

1.4 设计的功能分析

1.5 设计的非功能性分析

二、总体设计

         2.1总体方案设计

2.2 演示支持方案(如何利用开发板资源或外接模块,实现功能演示的方案,传感器(或模拟)演示方案)

三、模块设计与实现(介绍本课设钟主要模块的设计思路,实现方法,可以通过流程图,状态图,关键代码,显示效果等多种手段说明)

四、系统集成设计(与其它系统的通信、连接,和相互作用设计,参考结构,根据项目增减)

五、系统测试

5.1 系统测试

5.2 单元测试

5.3 非功能性测试

六、系统测试

          数码管0一直显示为8,多次调试仍然不行,因为单片机内部某模块正在运行,所以即使修              改初始值,数码管0也一直为8。修改数码管上显示两队分数的位数时,S2键功能失效,重              新编写扫描键盘的函数后功能恢复。总体来说,本项目功能较为简单,易于实现。

附录1原理图

附录2 源程序清单


一、需求分析(从用户角度 UML)

1.1设计内容

本项目设计开发一款手动计分器,用户可通过手动控制改变分值与赛程。

1.2 设计目标

1.数码管0123显示A队分数,数码管4567显示B队分数;

2.裁判按动K1键比赛开始,进行计时;

3.裁判按动K2键比赛中止,计时暂停,再次按动K2,比赛继续,计时正常进行;

4.裁判按动K3键比赛终止,程序复位,分数清零,计时归零;

5.按动S1A队加一分,按动S2加两分;按动S3B队加一分,按动S4加两分;

6.按动S5取消A队上次加分,按动S6取消B队上次加分。

1.3实验平台和工具

平台:Keil;

工具:STC89C52单片机

1.4 设计的功能分析

单片机可以实现计分功能,使用动态数码管,LCD1602,独立按键,矩阵键盘4个模块。动态数码管模块用来记录分数,数码管0123显示A队分数,数码管4567显示B队分数;LCD1602用来显示时间;独立按键用来控制赛程;矩阵键盘用来控制分数的加减。

1.5 设计的非功能性分析

通过本程序的设计可设计出一个手动计分器,应用于实际生活中也是非常建议方便。

二、总体设计

2.1总体方案设计

1.赛程控制

K1:比赛开始;

K2:比赛中止;

K3:比赛终止。

2.分数设置

S1:A队加1分;

S2:A队加2分;

S3:B队加1分;

S4:B队加2分;

S5:A队上一次加分撤销;

S6:B队上一次加分撤销;

K3:两队分数清零。

3.时间显示

时间将显示在LCD1602显示屏上。

K2:时间暂停;

K3:时间清零。

2.2 演示支持方案(如何利用开发板资源或外接模块,实现功能演示的方案,传感器(或模拟)演示方案)

在单片机下载完成后,51单片机的最左边一位数码管显示为8,其他位数码管显示为零,LCD1602显示“Time 00:00”。在按下独立按键K1后,时间显示的秒针位开始计时。按下矩阵键盘的S1,数码管3由0变成1,按下矩阵键盘的S3,数码管7由0变成1,按下矩阵键盘的S2数码管3由1变成3,按下矩阵键盘的S4,数码管7由1变成3,按下S5,数码管3由3变成1,按下S6,数码管7由3变成1。

按下K2,计时停止,分数不清零,再次按动K2,计时继续,矩阵键盘功能正常。按动K3,计时清零,分数清零,再次按动K1,比赛开始,计时与分数从0开始。

2.3 单片机资源分配设计(包括RAM资源分配,I/O资源分配)

没有具体要求

三、模块设计与实现(介绍本课设钟主要模块的设计思路,实现方法,可以通过流程图,状态图,关键代码,显示效果等多种手段说明)

3.1分配按键功能

sbit K1=P3^1;     //按键

sbit K2=P3^0;     //按键

sbit WS3=P3^2;     //按键

sbit SW4=P3^3;     //按键

sbit LS138A = P2^2;   //定义138译码器的输入A脚由P2.2控制

sbit LS138B = P2^3;     //定义138译码器的输入脚B由P2.3控制

sbit LS138C = P2^4; //定义138译码器的输入脚C由P2.4控制

3.2LCD1602相关指令

void write_com(uchar com)     //1602液晶写指令

{

rs=0;                       //写指令

lcden=0;                    //使能1602

P0=com;                     //写入指令com

LCD_Delay_us(10);            //延时1ms

lcden=1;                    //使能1602

LCD_Delay_us(20);            //延时2ms  

lcden=0;                 //使能1602

}

// 描述:1602液晶写数据

void write_date(uchar date) //1602液晶写数据

{

rs=1;                        //写数据

lcden=0;                     //使能1602

P0=date;                     //写入数据date

LCD_Delay_us(10);             //延时1ms

lcden=1;                     //使能1602

LCD_Delay_us(20);             //延时2ms

lcden=0;                  //使能1602

}

// 描述:指定x,y写入字符函数

 void W_lcd(unsigned char x,unsigned char y,unsig

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值