毕业设计 基于51单片机交通灯的设计


🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机交通灯的设计

硬件系统设计

1.1   硬件系统组成

1.1.1  单片机最小系统

单片机的最小系统包括电源(地),晶振(一般使用11.0592M或者12M),复位电路,单片机内装入程序。有了以上三块内容,单片机就能够工作了。另外要注意的一点是,EA(31脚)也要接高电平,即接到电源+5V。告诉单片机不使用片外存储器,这样单片机系统才会老老实实地执行你烧写进去的程序。下图1.1就是单片机最小系统示意图:

 图1.1   最小系统电路图

STC10F04单片机是单时钟/机器周期(IT)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成高可靠复位电路,针对高速通信,智能控制,强干扰场合。

     STC10F04单片机的定时器0 /定时器1/串行口与传统8051兼容,增加了独特波特率发生器,省去了定时器2。传统8051的1111条指令执行速度全面提速,最快的指令快24倍,最慢的指令快3倍。

1、增强型8051 CPU,1T,单时钟,机器周期,指令代码完全兼容传统8051

2、工作电压:5.5V~3.8/3.3V

3、工作频率范围 :0~35MHz,相当于普通8051的0~420MHz

4、应用程序空间: 4K字节

5、RAM:256字节

6、通用I /O(40/36个),复位后为:准双向口/弱上拉(普通8051传统I/O)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过100mA

7、ISP(在系统可编程)/IAP(在应用可编程),无需专用编辑器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1)直接下载用户程序,数秒即可完成一片

8、看门狗

9、内部集成MAX810专用复位电路(晶体频率在 24MHz以下时,要选择高的复位门槛电压,如4.1V以下复位,晶体频率在12MHz以下时,可选择低的复位门槛电压,如3.7V以下复位,复位脚接1K电阻到地)

10、内置一个对内部Vcc进行掉电检测的掉电检测电路,可设置为中断或复位,5V单片机掉电检测门槛电压为4.1/3.7V附近

11、时钟源:外部高精度晶体/时钟,内部R/C振荡器,用户在下载程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟.常温下内部R/C振荡器频率为:4MHz~8MHz.精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准

12、2个16位定时器(与传统8051兼容的定时器 /计数器,16位定时器T0和T1)

13、3个时钟输出口,可由T0的溢出在P3.0/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟

14、外部中断I/O口有5路,支持传统的下降沿中断或低电平触发中断。Power down(掉电)模式可由外部中断唤醒,INT0/P3.2, INT1/P3.3, INT/TO/P3.4, INT/T1/P3.5, INT/Rxd/P3.0(或INT/Rxd/P1.6)

STC10F04单片机采用了40Pin封装的双列直接DIP结构,如图1.2是它们引脚配置

图1.2  STC10F04引脚配置

40个引脚中正电源和地线两根,外置石英震荡器的时钟线两根,共有36个I/O。

·VCC:电源电压

·GND:地

·P0口:P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

·P1口:Pl 是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,Pl接收低8位地址。

·P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX@Ri 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。

·P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/0 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表1.1所示:

表1.1具有第二功能的P1口引脚

端口引脚

第二功能:

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

/INT0(外中断0)

P3.3

/ INT1(外中断1)

P3.4

T0(定时/计数器0外部输入)

P3.5

T1(定时/计数器1外部输入)

P3.6

/ WR(外部数据存储器写选通)

P3.7

/ RD外部数据存储器读选通)

1.1.2  信号显示驱动电路

 图1.3  三极管电路图

三极管放大作用是通过小电流控制大电流晶体三极管是一种电流控制元件。发射区与基区之间形成的PN结称为发射结,而集电区与基区形成的PN结称为集电结。晶体三极管按材料分常见的有两种:锗管和硅管。而每一种又有NPN和PNP两种结构形式,使用最多的是硅NPN和PNP两种,两者除了电源极性不同外,其工作原理都是相同的,三极管工作在放大区时,三极管发射结处于正偏而集电结处于反偏,集电极电流Ic受基极电流Ib的控制,Ic 的变化量与Ib变化量之比称作三极管的交流电流放大倍数β(β=ΔIc/ΔIb, Δ表示变化量。)在实际使用中常常利用三极管的电流放大作用,通过电阻转变为电压放大作用。三极管是电流放大器件,有三个极,分别叫做集电极C,基极B,发射极E。分成NPN和PNP两种。我们仅以NPN三极管的共发射极放大电路为例来说明一下三极管放大电路的基本原理。

 

  图2.4   三极管放大电路原理图

下面的分析仅对于NPN型硅三极管。如上图3.4所示,我们把从基极B流至发射极E的电流叫做基极电流Ib;把从集电极C流至发射极E的电流叫做集电极电流Ic。这两个电流的方向都是流出发射极的,所以发射极E上就用了一个箭头来表示电流的方向。三极管的放大作用就是:集电极电流受基极电流的控制(假设电源能够提供给集电极足够大的电流的话),并且基极电流很小的变化,会引起集电极电流很大的变化,且变化满足一定的比例关系:集电极电流的变化量是基极电流变化量的β倍,即电流变化被放大了β倍,所以我们把β叫做三极管的放大倍数(β一般远大于1,例如几十,几百)。如果我们将一个变化的小信号加到基极跟发射极之间,这就会引起基极电流Ib的变化,Ib的变化被放大后,导致了Ic很大的变化。如果集电极电流Ic是流过一个电阻R的,那么根据电压计算公式U=R*I可以算得,这电阻上电压就会发生很大的变化。我们将这个电阻上的电压取出来,就得到了放大后的电压信号了。

