【单片机毕业设计】【mcuclub-dz-869】基于单片机的车辆定位追踪系统设计
在这里插入代码片
最近设计了一个项目基于单片机的车辆定位追踪系统设计,与大家分享一下:
一、基本介绍
项目名:基于单片机的车辆定位追踪系统设计
项目编号:mcuclub-dz-869
单片机类型:STM32F103C8T6
具体功能:
1、通过GPS进行定位;
2、通过DS1302获取当前的时间;
3、通过霍尔检测模块获取当前车辆的行驶速度;
4、通过OLED显示检测的参数;
5、通过按键可修正时间、调节车速
二、32实物图
单片机型号:STM32F103C8T6
板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。
供电接口:TYPE-C

三、原理图
软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图

四、PCB图
由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。

五、系统框图

本设计以STM32F103C8T6单片机为核心控制器,构建一个基于单片机的车辆定位追踪控制系统。有三个部分组成:中控、输入和输出;中控由STM32F103C8T6单片机组成;
输入部分由五个部分组成:第一部分是GPS检测模块,用于检测当前车辆的位置;第二部分是霍尔传感器,用于获取当前车辆的行驶速度;第三部分是DS1302模块,用于检测获取当前的时间;第四部分是按键模块,用于修正时间以及调节车速;第五部分是供电模块,为系统提供稳定的电源支持。
输出部分由两个部分组成:第一部分是OLED显示模块,用于显示当前GPS的经纬度,当前的时间,速度。第二部分是直流电机模块,由直流电机模拟车轮;
六、软件设计流程

七、部分程序展示
软件版本:keil5
逻辑程序和驱动程序分开,分布于main.c和其他.c文件
函数名:显示函数
传参值:无
返回值:无
**********************************/
void Display_Function(void)
{
if(time_num % 10 == 0)
{
switch(display_num) //根据不同的显示界面,显示不同的内容
{
case 0: //界面0:显示测量数据
sprintf(display_buf, "%02d:%02d:%02d ",(int)ds1302_buf[4],(int)ds1302_buf[5],(int)ds1302_buf[6]);
Oled_ShowString(1,4, display_buf);
Oled_ShowCHinese(2,0,"经度:");
sprintf(display_buf,"%f",E_value);
Oled_ShowString(2,6,display_buf);
Oled_ShowCHinese(3,0,"纬度:");
sprintf(display_buf,"%f",N_value);
Oled_ShowString(3,6,display_buf);
Oled_ShowCHinese(4,0,"速度:");
sprintf(display_buf,"%dkm/h ",speed_value);
Oled_ShowString(4,6,display_buf);
break;
case 1: //界面1:显示设置时
Oled_ShowCHinese(1,2,"设置时间");
if(time_num % 20 == 0)
{
sprintf(display_buf, "%02d:%02d:%02d",(int)ds1302_buf[4],(int)ds1302_buf[5], (int)ds1302_buf[6]);
Oled_ShowString(2,4,display_buf);
}
if(time_num % 40 == 0)
{
Oled_ShowString(2,4," ");
}
break;
case 2: //界面2:显示设置分
Oled_ShowCHinese(1,2,"设置时间");
if(time_num % 20 == 0)
{
sprintf(display_buf, "%02d:%02d:%02d",(int)ds1302_buf[4],(int)ds1302_buf[5], (int)ds1302_buf[6]);
Oled_ShowString(2,4,display_buf);
}
if(time_num % 40 == 0)
{
Oled_ShowString(2,7," ");
}
break;
case 3: //界面3:显示设置秒
Oled_ShowCHinese(1,2,"设置时间");
if(time_num % 20 == 0)
{
sprintf(display_buf, "%02d:%02d:%02d",(int)ds1302_buf[4],(int)ds1302_buf[5], (int)ds1302_buf[6]);
Oled_ShowString(2,4,display_buf);
}
if(time_num % 40 == 0)
{
Oled_ShowString(2,10," ");
}
break;
default:
break;
}
}
}
/**********************************
函数名:处理函数
传参值:无
返回值:无
**********************************/
void Manage_Function(void)
{
switch (gears_value) //根据档位调节转速
{
case 0:
pwm_num = 0;
break;
case 1:
pwm_num = 2;
break;
case 2:
pwm_num = 6;
break;
case 3:
pwm_num = 10;
break;
}
}
更多推荐
所有评论(0)