基于单片机的篮球记分牌设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、设计目的:用AT89S52单片机设计一个篮球比赛计分牌

二、功能要求:

8位LED数码显示,对A、B两队进行计分,具有加1分、加2分、加3分,复位和切换及中场换场的功能。

三、方案论证:

系统框图设计如图1所示:

图1

四、系统硬件设计:

系统硬件设计如图2所示:

图2 系统硬件设计

五、软件设计:

(1)程序流程图如图3所示:

图3 程序流程图

(2)程序:

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit KEY1=P1^0; //定义按键输入端口 ,加一分

sbit KEY2=P1^1; //定义按键输入端口,加两分

sbit KEY3=P1^2; //定义按键输入端口,加三分

sbit KEY4=P1^3; //定义按键输入端口,甲队计分数

sbit key5=P1^4; //定义按键输入端口,乙队计分数

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar aa,bb,cc,bai,shi,ge;

uint jiafenshu,yifenshu,m,n;

void display();

void keyscan();

void delay(uint z)

{

uint t1,y;

for(t1=z;t1>0;t1--)

for(y=110;y>0;y--);

}

void main()

{

jiafenshu=0;

yifenshu=0;

P1=0xff; //按键输入端口电平置高

while (1) //主循环

{

if(key5==1)

{

P2=0Xfe;

P0=0X77; //a

delay(10);

P2=0Xef;

P0=0X7c; //b

delay(10);

keyscan();

aa=jiafenshu/100;

bb=jiafenshu%100/10;

cc=jiafenshu%10;

bai=yifenshu/100;

shi=yifenshu%100/10;

ge=yifenshu%10;

display();

}

if(key5==0)

{

P2=0XFE; //ab交换

P0=0X7C;

delay(10);

P2=0XEF;

P0=0X77;

delay(10);

keyscan();

bai=jiafenshu/100;

shi=jiafenshu%100/10;

ge=jiafenshu%10;

aa=yifenshu/100;

bb=yifenshu%100/10;

cc=yifenshu%10;

display();

}

}

}

void display()

{

P2=0xfd;

P0=table[aa];

delay(1);

P2=0xfb;

P0=table[bb];

delay(1);

P2=0xf7;

P0=table[cc];

delay(1);

P2=0xdf;

P0=table[bai];

delay(1);

P2=0xbf;

P0=table[shi];

delay(1);

P2=0x7f;

P0=table[ge];

delay(1);

}

void keyscan()

{

if(KEY4==0) //再次确认按键是否按下,没有按下则退

{

if(!KEY1)

{

delay(10);

if(!KEY1)

{while(!KEY1) ;

jiafenshu+=1;

}//释放则执行需要的程序

}

else if(!KEY2) //如果检测到低电平,说明按键按下

{

delay(10); //延时去抖,一般10-20ms

if(!KEY2) //再次确认按键是否按下,没有按下则退出

{

while(!KEY2);//如果确认按下按键等待按键释放,没有释放则一直等待

jiafenshu+=2;//释放则执行需要的程序

}

}

//主循环中添加其他需要一直工作的程序

else if(!KEY3) //如果检测到低电平,说明按键按下

{

delay(10); //延时去抖,一般10-20ms

if(!KEY3) //再次确认按键是否按下,没有按下则退出

{

while(!KEY3);//如果确认按下按键等待按键释放,没有释放则一直等待

jiafenshu+=3;//释放则执行需要的程序

}

}

}

else if(KEY4==1) //如果检测到低电平,说明按键按下

{

if(!KEY1) //如果检测到低电平,说明按键按下

{

delay(10); //延时去抖,一般10-20ms

if(!KEY1) //再次确认按键是否按下,没有按下则退出

{

相关文档
最新文档