文章目录
一、功能简介
本项目使用Proteus8仿真51单片机控制器,使用声光报警模块、动态数码管模块、按键模块等。
主要功能:
系统运行后,数码管显示比赛时间和AB队得分;系统还未开启时,可通过按键K1和K2调节分钟,K3和K4调节秒钟;当按下K7键比赛开始,K1和K2调节A队得分;K3和K4调节B队得分;当比赛时间结束,可按下K6键交换场地,亦可按下K5键清零得分,回归最初状态。
二、软件设计
c
/*
作者:嗨小易(QQ:3443792007)
*/
//系统数据设置
void sys_data_set(void)
{
u8 key=0;
key=key_scan(0);
//开始/暂停
if(key==KEY7_PRESS)
{
beep_alarm(10,1000);//提示音
sys_ctrl.start++;
if(sys_ctrl.start==1)
{
LED_KS=0;LED_ZT=1;
TR0=1;//打开定时器
}
else if(sys_ctrl.start==2)
{
LED_KS=1;LED_ZT=0;
TR0=0;//关闭定时器
}
else
{
LED_KS=0;LED_ZT=1;
sys_ctrl.start=1;
TR0=1;//打开定时器
}
}
//还未开始,可调节时间
if(sys_ctrl.start==0)
{
//分加
if(key==KEY1_PRESS)
{
sys_ctrl.min++;
if(sys_ctrl.min>59)sys_ctrl.min=0;
}
//分减
else if(key==KEY2_PRESS)
{
sys_ctrl.min--;
if(sys_ctrl.min<0)sys_ctrl.min=59;
}
//秒加
else if(key==KEY3_PRESS)
{
sys_ctrl.sec++;
if(sys_ctrl.sec>59)sys_ctrl.sec=0;
}
//秒减
else if(key==KEY4_PRESS)
{
sys_ctrl.sec--;
if(sys_ctrl.sec<0)sys_ctrl.sec=59;
}
//清零
else if(key==KEY5_PRESS)
{
sys_parm_init();//系统参数初始化
}
//交换场地
else if(key==KEY6_PRESS)
{
sys_ctrl.dir=!sys_ctrl.dir;
}
}
//比赛开始
else
{
//A加分
if(key==KEY1_PRESS)
{
sys_ctrl.score_a++;
if(sys_ctrl.score_a>99)sys_ctrl.score_a=99;
}
//A减分
else if(key==KEY2_PRESS)
{
sys_ctrl.score_a--;
if(sys_ctrl.score_a<0)sys_ctrl.score_a=0;
}
//B加分
else if(key==KEY3_PRESS)
{
sys_ctrl.score_b++;
if(sys_ctrl.score_b>99)sys_ctrl.score_b=99;
}
//B减分
else if(key==KEY4_PRESS)
{
sys_ctrl.score_b--;
if(sys_ctrl.score_b<0)sys_ctrl.score_b=0;
}
}
}
//应用控制系统
void app_ctrl_sys(void)
{
sys_parm_init();//系统参数初始化
time0_init();//定时器0初始化
while(1)
{
sys_data_show();//系统数据显示
sys_data_set();//系统数据设置
}
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。