文章目录
一、功能简介
本项目使用Proteus8仿真51单片机控制器,使用按键、LED模块等。
主要功能:
系统运行后,系统运行后,系统开始运行,K1键控制左转向灯;K2键控制右转向灯;K3键控制紧急情况灯;K4键控制刹车指示灯。
二、软件设计
c
/*
作者:嗨小易(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=0XF7;TR0=1;//打开定时器
}
}
//右转
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=0XEF;TR0=1;//打开定时器
}
}
//紧急
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=0X00;TR0=1;//打开定时器
}
}
//刹车
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=0X00;
}
}
}
//系统功能控制
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=0XFF;TR0=0;//关闭定时器
}
}
//应用控制系统
void appdemo_show(void)
{
sys_parm_init();//系统参数初始化
time0_init();
while(1)
{
sys_data_set();//系统数据设定
sys_fun_ctrl();//系统功能控制
}
}
void time0() interrupt 1 //定时器0中断函数
{
static u8 msec=0;
TH0=0XDC; //给定时器赋初值,定时10ms
TL0=0X00;
msec++;//10ms加1次
if(msec>=30)
{
msec=0;
//LED左转
if(sys_ctrl.mode[0]==1)
{
sys_ctrl.cnt++;
LED=(0XF7>>sys_ctrl.cnt)|0xF0;
if(sys_ctrl.cnt>=4)
{
LED=0XF7;sys_ctrl.cnt=0;
}
}
//LED右转
else if(sys_ctrl.mode[1]==1)
{
sys_ctrl.cnt++;
LED=(0XEF<<sys_ctrl.cnt)|0x0F;
if(sys_ctrl.cnt>=4)
{
LED=0XEF;sys_ctrl.cnt=0;
}
}
//LED紧急
else if(sys_ctrl.mode[2]==1)
{
LED=~LED;
}
}
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。