当前位置: 首页 > news >正文

基于51单片机公交车到站指示灯设计

资源文件夹包含:proteus仿真+原理图;keil编写的C语言程序;详细设计说明书。
资源链接:加我QQ:1271370903 记得点赞收藏

一. 系统方案总体设计

1.1 研究意义和设计思路
近年来,随着城市人口的不断增加,人们生活节奏的不断加快,公交在大城市以及中小城市已经普及,并且有了日新月异的发展,在人民生活中起着重要作用,因此,公交车的正常运行与人们的正常生活息息相关。传统公交年报站大多是由来乘务人员来人工报站,但是因为方言的差异或者人多时语音嘈杂,这种方式不利于人民生活的和谐。所以根据这种需要市面上产生流行了多种公交年报站器也方便人们的生话。
目前虽然现在些大城市的公交车上已经采用GPS定位系统自动报站,但其造价昂贵,难以在一些中小城市实现普及。因此本设计针对目前常见公交车站无提示公交车轨迹信息,研究介绍基于一种单片机控制的指示灯提示系统。系统是采用到站按键控制,LED指示灯亮起在此站,而下一站指示灯闪烁提醒。
1.2 整体模块框图
系统框图如图1所示,主要由AT89C52单片机、晶振电路、复位电路、LED指示灯电路、按键电路等组成。
在这里插入图片描述

二、硬件设计

1、最小应用系统
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。
在这里插入图片描述
图 最小应用系统及引脚接线图
1.1晶振电路
在这里插入图片描述
晶振电路即时钟电路,是AT89C51单片不可或缺的电路,在其工作运行时它起到控制信号的作用。时钟信号对单机片内部电路的影响极大,在它的作用下,单片机会遵循基本的设计原则通过时序指令完成工作。本设计通过数据的分析采用频率为12MHz的晶振,22pF的电容。
1.2 复位电路
在这里插入图片描述
单片机小系统采用上电自动复位和手动按键复位两种方式实现系统的复位操作。所谓复位电路,就是在AT89C51的引脚RET端接入的一个能产生复位信号的电路。单片机在进行工作的同时,把关于内部的数据恢复到原来的参数。
2 .按键电路
在这里插入图片描述
按键接线图如图,按键在系统中相当于公交司机的到站按钮,说明公交车已到此站,提醒下一站用户信息。
3.LED指示灯电路
在这里插入图片描述
指示灯电路是安装在公交站站台,提醒车辆信息,此系统相当于总共8个站,每次亮起的灯说明在此站刚到和此站刚出发,另一个灯是在闪烁。
4.整体仿真电路设计
在这里插入图片描述
5.起始站发车状态、中间某一站、末站指示灯图
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、 软件设计

3.1 主程序设计
首先对程序初始化,指示灯从上开始,程序是8种状态指示。在8种程序中分别定义不同下的状态,设置外部中断key=0,判断给num自增,到达下一种状态。

3.2 程序流程图
在这里插入图片描述

四、代码

#include <reg52.h>
sbit LED1=P2^0;//定义8种指示灯引脚
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;

sbit key=P3^7;  //定义按钮引脚

