本项目使用Proteus8仿真51单片机控制器,使LCD1602液晶,L298电机,直流电机,红外遥控模块等。
主要功能:
系统运行后,LCD1602显示小车运行状态,速度档位,控制命令;可通过红外遥控键发送命令控制小车前进、后退、左转、右转、停止。
/*
作者:嗨小易(QQ技术交流群:570487280)
*/
//系统数据获取
void sys_data_get(void)
{
while(1)
{
break;
}
}
//系统数据显示
void sys_data_show(void)
{
while(1)
{
//速度显示
lcd1602_show_nums(6,0,sys_ctrl.speed,1,0);
//小车方向状态显示
_car_staus_show(sys_ctrl.dir);
//控制命令显示
lcd1602_show_num(14,0,USART1_RX_BUF[0],0);
break;
}
}
//系统数据设置
void sys_data_set(void)
{
//前进
switch(USART1_RX_BUF[0])
{
case CAR_STOP://停止
sys_ctrl.dir=0;
break;
case CAR_FORM://前进
sys_ctrl.dir=1;
break;
case CAR_BACK://后退
sys_ctrl.dir=2;
break;
case CAR_LEFT://左转
sys_ctrl.dir=3;
break;
case CAR_RIGHT://右转
sys_ctrl.dir=4;
break;
case CAR_SPEED_ADD://加速
if(sys_ctrl.speed<5)
sys_ctrl.speed++;
USART1_RX_BUF[0]=0;
break;
case CAR_SPEED_DEC://减速
if(sys_ctrl.speed>1)
sys_ctrl.speed--;
USART1_RX_BUF[0]=0;
break;
}
}
//系统功能控制
void sys_fun_ctrl(void)
{
//控制小车
switch(sys_ctrl.dir)
{
case 0:car_stop();break;//停止
case 1:car_forward();break;//前进
case 2:car_back();break;//后退
case 3:car_left();break;//左转
case 4:car_right();break;//右转
}
pwm_set_duty_cycle(sys_ctrl.speed*20);//占空比
}
//应用控制系统
void appdemo_show(void)
{
sys_parm_init();//系统参数初始化
lcd1602_init();//LCD1602初始化
sys_open_show();//系统初始界面显示
pwm_init(100-1,800-1);
dc_motor_init();
USART1_Init(9600);
while(1)
{
sys_data_get();//系统数据获取
sys_data_show();//系统数据显示
sys_data_set();//系统数据设置
sys_fun_ctrl();//系统功能控制
}
}
void USART1_IRQHandler(void) //串口1中断服务程序
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
USART1_RX_BUF[0]=USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
}
}
B站演示视频:https://space.bilibili.com/444388619
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。