基于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++;
	}
}

记得点赞收藏

补充:总结

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

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值