#include<reg51.h>
sbit jsdao=P2^4;
sbit SwapKey=P2^5;
#define rest 0xfe
#define inc1 0xfd
#define inc2 0xfb
#define inc3 0xf7
#define mennusel 0xef
#define mennuenter 0xdf
#define js_begin_over 0xbf
#define t24s_js 0x7f
#define keyup 0xff
unsigned char led[16]={1,2,0,0,0,0,2,4,0,0,0,0,0,0,0,0};
unsigned char chang, led_number;
unsigned char ts/*led2~3*/,t10ms/*led4~5*/, tm,/*led0~1*/ t24s,/*led6~7*/ t24s_t1s;/*led6~7*/
unsigned char t24s_flag;/*led6~7*/
unsigned char fenshu[2]={0,0};/*led8~11*/
unsigned char team=0;/*led8~11*/
unsigned char jieshu;/*P2第几节*/
unsigned char set_flag,shanshuo_led;
unsigned int shanshuo_flag;/**/
void init(void);//初始化,开两个中断
unsigned char read_key(void);//键盘扫描
void delay(unsigned char m);
void wait_key_up(void);//等待键释放
void key_chuli(unsigned char key);//键处理
void main(void)
{
/*==============================================
主程序
================================================*/
unsigned char key;
unsigned int fenshu1;
init();
while(1)
{
key=read_key();//读取键值
if(key!=keyup)//如果有键按下
{
key_chuli(key);//处理按键
wait_key_up();//等待按键释放
if(SwapKey==0)
{
;
}
}
}
}
void delay(unsigned char m)
{
unsigned char j;
for(;m>0;m--)
for(j=0;j<100;j++);
}
void init(void)
{
/*==============================================
初始化
================================================*/
TMOD=0x11;
TR1=1;
ET1=1;
ET0=1;
EA=1;
t24s=24;
chang++;
if(chang>4)chang=1;
if(chang==1)
{
fenshu[0]=0;
fenshu[1]=0;
}
P2=chang;
jsdao=0;
t10ms=0;
ts=0;
tm=12;
t24s=24;
t24s_flag=0;
t24s_t1s=0;
led[0]=tm/10;
led[1]=tm%10;
led[2]=ts/10;
led[3]=ts%10;
led[4]=t10ms/10;
led[5]=t10ms%10;
led[6]=t24s/10;
led[7]=t24s%10;
led[9]=fenshu[0]/100;
led[10]=fenshu[0]%100/10;
led[11]=fenshu[0]%10;
led[13]=fenshu[1]/100;
led[14]=fenshu[1]%100/10;
led[15]=fenshu[1]%10;
}
unsigned char read_key(void)
{
/*==============================================
读键值
================================================*/
unsigned char key_temp;
key_temp=P3;
key_temp&=0xff;
if(key_temp!=0xff)
{
delay(4);
key_temp=P3;
key_temp&=0xff;
if(key_temp!=0xff)
{
key_temp=P3;
key_temp&=0xff;
}
}
return key_temp;
}
void wait_key_up(void)
{
/*==============================================
等待键释放
================================================*/
unsigned char key_temp;
do{
key_temp=P3;
key_temp&=0xff;
}
while(key_temp!=0xff);
}
void key_chuli(unsigned char key)
{
/*==============================================
按键处理
================================================*/
switch(key)
{
case rest :init(); TR0=0; break;
case inc1:if(set_flag)
{
fenshu[team]++;
if(!team)
{
led[9]=fenshu[team]/10/10;
led[10]=fenshu[team]/10;
led[11]=fenshu[team]%10;
}
else{
led[13]=fenshu[team]/10/10;
led[14]=fenshu[team]/10;
led[15]=fenshu[team]%10;
}
}
break;
case inc2 :if(set_flag)
{
fenshu[team]=fenshu[team]+2;
if(!team)
{
led[9]=fenshu[team]/10/10;
led[10]=fenshu[team]/10;
led[11]=fenshu[team]%10;
}
else{
led[13]=fenshu[team]/10/10;
led[14]=fenshu[team]/10;
led[15]=fenshu[team]%10;
}
}
break;
case inc3 :if(set_flag)
{
fenshu[team]=fenshu[team]+3;
if(!team)
{
led[9]=fenshu[team]/10/10;
led[10]=fenshu[team]/10;
led[11]=fenshu[team]%10;
}
else{
led[13]=fenshu[team]/10/10;
led[14]=fenshu[team]/10;
led[15]=fenshu[team]%10;
}
}
break;
case mennusel: set_flag=1;team=!team;break;
case mennuenter :set_flag=0; break;
case js_begin_over : TR0=~TR0;
jsdao=0;
if(!TR0)t24s_flag=0;
else t24s_flag=1;
break;
case t24s_js : t24s_flag=1;t24s=24;
jsdao=0;
break;
}
}
void t0(void) interrupt 3 using 1/*数码管显示中断*/
{
/*========================================================
3ms中断显示扫描。
=========================================================*/
TH1=0xf4;
TL1=0x48;
/*闪烁效果*/
if(set_flag)
{
if(team==0)shanshuo_led=8;
else shanshuo_led=12;
if(led_number==shanshuo_led)
if(shanshuo_flag>120)
{
led_number=led_number+4;
if(led_number==16)led_number=0;
}
shanshuo_flag++;
if(shanshuo_flag==200)shanshuo_flag=0;
}
P1=led[led_number]+led_number*16;
led_number++;
if(led_number==16)led_number=0;
led[0]=tm/10;
led[1]=tm%10;
led[2]=ts/10;
led[3]=ts%10;
led[4]=t10ms/10;
led[5]=t10ms%10;
led[6]=t24s/10;
led[7]=t24s%10;
}
void t1(void) interrupt 1 using 0
{
/*================================================
10ms计时中断
=================================================*/
TH0=0xd8;
TL0=0xf0;
if(t10ms==0)
{//倒计时
t10ms=100;
if(ts==0)
{
tm--;
ts=60;
if(tm==0&&t10ms==100)jsdao=1;
}
ts--;
}
t10ms--;
if(t24s_flag)
{
t24s_t1s++;
if(t24s_t1s==100)
{
t24s_t1s=0;
t24s--;
if(t24s==0)
{
jsdao=1;
TR0=0;
t24s=24;
}
}
}
}
单片机篮球计分器设计 24秒计时 Proteus仿真+源程序.rar
版权申诉
5星 · 超过95%的资源 199 浏览量
2022-06-24
14:24:06
上传
评论 2
收藏 82KB RAR 举报
weixin_48086457
- 粉丝: 1
- 资源: 11
最新资源
- 基于C++实现二叉树的创建,遍历,添加,查找与删除
- 基于C语言实现二叉树的基本操作
- 毕业设计基于STM32的测量温度与压力的数据处理设计C语言完整源码+论文.zip
- 基于MATLAB的PCA算法人脸识别项目源码+GUI界面+说明文档.zip
- 基于STM32的测量温度与压力的数据处理设计源码+论文(毕业设计).zip
- Vision Transformer 网络对不同氨气氧气浓度轨迹RAS 图像数据集的分类,包含训练权重和数据集、迁移学习
- 基于C51带字库LCD12864(ST7920)的keil工程源码,只支持8位并口通讯(不支持串口),可显示中文.zip
- 基于SI4463射频模块433MD-SMA无线模块软硬件技术资料及(SI4463)IC技术资料文档.zip
- (GPS+北斗+GSM)HLK-GS2503模块软硬件开发资料包硬件参考设计(原理图PCB)+技术文档资料.zip
- 基于BERT+Biaffine结构的关系抽取模型源码+文档说明.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