基于单片机的篮球记分牌设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) //再次确认按键是否按下,没有按下则退出
{