篮球记分牌实训报告
篮球记分牌
指导老师:唐扬波
第五组成员:许健 ,翁福成 ,吴清发
班级:应用电子10-1
摘要:这次实训采用AT89C51单片机、9015NPN三极管、数码管、若干个电阻和电容、等器材来构成篮球记分牌。
关键词:单片机AT89C51、数码管显示、9015NPN三极管.
一、基本
二、硬件系统设计
三、电路图设计
四、流程图
五、源程序
六、调试
七、作用
八、总结
一、基本设计方案
,)利用AT89C51单片机结合数码管显示器设计的一个能用按键来控制开始计时、暂停、、加分和减分的功能。
基本功能:
? 数码管显示;
1
? 显示格式为“A队、B队、”;
? 能够通过按键控制比分的增减和倒数时间的开始、暂停和加时;
?
,)篮球记分牌以单片机AT89C51作为控制核心,该系统有如下方案组成:
?主控芯片---采用AT89C51单片机控制
?显示模块---数码管(能显示A队跟B队比分,)
?控制模块---按键
二、硬件系统设计
1)本系统采用AT89C51芯片,有40个引脚
40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。
1、电源:
(1) VCC - 芯片电源,接+5V;
(2) VSS - 接地端;
2、时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
3、 控制线: RST(Reset)功能:复位信号输入端。
4、I/O线
1)AT89C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
2
2)数码管显示器接口及显示方式
由于所有八位段选线都由一个I/O口控制,因此,在每一瞬间,所有数码管显示块会显示相同的字符。要想每位显示不同的字符,就必须采用扫描
轮流点亮每一位数码管显示块,也就是每一瞬间只点亮一位数码管显示块。此刻,段选控制I/O输出相应字符段选码(字型码),而位选则控制I/O口在该显示位送入选通信号(采用共阴数码管,送高电平点亮)。这样就可以保证各位数码管显示块显示相应的字符。
3)本系统采用12MHZ晶振,由P0口输出所要显示的字形段码,由P2.0-P2.6口输出字位信号,低电平有效选中相应的数码管。 三、电路图设计
3
四、流程图
4
五、源程序
———————————————————————————————————— #include "reg51.h" //51头文件 #include "intrins.h" //_nop_( );延时#函数#用 #define uchar unsigned char //无符号字符型宏定义 #define uint unsigned int //无符号整型宏定义 #define SEG_OUT P2 //段码输出口
#define BIT_OUT P1 //扫描口
#define KEY_IO P0 //键盘接口
sbit dot=P2^7; //LED小数点控制 uchar code
tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF
};
/*共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
"不亮" "-" */
uchar data score_a=0,score_b=0; //双方分数变量 uchar data dis_buff[4]={0,0,0,0}; //待显示单元数据,共4个数据,即显示数组
uchar data jian[4]={1,2,0,0}; uchar data keytemp,key=100,keysave=100; //键值存放 uchar data t10ms=0,ts=0,tmin=12; bit data flag=0; //按键处理标志位 //1毫秒延时函数
delay1ms(int t)
{
int i,j; //延时变量
for(i=0;i
=100)score_a=100;break;
//key=1时,score_a增2
case 2:score_a+=3;if(score_a>=100)score_a-=100;break;
//key=2时,score_a增3
case 3:if(score_a!=0)score_a--;break; //key=3时,score_a减1
case 4:score_b++;if(score_b==100)score_b=0;break;
//key=4时,score_b增1
case 5:score_b+=2;if(score_b>=100)score_b-=100;break;
//key=5时,score_b增2
case 6:score_b+=3;if(score_b>=100)score_b-=100;break;
//key=6时,score_b增3
case 7:if(score_b!=0)score_b--;break; //key=7时,score_b减1
default:break; //都不符合时跳出
循环
}
}
//按键扫描函数
void keyscan( )
{
uchar i,t=0xef; //1110 1111
KEY_IO=0x03; // KEY_IO赋值为0000 0011
keytemp=(~KEY_IO)&0x03; //将按键端口取反再与上00000011赋值给
keytemp,
//即当有按键按下时,keytemp不等于0
if(keytemp!=0) //当keytemp不等于0时
6
{
for(i=0;i<4;i++) //分四次循环扫描4列
{
KEY_IO=t; //先将第一条列线赋为0
keytemp=(~KEY_IO)&0x03; //读取按键端口状态
if(keytemp!=0) //当keytemp不为0时
{
switch(keytemp) //判断keytemp状态
{
case 0x01:key=0*4+i;break; //第一行按下时,keyemp为0x02,根据i判断第几列
case 0x02:key=1*4+i;break; //第二行按下时,keyemp为0x01,根据i判断第几列
default:break;
}
if(key>=0&key<=7&key==keysave) //当key为0到7,并且key= keysave时
{
if(flag!=1) //当按键处理位不为1时
{
keyproc( ); //调用按键处理函数
flag=1; //按键处理标志位为1,相当于有键按下
}
break; //跳出,if循环
}
else
{
keysave=key; //将key的值赋给keysave
flag=0; //按键处理标志位为0,相当于没键按下
break; //跳出,if循环
}
}
t=(t<<1)|0x01; //t左移一位,高位补1,扫描下一列
}
}
}
//外部中断0中段服务子函数
void ext0(void) interrupt 0 //通过一个与非门用中断来扫描按键
{
7
EX0=0; //关闭外部中断
keyscan( ); //按键扫描函数 }
/***********LED显示动态扫描函数**********/ xu()
{
char k;
char m=0xfe;
jian[0]=tmin/10;
jian[1]=tmin%10;
jian[2]=ts/10;
jian[3]=ts%10;
for(k=0;k<4;k++) //6位LED扫描控制
{ BIT_OUT=0xff;
SEG_OUT=tab[jian[k]];
BIT_OUT=m;
delay1ms(3);
m=(m<<1)|0x01;
}
}
/****************外部中断1中段服务子程序*/ void ext1(void) interrupt 2 {
EX1=1;
xu();
}
/****************定时器0中断服务程序*****/ void init_timer0(void) interrupt 1
{
TH0=-50000/256;
TL0=-50000%256; //50MS定时初值(T0计时用) t10ms++;
if(t10ms==20)
{
t10ms=0;
if(ts==0)
{
ts=60;
ts--;
tmin--;
if(tmin==0)
{
8
tmin=12;
}
}
else ts--;
}
}
//主函数
main( )
{
TMOD=0x11; //0001 0001
TH0=-50000/256;
TL0=-50000%256; //10MS定时初值(T0计时用) ET0=1;
TR0=1;
EA=1;
IT0=0;
EX0=1; //开全局中断
EX1=1; //开外部中断0
//外部中断0下降沿触发
while(1)
{
KEY_IO=0x03; //赋初值0000 0011
display( ); //显示函数
EX0=1; //开外部中断0,即可以按键扫描
if(P3^2==1) //当P3.2中断口为1时
{
keysave=100;
flag=0; //按键处理标志位为0
}
}
}
六、调试
调试过程中, 我们利用 AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及89C51引脚结构的功能对其进行反复烧
9
写程序,让电子时钟可以实现显示“A队和B队比分”;编写好程序后,把电路图画好,在软件仿真后再焊接硬件。
再把程序烧写到AT89C51单片机,把它插入硬件接上电源调试。首先调试按键能否正常工作,再看数码管显示的速度是否正常,最后调试完成。
七、作用
篮球电子计分牌主要是利用电子技术将篮球比赛比分和时间电子化、数字化,拥有时钟精确、体积小、接口友好、可扩展性能强等特点,被广泛应用于生活和工作当中,而且篮球电子计分牌的制作成本低,适于生产和广泛使用。
10
八(总结
本次实训,我们更加了解单片机AT89C51的使用和编程;利用LED数码管显示参赛比分;此次作品具备加分、减分、每节倒计时、加时赛倒计时、我们更加熟悉了程序的基本概念,
虽然这次的作品完成了,但是还有很多地方是值得我们不断改进的,作品的功能有待加强,今后还要更加努力,。我们相信在以后的实训中能够更加积极主动,争取学到更多的知识,丰富自己的知识。加油~~~~~~
11