【51单片机篮球记分器+复合按键操作】2022-12-22
缘由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;//011case 3:{L2=0;L1=L3=1;}break;//101case 4:{L1=L2=0;L3=1;}break;//001case 5:{L1=L2=1;L3=0;}break;//110case 6:{L1=L3=0;L2=1;}break;//010case 7:{L1=1;L2=L3=0;}break;//100case 8:{L1=L2=L3=0;}break;//000case 1:{L1=L2=L3=1;}break;//111default:{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();}
}