缘由51单片机蓝球计分器-编程语言-CSDN问答
#include "reg52.h"
//定义按键
sbit key0=P3^0;
sbit key1=P3^1;
sbit key2=P3^2;
sbit key3=P3^3;
//定义数码管位驱运位
sbit L1=P2^2;
sbit L2=P2^3;
sbit L3=P2^4;
sbit beep=P2^5;
unsigned char code ShuMaGuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0X80,64};//0~9隐.小数点-号
unsigned char Js=0, Miao=0, Fen=0, Shi=12, LQJF=0,LQ1=0,LQ2=0;//中断计时 秒 分 时 篮球倒计时 篮球1分数 篮球2分数
bit smk=0,bek=0;
void ShuMaXianShi(unsigned char s,unsigned char w,unsigned char d)
{
unsigned char YanShi=0;
P0=L1=L2=L3=0;
if(smk)
{
switch(w)
{
case 2:{L1=0;L2=L3=1;}break;//011
case 3:{L2=0;L1=L3=1;}break;//101
case 4:{L1=L2=0;L3=1;}break;//001
case 5:{L1=L2=1;L3=0;}break;//110
case 6:{L1=L3=0;L2=1;}break;//010
case 7:{L1=1;L2=L3=0;}break;//100
case 8:{L1=L2=L3=0;}break;//000
case 1:{L1=L2=L3=1;}break;//111
default:{L1=L2=L3=0;}break;
}
P0=ShuMaGuan[s]|ShuMaGuan[d];//d显示小数点11,10关闭
if(++YanShi>7)YanShi=smk=0;
}
}
void XianShi()
{
ShuMaXianShi(LQ1/10,1,10);
ShuMaXianShi(LQ1%10,2,10);
ShuMaXianShi(12,3,10);
ShuMaXianShi(LQJF/10,4,10);
ShuMaXianShi(LQJF%10,5,10);
ShuMaXianShi(12,6,10);
ShuMaXianShi(LQ2/10,7,10);
ShuMaXianShi(LQ2%10,8,10);
}
void JiShi(/*时间计算*/)
{
if(Js%50==0)smk=1;
if(Js>100)
{
Js=0;
if(LQJF==0)TR0=0;else --LQJF;
}
XianShi();
}
void ZhongDuanSheZhi()
{
TH0+=(65536-10000)/256;/*定时器赋初值,定时10ms触发中断,自动补偿方式*/
TL0+=(65536-10000)%256; /*11.0592MHz/12=921600Hz就是1秒921600次机器周期*/
TMOD=0X01;
TR0=1;
ET0=1; //开启定时器
EA=1; //全局中断开关
}
void ZhongDuan() interrupt 1
{
++Js;
TH0+=(65536-(9216+674))/256;/*定时器赋初值,定时10ms触发中断,自动补偿方式*/
TL0+=(65536-(9216+674))%256; /*11.0592MHz/12=921600Hz就是1秒921600次机器周期*/
}
void main()
{
unsigned char Ys=0,jh=0;
ZhongDuanSheZhi();
while(1)
{
if(key0==0&&(key2==0||key3==0)&&++Ys==0)
{if(key3==0&&LQJF==0)LQ2+=2; if(key2==0&&LQJF==0)LQ1+=2;
while(key0==0&&(key2==0||key3==0))JiShi();}//复合按键+2分
if(key1==0&&(key2==0||key3==0)&&++Ys==0)
{if(key3==0&&LQJF==0)LQ2+=3; if(key2==0&&LQJF==0)LQ1+=3;
while(key1==0&&(key2==0||key3==0))JiShi();}//复合按键+3分
if(key0&&key1&&key2==0&&++Ys==0)
{jh=LQ1;LQ1=LQ2;LQ2=jh;while(key2==0)JiShi();}//配合按键+交换
if(key0&&key1&&key3==0&&++Ys==0)
{LQJF=20;TR0=1;while(key3==0)beep=~beep;}//倒计时+蜂鸣器/配合按键
JiShi();
}
}