本项目使用Proteus8仿真Arduino单片机控制器,使用按键、LED模块等。
主要功能:
系统运行后,系统运行后,系统开始运行,K1键控制左转向灯;K2键控制右转向灯;K3键控制紧急情况灯;K4键控制刹车指示灯。
/*
作者:嗨小易(QQ:3443792007)
*/
//系统数据设置
void sys_data_set(void)
{
u8 key=0;
key=key_scan(0);
//左转
if(key==KEY1_PRESS)
{
sys_ctrl.mode[0]=!sys_ctrl.mode[0];
if(sys_ctrl.mode[0]==1)//打开
{
sys_ctrl.mode[1]=0;sys_ctrl.mode[2]=0;sys_ctrl.mode[3]=0;
sys_ctrl.cnt=0;
led_onoff(0);
MsTimer2::start();//打开定时器
}
}
//右转
else if(key==KEY2_PRESS)
{
sys_ctrl.mode[1]=!sys_ctrl.mode[1];
if(sys_ctrl.mode[1]==1)//打开
{
sys_ctrl.mode[0]=0;sys_ctrl.mode[2]=0;sys_ctrl.mode[3]=0;
sys_ctrl.cnt=0;
led_onoff(0);
MsTimer2::start();//打开定时器
}
}
//紧急
else if(key==KEY3_PRESS)
{
sys_ctrl.mode[2]=!sys_ctrl.mode[2];
if(sys_ctrl.mode[2]==1)//打开
{
sys_ctrl.mode[0]=0;sys_ctrl.mode[1]=0;sys_ctrl.mode[3]=0;
sys_ctrl.cnt=0;
led_onoff(0);
MsTimer2::start();//打开定时器
}
}
//刹车
else if(key==KEY4_PRESS)
{
sys_ctrl.mode[3]=!sys_ctrl.mode[3];
if(sys_ctrl.mode[3]==1)//打开
{
sys_ctrl.mode[0]=0;sys_ctrl.mode[1]=0;sys_ctrl.mode[2]=0;
sys_ctrl.cnt=0;
led_onoff(1);
}
}
}
//系统功能控制
void sys_fun_ctrl(void)
{
if(sys_ctrl.mode[0]==0 && sys_ctrl.mode[1]==0 && sys_ctrl.mode[2]==0 &&
sys_ctrl.mode[3]==0)
{
sys_parm_init();
led_onoff(0);
MsTimer2::stop();//关闭定时器
}
}
//应用控制程序
void app_ctrl_demo(void)
{
key_init();
led_init();
time2_init(10);//定时10ms
sys_parm_init();//系统参数初始化
while(1)
{
sys_data_set();//系统数据设定
sys_fun_ctrl();//系统功能控制
}
}
//定时器2中断函数
void timer2Isr(void)
{
static u8 i=0;
static u8 cnt=0;
i++;
if(i>=30)
{
i=0;
//LED左转
if(sys_ctrl.mode[0]==1)
{
led_left(sys_ctrl.cnt);
sys_ctrl.cnt++;
if(sys_ctrl.cnt>=4)
{
sys_ctrl.cnt=0;
}
}
//LED右转
else if(sys_ctrl.mode[1]==1)
{
led_right(sys_ctrl.cnt);
sys_ctrl.cnt++;
if(sys_ctrl.cnt>=4)
{
sys_ctrl.cnt=0;
}
}
//LED紧急
else if(sys_ctrl.mode[2]==1)
{
cnt=!cnt;
led_onoff(cnt);
}
}
}
B站演示视频:https://space.bilibili.com/444388619
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。