1.1.3 键盘输入电路

单片机键盘有独立键盘和矩阵式键盘两种:独立键盘每一个I/O 口上只接一个按键,按键的另一端接电源或接地(一般接地),这种接法程序比较简单且系统更加稳定;而矩阵式键盘式接法程序比较复杂,但是占用的I/O少。根据本设计的需要这里选用了独立式键盘接法。

独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。将常开按键的一端接地,另一端接一个I/O 口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。当有键按下时,此I/O 口与地短路迫使I/O 口为低电平。按键释放后,单片机内部的上拉电阻使I/O口仍然保持高电平。我们所要做的就是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。

在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。这种抖动一般10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒的单片机而言则是慢长的。为了提高系统的稳定,我们必须去除或避开它。目前的技术有硬件去抖动和软件去抖动,硬件去抖动就是用部分电路对抖动部分加之处理,但是实现的难度较大又会提高了成本。软件去抖动不是去掉抖动,而是避抖动部分的时间,等键盘稳定了再对其处理。所以这里选择了软件去抖动,实现法是先查寻按键当有低电平出现时立即延时10~200毫秒以避开抖动(经典值为20毫秒),延时结束后再读一次I/O 口的值,这一次的值如果为1 表示低电平的时间不到10~200 毫秒,视为干扰信号。当读出的值是0时则表示有按键按下,调用相应的处理程序。硬件电路如图1.4所示:

   图1.5   键盘控制电路图

交通灯系统详细设计

2.1 软件总体设计思想

本程序由主程序,定时中断子程序和外部中断子程序组成。主程序主要负责系统初始化和等待中断,定时中断子程序主要负责数码管显示刷新和红黄绿灯各种状态切换。外部中断子程序负责紧急情况处理和处理完成恢复。

STC10F04计数的起停由STC10F04的P0和P4口控制,STC10F04的P0和P4口输出1时,STC10F04开始计数,交通灯按正常状态切换工作,P0和P4口输出0时,计数器停止工作,交通灯不再按正常状态切换。STC10F04开始计数后每200ms发出一个中断申请信号,在中断子程序中先刷新数码管,然后判断当前状态,进入相应的处理程序进行处理。当有紧急情况时进入外部中断服务子程序,先让STC10F04停止计数,然后点亮所有的红灯,下一次外部中断处理时,恢复原来的交通灯状况。程序流程图如下图2.1、2.2所示:

 图2.1  主程序流程图

 图2.2中断子程序

2.2 交通控制算法实现

定时中断子程序是本设计的重点,负责完成数码管输出数据刷新和各个状态的处理切换。中断子程序包括数码管输出数据刷新程序和各状态处理程序。中断程序的流程图如图所示。

 图2.3  定时中断流程图

2.4信息显示模块

2.4.1  信号灯模块

信息显示模块包括发光二极管模块和LED倒计时显示子模块。

程序中开始是先定义发光二极管的I/O口,接着设定各个状态量发光二极管的状态数组。第三,运行main主函数,调用主函数里的while循环,while循环语句再通过statusdis函数调用状态数组变量来显示各个状态下各个发光二极管的状态。其流程图如图2.4所示:

 图2.4  发光二极管模块流程图

2.4.2  LED倒计时显示子程序

2.4.2-1   LED数码管原理

本系统采用8位的动态数码显示。控制数码显示的数据由两部分组成,一部分为笔段亮灭控制的信号输入由“A、B、C、D、E、F、G、DP”端口输入,而控制位显示的控制信号由“CS1、CS2、CS3”端口输入,同时该动态数码显示采用共阴型数码管,单片机芯片的P0口和P4口引脚构成了8位LED数码管驱动电路,P0口控制数码管的笔段显示,P4口控制数码管的位显示;共阴型数码管的笔段引脚是二极管的正极,所有二极管的负极连在一起,构成了公共端,即片选端,对于这种数码管的驱动,要求在片选端提供电流,为此,使用了PNP型三极管作为片选端的驱动,共使用8只三极管,所有三极管的发射机连在一起,接到负电源端,他们的基极则分别连到P0.0-P0.7和P4.4-P4.6。这样,当P0.0-P0.7和P4.4-P4.6中某引脚输出是高电平时,三极管不导通,不能给相应位的数码管供电,该位数码管的所有笔段都不亮,反之,如果某引脚是低电平时,三极管导通,可以给相应的数码管供电,该位数码管是否点亮,点亮哪些笔段,取决于这些笔段引脚是高或低电平。

所有8位数码管的笔段连在一起,通过先留电阻后接到P0口,因此,究竟哪些笔段亮,取决于P0口的8根线是输出高电平还是低电平。原理理图中把所有数码管的8个笔划段A-DP同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,由8个NPN的三极管,来控制这8位哪一位工作。具体的数码管电路原理图如下图2.5

图2.5数码管电路原理图

交通灯PCB

交通灯电路原理图

如果学弟学妹们在毕设方面有任何问题,随时可以私信我咨询哦,有问必答!学长专注于单片机相关的知识,可以解决单片机设计、嵌入式系统、编程和硬件等方面的难题。
愿毕业生有力,陪迷茫着前行!

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值