目录
2.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