基于单片机的篮球比赛倒计时计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计
题目
姓名
学号
班级
指导老师
时间
一、设计题目
基于单片机的篮球比赛倒计时计设计。
二、设计目的
1、利用单片机部件模块扩展倒计时计。
2、计时器具有五位计时(分,秒,秒/10),还有24秒计时。
3、能有使其能够自定义比赛时长和24秒的复位,且比赛最后十秒会有提示音
4、确保其能够正常工作,且与实际时间误差调到极可能小,实用,满足比赛需求
三、设计方案分析
方案设计比较简易,主要是部件用到单片机最小系统控制,键盘控制,数码管显示系统,提示音蜂鸣器模块完成,主要核心任务完成的是程序方面的编写。系统运行的原理框图如下图所示:
四、硬件设计方案
1、电路工作原理总体概念设计
主要是部件用到单片机最小系统控制,键盘控制预设显示时间,一般预设的是国际比赛的标准时间是12分钟,但是很多自定义的比赛时间不一样,同时也可以改变预定时间应用到生活中的其他情况中,还有数码管显示系统,提示音蜂鸣器模块,提示音模块主要是在最后十秒提醒运动员,所以很有必要,硬件连接比较简单。主要核心任务完成的是程序方面的编写。
2、模块功能介绍及连接图示
2.1键盘控制模块
键盘模块部分如下图所示;其中A11.A12分别接单片机at89s52的外部中断0和1上(即P32和P33)分别对应的控制是暂停和24进攻时间的倒计时重置,B19端控制为暂停后的比赛时间继续按钮,B18、B17分别为自定义比赛事件的分和秒的控制端
2.2、单片机控制处理模块
控制处理模块比较简单,主要是由单片机的最小系统组成,没有什么特别的地方,晶振应该换成11.0592Mhz,计时会更准确一些,更好控制。但是手头上只有12.0Mhz,不浪费资源吧
2.3、蜂鸣器提示,显示模块
这部分模块比较简单,主要由蜂鸣器的简单电路连接,4位共阳极数码管,和继电器组成,因为根据设计初衷,显然一个数码管是不足以满足设计要求,于是用了,两个数码管占满了P0和P1的16个IO口,资源利用上效率不是太高,可以选用更好控制的LCD,由于缺少该器件,所以选用两个数码管,级联单片机,另外还有一个提示音系统,就是比赛最后十秒会有每秒一声“滴”的提示音,提醒运动员比赛即将结束。电路原理图如图所示:
2.5总设计图纸
五、软件流程
1、流程图
2,软件编程C
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar code table1[]={
0x40,0x79,0x24,0x30,
0x19,0x12,0x02,0x78,
0x00,0x10};
sbit jx=P2^0;
sbit fenj=P2^1;
sbit miaoj=P2^2;
sbit bee=P2^3;
uint M, N, sj, aa, bb, cc,om;
void delay(uint z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar fen,uchar miao,uchar ms,uchar jm)
{
P0=0x01;
P1=table[fen/10];
delay(4);
P0=0x02;
P1=table1[fen%10];
delay(4);
P0=0x04;
P1=table[miao/10];
delay(4);
P0=0x08;
P1=table1[miao%10];
delay(4);
P0=0x10;
P1=table[ms];
delay(4);
P0=0x40;
P1=table[jm/10];
delay(4);
P0=0x80;
P1=table[jm%10];
delay(4);
}
void init()
{
sj=12000;
om=24;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256+6;
EA=1;
ET0=1;
TR0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
}
uchar keyscan()
{ cc=1;
while(cc)
{ display(M,N/10,N%10,om);
if(jx==0)
{
delay(2);
if(jx==0)
{
cc=0;
}
while(!jx);
delay(2);
while(!jx);
}
if(fenj==0)
{
delay(2);
if(fenj==0)
{
M++;
if(M>12)
M=0;
}
while(!fenj);
delay(2);
while(!fenj);
}