【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)

news2024/11/25 4:31:36

typora-root-url: ./

【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)

文章目录

    • typora-root-url: ./
  • 【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)
    • 任务书
    • 设计说明书
      • 摘要
      • 设计框架架构
      • 设计说明书及设计文件
      • 源码展示

任务书

以动车组作为研究对象,对城市轨道交通列车超速防护系统展开分析与设计。基于单片机实现城市轨道交通列车超速防护系统的设计。 1、画出控制系统原理框图,对其进行说明。 2、完成控制系统的硬件电路原理图设计。 3、进行软件设计并调试仿真,达到相应的控制要求。
资料链接
原理图工程文件
PCB工程文件
仿真模型工程文件
源代码工程
答辩论文低重复率文档,22404字
英文文献及翻译
任务书

设计说明书

摘要

本次设计城市轨道交通列车超速保护系统装置,根据当前的背景研制出一款可以实现时间显示,实时速度显示,公里数显示,并可以通过阈值调节实现设定速度报警的功能。系统设计流程为系统方案确认,电路原理图设计,程序流程设定,程序编写,仿真电路搭建,测试。设计过程均以模块化方式设计,在硬件电路设计过程中构成有蜂鸣器,液晶显示器,时钟芯片DS1302、电源、单片机最小系统共同组成一个硬件电路,在软件部分通过对系统的软件流程绘制,驱动编写,并且实现最终的软件框架。再通过模块化方式对系统程序进行设计,最后通过仿真软件对当前电路软件进行测试。验证了系统预期功能并提出改进方案设想预期功能,系统设计综合全部完成。

设计框架架构

前 言 1
第一章 绪论 2
第一节 研究背景 2
第二节 研究意义 2
第三节 本文的主要研究内容 3
第四节 本章小结 4
第二章 系统整体方案设计 5
第一节 系统方案概述 5
第二节 系统整体方案 5
第三节 元器件选择 6
一、主控芯片选择 6
二、显示器示方案选择 6
三、报警元件选择 8
第四节 测速方案 8
一、频率的测量方法 9
二、速度的实现 10
第五节 本章小结 11
第三章 系统硬件电路设计 12
第一节 单片机介绍 12
一、单片机芯片介绍 12
二、单片机最小系统电路设计 14
第二节 测速电路设计 15
第三节 按键及电源电路设计 16
第四节 液晶显示电路设计 17
第五节 存储电路设计 17
第六节 时钟电路设计 18
第七节 报警电路设计 18
第八节 系统总电路设计 19
第九节 本章小结 19
第四章 系统软件设计 20
第一节 系统软件总流程设计 20
第二节 人机交互程序设计 21
一、人机交互程序设计流程 21
二、人机交互驱动子程序 22
第三节 液晶显示驱动程序设计 22
一、液晶显示驱动程序设计流程 22
二、液晶显示驱动子程序 24
第四节 报警驱动程序设计 25
一、报警驱动程序设计流程 25
二、报警驱动子程序 26
第五节 本章小结 26
第五章 系统仿真实现 27
第一节 仿真电路搭建 27
一、仿真软件介绍 27
第二节 仿真系统调试 29
第三节 仿真系统测试 30
一、人机交互测试 30
二、时间读取测试 31
三、速度检测测试 32
第四节 本章小结 33
结 论 34
致 谢 35
参考文献 36
附 录 37
一、英文原文 37
二、英文翻译 40
三、工程图纸 43
四、源代码 44

