这是我以前做的51单片机篮球计分器设计,
花了一个星期时间,
附件里面包括源代码;PCB原理图,
和proteus的仿真文件以及课程设计的相关文档,
都是自己原创的,大家多多指教
制作出来的篮球计分器实物图如下:
电路原理图如下:
篮球计分器仿真原理图如下
Altium Designer画的篮球计分器原理图和PCB图如下:
单片机篮球计分器程序源码:
#include
typedef unsigned char uchar;
typedef unsigned int uint;
sbit K1=P3^2;//比赛倒计时开始/暂停
sbit K2=P3^3;//24s倒计时重新开始
sbit P20=P2^0;//乙队+1按键
sbit P21=P2^1;//乙队+2按键
sbit P22=P2^2;//甲队+1按键
sbit P23=P2^3;//甲队+2按键
sbit P24=P2^4;//甲队+3按键
sbit P25=P2^5;//乙队+3按键
sbit P26=P2^6;//预留按键
sbit P27=P2^7;
sbit beep=P3^6;//蜂鸣器接口
sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P1^2;
char second,minute,num,time,aa;
uchar dd,bb,cc;
uchar code table1[]={"H.T 000:000 T.H "};
uchar code table2[]={"12:00 SEC-1 24"};
//延时子函数
void delay(uint z)
{
uint x;
uchar y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//LCD1602液晶写指令子函数
void write_com(uchar com)
{
RW=0;
RS=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}
//LCD1602液晶写数据子函数
void write_date(uchar date)
{
RW=0;
RS=1;
P0=date;
delay(5);
E=1;
delay(5);
E=0;
}
//LCD1602液晶初始化子函数
void LCD1602_init()
{
uchar i;
bb=0; //H.T分数初始化
cc=0; //T.H分数初始化
time=0;
TMOD=0x10; //定时器1初始化
TL1=0x00;
TH1=0x4c;
EA=1; //开总中断
ET1=1; //开定时器1
TR1=0; //开中断0
EX1=1; //开中断1
IT0=1; //中断0为边沿触发
IT1=1; //中断1为边沿触发
E=0;
beep=0;
second=0;
minute=12;
num=1;
aa=24;
write_com(0x38); //LCD设置初始化
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80); //LCD显示初始化
for(i=0;i<16;i++)
{
write_date(table1[i]);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_date(table2[i]);
}
}
//分数更新子函数
void point_lcd(uchar add,uchar dat)
{
write_com(0x80+add);
write_date(0x30+dat/100);
write_date(0x30+(dat%100)/10);
write_date(0x30+dat%10);
write_com(0x80+add);
}
//按键扫描子函数
void keyscan()
{
P2=0xf0;
if((P2&0xf0)!=0xf0)
{
delay(20);
}
if((P2&0xf0)!=0xf0)
{
P2=0xf7;
if(P24==0)
{
while(P24==0); //P24按下H.T分数加1
bb++;
point_lcd(0x04,bb);
if(P24==0)
{
while(P24==0);
delay(20);
}
}
else if(P25==0) //P25按下H.T分数加2
{
while(P25==0);
bb=bb+2;
point_lcd(0x04,bb);
if(P25==0)
{
while(P25==0);
delay(20);
}
}
else if(P26==0) //P26按下H.T分数加3
{
while(P26==0);
bb=bb+3;
point_lcd(0x04,bb);
if(P26==0)
{
while(P26==0);
delay(20);
}
else if(P27==0) //P27按下T.H分数加一
{
while(P27==0);
cc++;
point_lcd(0x08,cc);
if(P27==0)
while(P27==0);
delay(20);
}
}
P2=0xfb;
if(P24==0) //P24按下T.H分数加2
{
while(P24==0);
cc=cc+2;
point_lcd(0x08,cc);
if(P24==0)
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』