基于单片机的篮球比赛倒计时计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

相关文档
最新文档