设计说明书及设计文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码展示

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#include "Data.h"
#include "DS1302.h"
#include "AT24C02.h"
sbit COUNT_IN=P3^2;
//定义1602相关管脚
sbit rs=P1^4;
sbit en=P1^0;
//键盘定义
sbit K1=P3^4;	//设置时间
sbit K3=P3^6;	//减按键
sbit K2=P3^5;	//加按键
sbit K4=P3^7;	//设置半径安全距离
sbit BEEP=P3^0;
uint count;
unsigned long Velocity,Mileage;
uchar code tab1[]={"  /  /     :    "}; //14/09/10 16:34 3   	
uchar code tab2[]={"  0.000km 00km/h"};	//000.000km 00km/h
uchar code tab3[]={"Wheel Radius  cm"};
uchar code tab4[]={"Safe Speed  km/h"};
uchar code tab5[]={"Sec :           "};			   			
uchar Mode=0;
uchar bike_set=0;
uchar a;
char RADIUS,SAFE_SPEED;
bit LED_SEC;
uchar before_sec;	
//自定义字符
uchar code num[]={
						0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//1	 
						0x1f,0x01,0x01,0x1f,0x10,0x10,0x1f,0x00,//2
						0x1f,0x01,0x01,0x1f,0x01,0x01,0x1f,0x00,//3	 
						0x11,0x11,0x11,0x1f,0x01,0x01,0x01,0x00,//4
						0x1f,0x10,0x10,0x1f,0x01,0x01,0x1f,0x00,//5	 
						0x1f,0x10,0x10,0x1f,0x11,0x11,0x1f,0x00,//6
						0x1f,0x01,0x01,0x01,0x01,0x01,0x01,0x00,//7 	
};
void READS();
void SETS();
void delay(uint x)
{
	uint i,j;
	for(i=0;i<x;i++)
	for(j=0;j<110;j++);
}
void init()
{
	IT0=1;	//INT0负跳变触发	
    TMOD=0x01;//定时器工作于方式1
	TH0=0x3c;	  //50ms
	TL0=0xb0;
	EA=1; //CPU开中断总允许
	ET0=1;//开定时中断
	EX0=1;//开外部INTO中断
    TR0=1;//启动定时
}
/********液晶写入指令函数与写入数据函数,以后可调用**************/
void write_1602com(uchar com)//****液晶写入指令函数****
{
	rs=0;//数据/指令选择置为指令
	P0=com;//送入数据
	delay(1);
	en=1;//拉高使能端,为制造有效的下降沿做准备
	delay(1);
	en=0;//en由高变低,产生下降沿,液晶执行命令
}
void write_1602dat(uchar dat)//***液晶写入数据函数****
{
	rs=1;//数据/指令选择置为数据
	P0=dat;//送入数据
	delay(1);
	en=1; //en置高电平,为制造下降沿做准备
	delay(1);
	en=0; //en由高变低,产生下降沿,液晶执行命令
}
//自定义字符集
void Lcd_ram()      
{ 
	uint i,j,k=0,temp=0x40; 
	for(i=0;i<7;i++)
	{
	   for(j=0;j<8;j++)
	   {
	    write_1602com(temp+j);
	    write_1602dat(num[k]);
	    k++;
	   }
	   temp=temp+8;
	}
}
void lcd_init()//***液晶初始化函数****
{
	Lcd_ram();
	write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据
	write_1602com(0x0c);//开显示不显示光标
	write_1602com(0x06);//整屏不移动,光标自动右移
	write_1602com(0x01);//清显示
	write_1602com(0x80);//显示固定符号从第一行第1个位置之后开始显示
	for(a=0;a<16;a++)
	{
		write_1602dat(tab1[a]);//向液晶屏写固定符号部分
	}
	write_1602com(0x80+0x40);//显示固定符号写入位置,从第2个位置后开始显示
	for(a=0;a<16;a++)
	{
		write_1602dat(tab2[a]);//写显示固定符号
	}
}
void display()
{
	//			1km/h=100m/0.1h	  	 360s
	//			10km/h=100m/0.01h 	 36s
	//			100km/h=100m/0.001h  3.6s
	if(Mode==0&&bike_set==0)
	{
		//读时间
			Ds1302_Read_Time();
			//显示时间
			write_1602com(0x80);
			write_1602dat(0x30+time_buf1[1]/10);
			write_1602dat(0x30+time_buf1[1]%10);
			write_1602com(0x80+3);
			write_1602dat(0x30+time_buf1[2]/10);
			write_1602dat(0x30+time_buf1[2]%10);
			write_1602com(0x80+6);
			write_1602dat(0x30+time_buf1[3]/10);
			write_1602dat(0x30+time_buf1[3]%10);
			write_1602com(0x80+9);
			write_1602dat(0x30+time_buf1[4]/10);
			write_1602dat(0x30+time_buf1[4]%10);
			write_1602com(0x80+12);
			write_1602dat(0x30+time_buf1[5]/10);
			write_1602dat(0x30+time_buf1[5]%10);
			write_1602com(0x80+15);
			write_1602dat(time_buf1[7]-1);		
			if(before_sec!=time_buf1[6])
			{
				before_sec=time_buf1[6];
				write_1602com(0x80+11);
				write_1602dat(':');
				LED_SEC=1;
			}
			if(LED_SEC==0)
			{
				write_1602com(0x80+11);
				write_1602dat(' ');	
			}
			write_1602com(0x80+0x40);
			if(Mileage/1000000==0)
			write_1602dat(' ');
			else
		write_1602dat(0x30+Mileage/1000000);//数字+0x30得到该数字的LCD1602显示码
			if(Mileage%1000000/100000==0)
			write_1602dat(' ');
			else	
			write_1602dat(0x30+Mileage%1000000/100000);//数字+0x30得到该数字的LCD1602显示码
			write_1602dat(0x30+Mileage%1000000%100000/10000);//数字+0x30得到该数字的LCD1602显示码 
			write_1602com(0x80+0x40+4);
			write_1602dat(0x30+Mileage%1000000%100000%10000/1000);//数字+30得到该数字的LCD1602显示码
			write_1602dat(0x30+Mileage%1000000%100000%10000%1000/100);//数字+30得到该数字的LCD1602显示码
			write_1602dat(0x30+Mileage%1000000%100000%10000%1000%100/10);//数字+30得到该数字的LCD1602显示码
			SETS();
	
			write_1602com(0x80+0x40+10);
			write_1602dat(0x30+Velocity/10);
			write_1602dat(0x30+Velocity%10);//数字+30得到该数字的LCD1602显示码
	}
	else if(Mode!=0)
	{
		switch(Mode)
		{
			case 1:	
				write_1602com(0x80+0x40);//显示固定符号写入位置
				for(a=0;a<16;a++)
				{
					write_1602dat(tab5[a]);//写显示固定符号
				}
				write_1602com(0x80+0x40+14);
				write_1602dat(0x30+time_buf1[6]/10);
				write_1602dat(0x30+time_buf1[6]%10);	
				write_1602com(0x0F);	 //打开闪烁
				write_1602com(0x80+1);
				break;						  
			case 2:
				write_1602com(0x80+4);
				break;
			case 3:
				write_1602com(0x80+7);
				break;
			case 4:
				write_1602com(0x80+10);
				break;
			case 5:
				write_1602com(0x80+13);
				break;
			case 6:
				write_1602com(0x80+0x40+15);
				break;
			case 7:
				write_1602com(0x80+15);
				break;
			case 8:
				write_1602com(0x0c);
				write_1602com(0x80);//显示固定符号从第一行第1个位置之后开始显示
				for(a=0;a<16;a++)
				{
					write_1602dat(tab1[a]);//向液晶屏写固定符号部分
				}
				write_1602com(0x80+0x40);//显示固定符号写入位置,从第2个位置后开始显示
				for(a=0;a<16;a++)
				{
					write_1602dat(tab2[a]);//写显示固定符号
				}
				break;
		}
	}
	else if(bike_set!=0)
	{
		switch(bike_set)
		{
			case 1:	
				write_1602com(0x80);//显示固定符号写入位置
				for(a=0;a<16;a++)
				{
					write_1602dat(tab3[a]);//写显示固定符号
				}
				write_1602com(0x80+0x40);//显示固定符号写入位置
				for(a=0;a<16;a++)
				{
					write_1602dat(tab4[a]);//写显示固定符号
				}
				write_1602com(0x80+12);
				write_1602dat(0x30+RADIUS/10);		   //车轮半径
				write_1602dat(0x30+RADIUS%10);
				write_1602com(0x80+0x40+10);
				write_1602dat(0x30+SAFE_SPEED/10);		   //安全速度
				write_1602dat(0x30+SAFE_SPEED%10);	
				write_1602com(0x0F);	 //打开闪烁
				write_1602com(0x80+13);
				break;						  
			case 2:
				write_1602com(0x80+0x40+11);
				break;
			case 3:
				write_1602com(0x0c);
				write_1602com(0x80);//显示固定符号从第一行第1个位置之后开始显示
				for(a=0;a<16;a++)
				{
					write_1602dat(tab1[a]);//向液晶屏写固定符号部分
				}
				write_1602com(0x80+0x40);//显示固定符号写入位置,从第2个位置后开始显示
				for(a=0;a<16;a++)
				{
					write_1602dat(tab2[a]);//写显示固定符号
				}
				break;
		}
	}	
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postgres源码解析39 表创建执行全流程梳理--3

本文结合实例讲解表创建执行流程 [CREATE TABLE wp_shy(id int primary key, name carchar(20))],相关知识回顾见&#xff1a; postgres源码解析38 表创建执行全流程梳理–1 postgres源码解析38 表创建执行全流程梳理–2 执行流程图 transformCreateStmt函数是表创建真正的入口…

系统封装制作

工具网址&#xff1a; 镜像下载&#xff1a; Windows 10 22H2 - MSDN - 山己几子木 (sjjzm.com)pe工具&#xff1a;【新提醒】优启通 v3.7.2022.0910&#xff08;2022.10.14 发布&#xff09;_IT天空原创软件_IT天空 (itsk.com)万能驱动&#xff1a;万能驱动 v7.22.0912.2&…

国产全志T3+Logos FPGA开发板(4核ARM Cortex-A7)规格书

评估板简介 创龙科技TLT3F-EVM是一款基于全志科技T3四核ARM Cortex-A7 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核国产工业评估板,ARM Cortex-A7处理器单元主频高达1.2GHz。评估板由核心板和评估底板组成,核心板CPU、FPGA、ROM、RAM、电源、晶振、连接器等所有器件均…

[附源码]计算机毕业设计springboot企业售后服务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

如何学习运放实战设计?学这些精髓

一、同相放大电路虚短&#xff1a;运放理想放大倍数10万倍&#xff0c;一般输出都是3V或5V较多&#xff0c;运放放大的是输入信号的压差&#xff0c;放大10万倍的话&#xff0c;只能说明输入信号的压差非常非常接近&#xff0c;近似相等&#xff0c;我们称之为虚短&#xff08;…

多功能便携式吸尘器设计

目 录 摘 要 i Abstract ii 1 引言 1 2 多功能便携式吸尘器的历史及发展 2 2.1 多功能便携式吸尘器的历史 2 2.2 业界的发展情况 3 3 多功能便携式吸尘器的分类 5 3.1 卧式&#xff08;Canister&#xff09; 5 3.2 立式&#xff08;Upright&#xff09; 5 3.3 手持式 &#xff…

[附源码]SSM计算机毕业设计学校失物招领系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Jetbrains idea整合远程的docker服务器

Jetbrains idea整合远程的docker服务器准备工作服务端准备开发环境准备整合远程服务器的步骤服务端配置客户端配置准备工作 服务端准备 首先我们需要一台远程的安装了docker的CentOS服务器&#xff08;其他Linux服务器的操作区别不大&#xff09;&#xff0c;课参考我的文章&…

防水蓝牙耳机哪个好?防水音质好的蓝牙耳机推荐

真无线蓝牙耳机即将成为人们日后必不可少的东西&#xff0c;它已经逐渐成为我们生活中最重要的听觉媒介&#xff0c;是有线耳机给不了的自由感&#xff0c;有一些蓝牙耳机还可以让你在下雨天没带雨伞时依然可以带着听歌&#xff0c;今天给大家介绍四款防水能力极好的蓝牙耳机&a…

【发表案例】智能物联网类SCIEI,仅25天录用,计算机领域必投SCI快刊,12月截稿

【期刊简介】3.5-4.0&#xff0c;JCR2区&#xff0c;中科院3区 【检索情况】SCI&EI双检&#xff0c;正刊 【征稿领域】基于人工智能的工业物联网智能传感器 【参考周期】3个月左右 【截稿日期】2022年12月30日 【期刊简介】2.0-3.0&#xff0c;JCR3区&#xff0c;中科院…

fastapi_No.24_日志记录系统

文章目录第一步&#xff1a;创建日志记录器第二步&#xff1a;挂载日志记录器第三步&#xff1a;使用日志记录第四步&#xff1a;清除日志记录器完整代码第一步&#xff1a;创建日志记录器 利用loguru包创建一个日志记录器。 from loguru import logger from datetime import…

快速提升中小企业销售效率的5个自动化小技巧

成长期的中小企业&#xff0c;如何提升销售/市场部效率就是CEO/COO/CMO/销售VP们非常关心的一个话题。销售效率的计算很简单&#xff0c;通常用销售团队的总收入除以销售团队的工资、福利、办公成本等。举例&#xff0c;如果一个30人的销售团队&#xff0c;一年的销售收入是500…

GD32串口空闲(IDLE)中断 + DMA机制接收数据

前言 串口功能在单片机开发中&#xff0c;是比较常用的外设&#xff0c;熟练使用串口功能也是驱动开发必备的技能之一。 DMA是一种CPU辅助手段&#xff0c;可以在CPU不参与的情况下&#xff0c;是做一些辅助CPU的事情&#xff0c;如通常的数据搬运。 在没有DMA之前&#xff0c;…

R语言分位数回归Quantile Regression分析租房价格

全文链接&#xff1a;http://tecdat.cn/?p18422本文想在R软件中更好地了解分位数回归优化。在查看分位数回归之前&#xff0c;让我们从样本中计算中位数或分位数&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。相关视频中位数考虑一个样本 。要计算中位数&am…

1.聊聊Netty那些事儿之从内核角度看IO模型

从今天开始我们来聊聊Netty的那些事儿&#xff0c;我们都知道Netty是一个高性能异步事件驱动的网络框架。 它的设计异常优雅简洁&#xff0c;扩展性高&#xff0c;稳定性强。拥有非常详细完整的用户文档。 同时内置了很多非常有用的模块基本上做到了开箱即用&#xff0c;用户…

营销投入大没效果?痛点难点一站式解决!

市场经济在不断发展、走向成熟的过程中&#xff0c;也使得市场结构和要素变得愈发复杂。营销一直是企业的必需品&#xff0c;其理念和方法也在不断变化。 营销是一项有组织的活动&#xff0c;它包括创造“价值”&#xff0c;将“价值”通过沟通输送给顾客&#xff0c;以及维系…

【毕业设计】大数据心血管疾病数据分析(医学大数据分析)

文章目录0 前言1 课题背景2 数据处理3 数据可视化4 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对毕设的要求越来越高&#xff0c…

Flink系列之Flink流式计算引擎基础理论

声明&#xff1a; 文章中代码及相关语句为自己根据相应理解编写&#xff0c;文章中出现的相关图片为自己实践中的截图和相关技术对应的图片&#xff0c;若有相关异议&#xff0c;请联系删除。感谢。转载请注明出处&#xff0c;感谢。 By luoyepiaoxue2014 B站&#xff…

[附源码]计算机毕业设计JAVA线上图书销售管理系统

[附源码]计算机毕业设计JAVA线上图书销售管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

电脑卡怎么办?4招帮你解决电脑卡顿的烦恼!

你是不是也遇到过这样的情况&#xff1a;电脑突然卡顿&#xff0c;玩游戏也是卡的不行。首先我们先了解一下电脑卡顿的原理。造成这种现象的原因主要是由于 CPU、显卡等硬件性能老化或者损坏。电脑卡顿对我们来说真的非常痛苦&#xff0c;严重影响了工作和学习效率&#xff0c;…