单片机篮球计分牌C语言程序

  • 格式:docx
  • 大小:13.79 KB
  • 文档页数:13

单片机篮球计分牌C语言程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned t = 0x3cb0;
uchar CZ=24; //计时初值
uchar key = 0; //
uchar fen1 = 0; //甲队得分变量
uchar fen2 = 0; //乙队得分变量
uchar bittime=0,bitdisplay=0,sz=0; //*定义变量*//
uchar code table1[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
//0,1,2,3,4,5,6,7,8,9
sbit K0 = P1^0;
sbit K1 = P1^1;
sbit K2 = P1^2;
sbit K3 = P1^3;
sbit K4 = P1^4;
sbit K5 = P1^5;
sbit P3_4 = P3^4;
sbit P3_5 = P3^5;
sbit P3_6 = P3^6;
sbit P3_7 = P3^7;
/********延时函数******/ void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/* 甲队分数显示函数*/ void display_1(uint z)
{
P2 = 0XFD;
P0 = table1[z%10];
delay(10);
P2 = 0XFE;
P0 = table1[z/10];
delay(10);
/* 乙队分数显示函数*/ void display_2(uint z) {
P2 = 0Xf7;
P0 = table1[z%10]; delay(10);
P2 = 0Xfb;
P0 = table1[z/10];
delay(10);
}
/* 甲分数处理函数*/ int key_scan1()
{
if(~K0)
{
delay(10);
if(~K0)
{
delay(10);
fen1 = fen1+1;
}while(~K0);
if(~K1)
{
delay(10);
if(~K1)
{
delay(10);
fen1 = fen1+2;
}while(~K1);
}
/* if(~K2)
{
delay(10);
if(~K2)
{
delay(10);
fen1 = fen1+3;
}while(~K2);
} */
return fen1;
}
/* 乙分数处理函数*/
int key_scan3() {
if(~K0)
{
delay(10);
if(~K0)
{
delay(10);
fen2 = fen2+1; }while(~K0); }
if(~K1)
{
delay(10);
if(~K1)
{
delay(10);
fen2 = fen2+2; }while(~K1); }
/* if(~K2) {
delay(10);
if(~K2)
{
delay(10);
fen2 = fen2+3;
}while(~K2);
} */
return fen2;
}
/* 甲乙队切加分换处理函数*/ uchar key_scan2()
{
if(~K3)
{
delay(10);
if(~K3)
{
delay(10);
key = 1;
P3_4 = 0;
P3_5 = 1;
}while(~K3);
if(~K4)
{
delay(10);
if(~K4)
{
delay(10);
key = 2;
P3_4 = 1;
P3_5 = 0;
}while(~K4);
}
return key;
}
/* 加分显示函数*/ void gaifen()
{
key_scan2();
if(key == 1)
{
key_scan1();
if(fen1<100)
display_1(fen1);
display_2(fen2);
}
else fen1 = fen1-100;
}
else if(key == 2)
{
key_scan3();
if(fen2<100)
{
display_1(fen1);
display_2(fen2);
}
else fen2 = fen2-100;
}
}
/* 倒计时与计分切换函数*/ void shijian()
{
if(~K2)
delay(100);
if(~K2)
{
delay(100);
TR0=1;
P3_6 = 0;
P3_7 = 1;
sz = 1;
if(~K2 && sz) {
delay(100);
if(~K2 && sz) {
delay(100);
TR0=0;
P3_6 = 1;
P3_7 = 0;
sz = 2;
}
}
}
}
/* 定时器工作方式设置*/
void timer0init()
{
TMOD &= 0xf0; //定时器0工作方式1 TMOD |= 0x01;
}
/* 赋初值*/
void settimer0(unsigned int t)
{
TL0
= t & 0xff;
TH0 = t >> 8 & 0xff;
}
/* 服务程序*/
void timer0 (void) interrupt 1 using 0
{
TH0=0x3c;
TL0=0xb0;
bittime++;
while(bittime==20)
{
bittime=0; //每经一秒调用一次显示程序(Fosc=24MH
z)
bitdisplay=1;
if(bitdisplay)
{
bitdisplay = 0;
CZ--;
if(-1 == CZ) CZ=24;
}
}
}
void gongzuo()
{
shijian();
if(1 == sz)
{
P2 = 0XFA;
P0 = table1[CZ/10]; delay(100);
P2 = 0XF5;
P0 = table1[CZ%10]; delay(100);
}
if(2 == sz)
{
display_1(fen1); delay(10);
display_2(fen2); gaifen();
CZ = 24;
}
}
/* 主函数*/
int main()
{
timer0init(); settimer0(t);
EA=1;
ET0=1;
TR0=0;
P2 = 0XF0; P0 = 0x3f; while(1) { gongzuo(); }
return 0; }。