int num=1;//赋初值
void delay500ms(void)   //延时函数
{
    unsigned char a,b,c;
    for(c=205;c>0;c--)
        for(b=116;b>0;b--)
            for(a=9;a>0;a--);
}
void InitTimer0()//开中断
{
    TMOD = 0x01;
    TH0 = 0x0FC;
    TL0 = 0x18;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void main()
{

	InitTimer0();
	while(1)
	{
		if(num==1)/定义第一种状态,第一个灯亮,第二个灯闪烁
		{
			LED1=0;LED2=1;LED3=1;LED4=1;
			LED5=1;LED6=1;LED7=1;LED8=1;
			delay500ms();
			LED1=0;LED2=0;LED3=1;LED4=1;
			LED5=1;LED6=1;LED7=1;LED8=1;
			delay500ms();			 
		}
		if(num==2)/定义第二种状态,第二个灯亮,第三个灯闪烁
		{
			LED1=1;LED2=0;LED3=1;LED4=1;
			LED5=1;LED6=1;LED7=1;LED8=1;
			delay500ms();
			LED1=1;LED2=0;LED3=0;LED4=1;
			LED5=1;LED6=1;LED7=1;LED8=1;
			delay500ms();
		}
		if(num==3)/定义第三种状态,第三个灯亮,第四个灯闪烁
		{
			LED1=1;LED2=1;LED3=0;LED4=1;
			LED5=1;LED6=1;LED7=1;LED8=1;
			delay500ms();
			LED1=1;LED2=1;LED3=0;LED4=0;
			LED5=1;LED6=1;LED7=1;LED8=1;
			delay500ms();

		}
		if(num==4)/定义第四种状态,第四个灯亮,第五个灯闪烁
		{
			LED1=1;LED2=1;LED3=1;LED4=0;
			LED5=1;LED6=1;LED7=1;LED8=1;
			delay500ms();
			LED1=1;LED2=1;LED3=1;LED4=0;
			LED5=0;LED6=1;LED7=1;LED8=1;
			delay500ms();

		}
		if(num==5)/定义第五种状态,第五个灯亮,第六个灯闪烁
		{
			LED1=1;LED2=1;LED3=1;LED4=1;
			LED5=0;LED6=1;LED7=1;LED8=1;
			delay500ms();
			LED1=1;LED2=1;LED3=1;LED4=1;
			LED5=0;LED6=0;LED7=1;LED8=1;
			delay500ms();

		}
		if(num==6)/定义第六种状态,第六个灯亮,第七个灯闪烁
		{
			LED1=1;LED2=1;LED3=1;LED4=1;
			LED5=1;LED6=0;LED7=1;LED8=1;
			delay500ms();
			LED1=1;LED2=1;LED3=1;LED4=1;
			LED5=1;LED6=0;LED7=0;LED8=1;
			delay500ms();
		}
		if(num==7)/定义第七种状态,第七个灯亮,第八个灯闪烁
		{
			LED1=1;LED2=1;LED3=1;LED4=1;
			LED5=1;LED6=1;LED7=0;LED8=1;
			delay500ms();
			LED1=1;LED2=1;LED3=1;LED4=1;
			LED5=1;LED6=1;LED7=0;LED8=0;
			delay500ms();
		}
		if(num==8)/定义第八种状态,第八个灯亮,第一个灯闪烁
		{
			LED1=1;LED2=1;LED3=1;LED4=1;
			LED5=1;LED6=1;LED7=1;LED8=0;
			delay500ms();
			LED1=0;LED2=1;LED3=1;LED4=1;
			LED5=1;LED6=1;LED7=1;LED8=0;
			delay500ms();
		}
	}
}
void Timer0Interrupt(void) interrupt 1//外部中断函数调用设置
{
    TH0 = 0x0FC;
    TL0 = 0x18;
	if(key==0)
	{
		while(key==0);
		if(num>8)
			num=1;
		else
			num++;
	}
}

记得点赞收藏

补充:总结

我在这一次单片机的设计过程中,很是受益匪浅。通过对自己所学的知识的回顾,并充分发挥对所学知识的理解和对毕业设计的思考及书面表达能力,最终完成了。这为自己今后进一步深化学习,积累了一定宝贵的经验。撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。培养了我运用所学知识解决实际问题的能力。
通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。这个实验十分有意义 我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。
我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。

相关文章:

  • MySQL表的增删查改
  • 开关电源学习(一) MP2315S简介
  • String类详解(上)
  • 【数据结构与算法】栈的深入学习(上)
  • C++向量复习题以及知识讲解
  • 深入理解python装饰器
  • 大数据趣味学习探讨(三):怎么确定学习目标
  • SSM整合(超详细)
  • 【程序语言】-- 编程语言分类和应用
  • Springboot三层架构--DAO层、Service层、Colltroler层--这波我在外太空
  • Selenium快速入门
  • manim|集合的运算
  • 【代理设计模式 Objective-C语言】
  • 【C++】类和对象 (上篇)
  • 【Shell编程】Bash变量-用户自定义变量
  • 【个人向】《HTTP图解》阅后小结
  • Apache Spark Streaming 使用实例
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ESLint简单操作
  • extjs4学习之配置
  • flask接收请求并推入栈
  • node-glob通配符
  • PAT A1017 优先队列
  • Web标准制定过程
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 后端_MYSQL
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 首页查询功能的一次实现过程
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 译米田引理
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 交换综合实验一
  • ​linux启动进程的方式
  • ​力扣解法汇总946-验证栈序列
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #{}和${}的区别是什么 -- java面试
  • #NOIP 2014# day.1 T2 联合权值
  • ( 10 )MySQL中的外键
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (12)Linux 常见的三种进程状态
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转载)hibernate缓存
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net 托管代码与非托管代码
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • ??javascript里的变量问题