基于STM32单片机的智能交通灯的设计_第1页
基于STM32单片机的智能交通灯的设计_第2页
基于STM32单片机的智能交通灯的设计_第3页
基于STM32单片机的智能交通灯的设计_第4页
基于STM32单片机的智能交通灯的设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

梧州学院毕业论文论文题目基于STM32的智能交通灯的设计学院信息与电子工程学院专业电子信息工程班级12电本2班学号2201学生姓名戈强宝指导教师(签名)完成时刻2016年1月

梧州学院学士学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究功效。除文中专门加以标注引用的内容之外,本论文不包括任何其他个人或集体已经发表或撰写的功效作品。对本文的研究所作出重要奉献的个人和集体,均已在文中以明确方式说明。本人完全意识到本声明的后果由本人承担。论文作者签名:日期:

摘要交通,社会进展和人民生活水平提高的大体条件,经济的进展确信会带来人类外出数量的增加,在我们中国,交通拥堵已经成为一个很严峻的问题,我国的汽车工业此刻正处在起步时期的时期,因此限制车辆的增加不是解决问题的最好方式。可是通过采取增加供给的方式,即大量修筑道路基础设施的方式,在资源匮乏、生态环境愈来愈恶化的今天,面对愈来愈拥堵的交通,以国家有限的资源和财力和环境的压力,也将受到限制。这就需要依托除限制需求和提供道路设施之外的其他方式来知足人们对日趋增加的交通需求。交通系统,正是解决这一矛盾的重要途径之一。智能交通系统能够对城市交通进行智能化的控制,它能够让道路变的畅通,同时它还能够提高道路交通的有效率。合理的进行交通智能化操纵,能够对交通进行合理的治理,使交通维持在一个比较平稳的工作状态,从而能够幸免或是缓和交通拥堵的状况,从而能够极大的提高交通运输的工作效率,乃至能够大大减少交通事故的发生,和能够增加交通平安,有效降低污染程度,极大程度上节省能源消耗,本文,通过对十字交叉路口交通信号的智能化操纵,从而达到优化路口交通流的目的。关键词:交通;拥堵;效率IIDesignofintelligenttrafficlightbasedonSTM32AbstractTransportation,socialdevelopmentandpeople'slivingstandardsimprovethebasicconditions,economicdevelopmentwillcertainlybringhumanbeingsoutnumber,inourChina,trafficcongestionhasbecomeaveryseriousproblem,China'sautoindustryisinitsinfancy,sotheincreaseinsupplyisnotthebestwaytosolvetheproblem,butbyadoptingthemethodofincreasingsupply,intheresourceshortage,ecologicalenvironmentisgettingworseandworse.Demandandprovideothermeansofroadfacilitiestomeetthegrowingtrafficdemand.Trafficsystemisoneoftheimportantwaystosolvethisproblem.Intelligenttransportationsystemcanmakethetrafficintelligentcontrol.Itcanimprovetheefficiencyofroadtraffic,trafficintelligentcontrol,trafficmanagement,trafficmaintenanceinarelativelystablestate,whichcangreatlyimprovetheworkefficiency,andcangreatlyreducethetrafficsafety,reducepollution,andsaveenergy.Inthispaper,throughtheintelligentcontroloftrafficsignalsattheintersection,thetrafficflowisoptimized.Keywords:Ttaffic;Trafficjam;EfficiencyIIIITOC\o"1-2"\h\u第一章绪论 1项目背景 1国内现行交通灯的短处 1第二章系统设计内容 3设计目的 3系统要紧功能模块 3第三章单片机概述及各类芯片简介 4单片机概述 4要紧芯片简介 6第四章系统硬件设计 1074HC138译码器模块 1074HC573驱动模块 1074HC595驱动模块 11数码管显示模块 114*4矩阵键盘模块 12点阵模块 13第五章软件设计 15数码管显示倒计时程序设计 15点阵显示程序设计 20手动输入通行时刻程序设计 21检测车流量动态改变通行时刻程序设计 24第六章总结 26参考文献 31附录 32致谢 35IIIIII第一章绪论TA\s"第一章前言"\c1项目背景我国,是一个人口大国,几十年来,我国的经济快速进展,人们的视野变得愈来愈开阔,愈来愈多的人选择了这条路:离开家乡,到别的城市打拼。每一年的寒暑假,有好几万万的大学生回家、还校,2021年的十一国庆黄金周期间,全国的很多旅行景区,游客的数量都超过了往年,在此期间,我国的出行人次达到了亿。那时,全国各地的要紧干道都暴发了很严峻的拥堵问题,期间也发生了很多起车祸,由于路况过于拥堵,高速路两边的应急车道也挤满了车,以至于急救车无法前去救援。十一国庆黄金周期间,有很多家庭自驾游去外地旅行,一开始是开高兴心的出门,可是在途中确碰到了很严峻的交通拥堵问题,而且一堵车确实是堵很长时刻,几个小时算是短的,长的有一成天,论谁碰到这种事都会被扫兴的。每一年的春运,大量的学生和民工返乡,出行人次更是达到了几十亿人次,平均天天都会有七千万的出行人次,如此庞大的出行人次引发了严峻的交通拥堵问题,那个问题是每一个城市都正在面对的问题,针对那个问题,我国一直在大力进展铁路和公路,而且已经取得了专门大的进步,可是交通拥堵的问题仍然存在,通过进展铁路和公路是解决交通拥堵的一个专门好的方式,但是无法在短时间内减缓交通拥堵问题。国内现行交通灯的短处我通过对城市交通拥堵问题的调查和对周边城市交通状况的实地考察,我发觉城市交通路口的交通灯对交通的治理显得十分的重要,若是没有交通灯对城市交通的有效治理,交通就会瘫痪,来往的车辆和行人在通过十字路口时将会毫无秩序,胡乱的行驶,司机开车通过路口时不能不警惕翼翼,生怕撞到过往的行人,同时也生怕与别的车辆相撞,行人在过马路时也是惊惶失措,平安隐患超级明显,若是没有交通灯的有效治理,交通事故将会大幅度增加。现行的交通灯治理系统尽管能够操纵操纵不同方向的行人和车辆有顺序的通过,可是现行的交通灯治理系统过于古板,各个方向的通行时刻和通行顺序一经确信就很难改变,例如有一个十字路口,早上的时候,来自东边的车辆比较多,下午,来自西边的车辆比较多,现行的交通灯不管是在何时,哪个方向所能通过的时刻都是固定不变的。现行的交通灯治理方案是不合理的,正确的方案应该是:早上的时候,给从东边来的车辆更多的绿灯通行时刻,下午的时候,给从西边来的车辆更多的绿灯通行时刻。如此的交通治理系统能够通过对各个方向车流量的检测,智能化操纵通行时刻,如此能够使道路通畅,解决交通拥堵问题,对车流量的正确引导能够让交通维持在一个较为稳固的工作状态,从而能够增加道路行驶平安。第二章系统设计内容设计目的本设计的目的是:设计出一个具有有效价值高,性价比高的智能化十字路口交通灯治理系统,那个系统性能较好,而且稳固性很高,能够检测各个方向的车流量,而且通过各个方向的车流量智能操纵各个方向的通行时刻,即:车流量多的方向通行时刻长,车流量少的方向通行时刻短。本设计考虑到当车流量较少时,各个方向的通行时刻仍然很长时,就会造成资源浪费,增加了车辆的等待时刻,从而会增加碳排放量,加重空气污染。例如有些路口,在一周中,有几天的车流量较大,也有几天车流量很小,若是通行时刻固定不边,就很不合理,本设计充分考虑到这一点,增加了人工输入各个方向通行时刻的功能,在车流量较大的时候,各个方向的通行时刻都设置的大一些。车流量小的时候,各个方向的通行时刻都设置的小一些,幸免太久的等待。通过增加人工输入通行时刻这一功能,可实现一年四季不管车流量大仍是车流量小,道路交通的利用率都能够达到最大。系统要紧功能模块本文设计一种以STM32单片机为核心芯片,而且外加了输入电路和输出电路,有以下几部份组成:车流量监测电路、信号灯显示电路、通行方向显示电路、时刻倒计时显示电路和手动输入通行时刻电路。车流量检测电路,要紧通过光电传感器来完成,把光电传感器架设在路边,通过发射光电信号,若是有车辆通过,光电信号就会射到车辆上后返回,光电传感器于是便接收到了发出去的信号,于是计数值加1,通过这种方式达到统计各个方向车流量的目的。信号灯显示电路,要紧有红黄绿三种发光二极管组成,东西南北四个方向别离有红黄绿三种信号灯各一个,四条人行道上各有红绿发光二极管一个。通行方向显示电路,由四个8*16点阵完成,东西南北四个方向各有一个,点阵模块由四个595芯片驱动。时刻倒计时显示电路,由四个两位数码管组成,东西南北四个方向各有一个,STM32单片机的I/O口发出电平信号,通过573芯片后输出到数码管的段选端。STM32单片机的I/O口发出电平信号,通过138译码芯片后输出到数码管的位选端。手动输入通行时刻电路由一个4*4的矩阵键盘实现。TA\s"项目背景"\c1第三章单片机概述及各类芯片简介单片机概述STM32单片机是第一个微操纵器系列,它克服了普遍应用32位系统的所有障碍,同时,它也是第一个由领先的半导体厂商提供的基于ARM-Cortex-M33的微操纵器系列。由于STM32系列单片机的显现,让微操纵器的用户取得了前所未有的自由度,它具有很高的性能,专门优秀的功耗效率,顶级的外设,超级大的集成度和极佳的工具与软件平台,STM32单片机作为一个微操纵器,是没有局限性的,它的高性能Cortex-M3内核,是由ARM公司生产的,STM32单片机的功耗很低,在72MHZ时钟工作环境下,所有外设均处于工作状态时,仅消耗36mA,在待机时下降到2uA。STM32单片机具有最大的集成度,它具有复位电路、低电压检测、调压器、精准的RC振荡器等。STM32单片机所采纳的Cortex-M3内核,是ARM公司发布的最新的标准内核,它的功耗低,具有调试本钱低、门数量少、中断延迟短的特点,CM3处置器系列集低功耗、低本钱和易于利用的优势于一身,它采纳的处置器核是基于ARMv7-M架构,利用三级流水线和哈弗存储结构实现,支持Thumb-2指令集的子集,具有硬件除法指令。与处置器核集成在一路的是总线矩阵和中断操纵器(NVIC),总线矩阵提供了3条AHB-Lite总线,别离用于连接指令存储器,数据存储器和作为系统总线。嵌套向量中断操纵器(NVIC)最多能提供240个物理中断,一个不可屏蔽中断(NMI)和各类系统异样,每一个中断都分派一个中断优先级(共256个优先级),优先级能够动态的调整,中断操纵器嵌套在内核里面,中断之间的距离最少可达只有6个CPU周期,嵌套向量中断操纵器能够支持嵌套中断,处置器中断时,、链接寄放器、程序计数器、程序状态寄放器和通用寄放器自动压入堆栈。中断效劳终止后,再通过硬件自动恢复这些寄放器的内容,不需要任何软件的干与,Cortex-M3内核具有超级先进的调试功能,包括串行单线调试和JTAG。(参考全国运算机品级考试三级教程嵌入式系统开发技术)STM32系列芯片有一个突出特点,确实是内部高度集成,而且还提供了高质量的固件库,让开发人员的开发与调试超级方便:STM32系列微操纵器自带内嵌电源监视器,能够尽可能减小对外部期间的需求,而且提供了低电压检测、掉电检和上电复位;STM32系列微操纵器内嵌出厂前校验好的8MHZ的RC振荡器,能够超级方便的用来作为较低本钱的要紧时钟源。STM32系列微操纵器有一个主晶振能够驱动整个系统:其中的4~16MHZ晶振能够用来驱动USART、CPU和其它所有外设。它不需要内嵌PLL()来产生多种时钟频率提供给外设。基于STM32的最小系统元件数量,最少可简化到只有7个,如此能够极大地简化设计与减少生产嵌入式系统的本钱,除此之外,STM32里面还有极具特色的其它外设模块:I2C(集成电路互连总线),要紧用于将嵌入式处置器和外围器件连接在一路,它采纳串行半双工传输的总线标准,它能够超级方便的将外围器件和微操纵器连接起来组成一个系统,很多处置器芯片和很多外围器件都支持I2C总线。每一个器件都有一个地址,那个器件既能够是单独发送的,也能够是单独接收的,乃至既能够接收也能够发送。主动发起数据传输的I2C器件是主控器件,不然他确实是从器件。I2C只利用两条总线线路:一条是串行时钟线,另一条是双向串行数据线,每一个连接到总线的设备都拥有一个独立的地址,主机确实是通过那个地址,来对各个设备进行访问,多个主机同时利用总线时,为了避免数据冲突,系统会利用仲裁方式来决定由哪个设备来利用总线。I2C具有三种传输方式,有标准传输方式,快速传输模式和高速传输模式,他们的传输速度别离为100Kbit/s,400Kbit/s,s。SPI(串行外设接口)是一种高速全双工的同步串行外设接口,它支持嵌入式处置器与外设通过串行方式实现数据互换,支持SPI接口的外围设备有很多,包括RAM、ROM、MCU等。SPI采纳主从式连接架构,通信两边分为主控端(Master)和从动端(Slave),通常MCU的SPI工作在Master模式,其它设备的SPI接口那么是工作在Slave模式。通信进程由主机设备发起操纵,从机被动的响应来自主机的请求并给出答复,数据流在时钟信号的作用下进行同步传输。SPI包括有四条总线,别离是主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI、串行时钟线SCK和低电平有效的从机选择线SSEL,数据被写到SPI发送缓冲区后,数据被一名一名的传输出去,在主机中数据从移位寄放器自左向右发送出去送到从机,与此同时,从机中的数据会从右向左发到主机,这一进程通过8个时钟周期完成1个字节的发送。输入字节保留在移位寄放器中,然后从接收缓冲区读出一字节的数据。UART(串行异步通信接口)常经常使用于全双工串行异步通信,是微操纵器中最多见同时也是利用最频繁的通信接口,所有的嵌入式处置器芯片内部都集成了兼容标准UART功能的组件,有的结成了多个UART。UART由发送器、接收器、操纵单元和波特率发生器等组成。发送器用来发送字符,能够采纳一般模式发送,也能够采纳先进先出(FIFO)模式发送,待发送的字符先发送到缓冲寄放器,然后通过移位寄放器,通过TXDn引脚依照按顺序依次发送出去。在中断发送方式下,只有当发送缓冲器处于空的状态时,才会引发发送中断,当工作在查询发送方式时需要等待发送缓冲器为空时才能够发送下一个数据,当工作在FIFO模式下时,需要N个字节全数到位后,才能够发送,不同的嵌入式处置器芯片内部设置的N值不同。GPIO(通用输入输出接口)提供的输入具有缓存功能,而输出具有锁存功能,GPIO一样具有三态,即高阻态、0态和1态,本设计利用的芯片信号是STM32F103VET6,它具有100个引脚,除去电源输入、Boot引脚、晶振输入,剩下的80个引脚均为GPIO。每一个GPIO端口有两个32位数据寄放器,两个32位配置寄放器,32位锁定寄放器,一个16位复位寄放器和一个32位置位/复位寄放器。他们共分为GPIOA~GPIOE五组,每组总共有16个I/O口,每一个引脚可配置成8种模式,别离为模拟输入,浮空输入,上拉输入,下拉输入,开漏输出,复用功能推挽式输出,推挽式输出,复用功能开漏输出。该芯片的GPIO模块除具有低功耗、小封装、低本钱的优势外,还支持通过软件编程实现I/O端口的从头映射,通过如此来达到I/O端口功能复用。USB(通用串行总线)是一种外部总线的接口标准,USB总线接口支持热插拔和即插即用功能。USB采纳主从方式进行通信,它拥有一个主机,掌管所有USB外部设备的连接和删除。它是嵌入式应用领域最经常使用的总线接口之一。当前很多的嵌入式处置器芯片内部都有USB操纵器。USB具有很多优势:1.它利用很方便,它一个端口能够连接多个不同的设备,支持热插拔。2.独立供电,USB接口提供了内置电源,USB电源能够向低压设备提供5V的电源,提供~的电流。3.速度快,当前的速度为480Mb/s,那么已经达到了5Gb/s。要紧芯片简介74HC573锁存器图3-1为74HC573的引脚图,一号引脚OE为输出使能端,D0到D7为数据输入端,Q0到Q7为数据输出端。LE是锁存许诺端,GND接地,VCC接电源。表3-1为74HC573的真值表,其中H代表高电平,L代表低电平,X代表任意电平,Z表示高阻态,Q0为上一次的电平状态。从真值表中咱们能够看出,当输出使能端OE为高电平常,不管LE和D是什么电平,输出端Q都为高阻态。现在,该芯片不可操纵。因此在将74HC573接入电路中时,通常直接将OE端接低电平。在咱们已经将OE端接低电平的条件下,当LE接低电平常,输出端Q为Q0,即上一次的电平,现在,不管输入端D是什么电平,Q端电平均不变,因此咱们能够将锁存器的LE端与单片机的一个I/O口相连,再将锁存器的数据输入端与单片机的I/O口相连,如此就能够够通过操纵锁存器的锁存端和数据输入端的转变来操纵数据输出端的转变。当OE端接低电平LE端接高电平的条件下,现在,D端输入高电平,Q端就输出高电平,D端输入低电平,Q端就输出低电平,也确实是说,D端输入什么电平,Q端就输出什么电平。+图3-174HC573引脚图表3-174HC573真值表输入输出OELEDQLHHHLHLLLLXQ0HXXZ74HC138译码器图3-274HC138引脚图图3-2为74HC138的引脚图,8号引脚GND接地,16号引脚VDD接电源正极,为芯片供电。A0、A一、A2引脚为二进制输入引脚,4、五、6号引脚为片选信号操纵端,只有在4、5脚接低电平,6脚接高电平常,该芯片才会被选通,现在输出端将受A0、A一、A2信号操纵,除此之外的任何组合方式都将不被选通,而且Y0~Y7全数输出“1”。表3-274HC138真值表输入输出+A2A1A00XXXX11111111X1XXX111111111000001111111100011011111100101101111110011111011111010011110111101011111101110110111111011011111111110表3-2为74HC138译码器的真值表,上表中X表示为任意输入状态,“1”代表高电平,“0”代表低电平,在片选利用状态下,输出的八个引脚始终只有一个引脚输出低电平,其他引脚全数输出高电平。此74HC138芯片在单片机系统中能够极大限度的起到扩展I/O口的作用,只需要利用三个I/O口引脚就能够够操纵8个输出,而且程序的编程也很容易实现。74HC595移位寄放器74HC595由一个八位串行移位寄放器和一个带3态并行输出的八位D型锁存器组成,该移位寄放器接收串行数据和提供串行输出。图3-374HC595引脚图图3-3为74HC595的引脚图,QA~QH为并行数据输出端,第八脚GND接地,第16脚VCC接电源正极,第九脚SQH为串行数据输出端。第十脚SCLR为移位寄放器清零端,当其为低时,移位寄放器的输出端全数为0。第11脚SCK为数据输入时钟线,在其上升沿将SI的数据打入,移位后的信号输出到移位寄放器的输出端。第十二脚RCK为输出存储器锁存时钟线,它的上升沿将移位寄放器的输出打入到输出锁存器,因为SCK和RCK两个时钟信号是互不干扰的,因此能够做到输出锁存和输入串行移位互不干扰。第十三脚OE为输出使能端,只有当其接低电平常,移位寄放器的输出才得以开放,不然就变成了高阻态。第十四脚SI为串行数据输入端。第四章系统硬件设计74HC138译码器模块如以下图4-1为74HC138译码器模块的原理图,图中,将16号引脚接VCC高电平,8号引脚GND接地,从而为芯片供电。6号引脚接高电平,4号5号引脚接低电平,只有如此该芯片才会被选通。1号、2号、3号引脚作为138译码器的输入端,连接到P4排针上,STM32单片机的I/O口通过杜邦线连接到P4。~为138译码器的输出端,作为数码管的位选信号。图4-174HC138模块原理图74HC573驱动模块如以下图4-2为74HC573驱动模块的原理图,图中,1号引脚为输出使能端,接高电平,11号引脚LE为锁存许诺端接高电平,20号引脚VCC接电源,10号引脚GND接地。D0~D7,是芯片的输入端,用于连接到单片机的I/O口,为了确保单片机I/O口既能够输出低电平又能够输出高电平,在74HC573芯片的每一个输入端接上10K的上拉电阻,Q0~Q7为芯片的输出端,在芯片的每一个输出端接上一个1K的限流电阻。图4-274HC573模块原理图74HC595驱动模块图4-374HC595模块原理图74HC595驱动模块的原理图如上图4-3所示。QA~QH为并行数据输出端,8号引脚GND接地,16号引脚VCC接高电平。第九脚QH`为串行数据输出端,用于级联,连接到下一个74HC595芯片的14号引脚。10号引脚接高电平,13号引脚为输出使能端接地。11号、12号、14号引脚连接到单片机的I/O口。在本设计中通过级联4片74HC595芯片,用单片机的三个I/O口驱动四个8*16的点阵。数码管显示模块图4-4数码管连接原理图数码管显示电路的连接图如图4-4所示,图中,四个两位数码管的A~G和DP引脚别离连在一路,然后连到P15排针上,通过杜邦线连接到74HC573芯片的输出端。四个两位数码管的位选端、连接到P17排针上,通过杜邦线连接到74HC138芯片的输出端。4*4矩阵键盘模块矩阵键盘的原理图如以下图4-5所示,此矩阵键盘在本设计的功能是手动输入东西方向和南北方向的绿灯通行时刻,P1的8个引脚通过杜邦线连接到单片机的I/O口,通过逐行扫描来确信是哪个按键被按下。图4-5矩阵键盘原理图点阵模块图4-6矩阵键盘原理图在本设计顶用4个8*16的点阵来显示各个方向的通行方向,点阵模块的原理图如上图4-6所示,在图中,将G1和G2的R1~R8引脚对应连在一路,然后接到P3上面,通过杜邦线将P3与74HC595芯片的输出端相连,从而实现74HC595芯片对点阵的行操纵。将G1的C1~C8引脚按顺序连接到P4的八个引脚,将G2的C1~C8引脚按顺序连接到P5的八个引脚,通过杜邦线将P4和P5与对应的74HC595芯片的输出端相连。从而实现74HC595对点阵列的操纵。第五章软件设计数码管显示倒计时程序设计#defineLEDA0(a) if(a) \ GPIO_SetBits(GPIOA,GPIO_Pin_0);\ else \ GPIO_ResetBits(GPIOA,GPIO_Pin_0)该函数中,当a为非0时,PA0I/口输出高电平,当a为0时,PA0I/口输出低电平,voidxx(uint8_ta,uint8_tb,uint8_tc,uint8_td,uint8_te,uint8_tf,uint8_tg,uint8_th){LEDA0(a); LEDA1(b); LEDA2(c); LEDA3(d); LEDA4(e); LEDA5(f); LEDA6(g); LEDA7(h);}该函数有8个参数,通过传入的参数,该函数实现PA0~PA7引脚输出与传入参数相对应的高低电平。在本设计中PA0~PA78个I/O口为数码管段选端。voidshuma(uint8_tj){ switch(j) { case(0): xx(1,1,1,1,1,1,0,0);break; case(1): xx(0,1,1,0,0,0,0,0);break; case(2): xx(1,1,0,1,1,0,1,0);break; case(3): xx(1,1,1,1,0,0,1,0);break; case(4): xx(0,1,1,0,0,1,1,0);break; case(5): xx(1,0,1,1,0,1,1,0);break; case(6): xx(1,0,1,1,1,1,1,0);break; case(7): xx(1,1,1,0,0,0,0,0);break; case(8): xx(1,1,1,1,1,1,1,0);break; case(9): xx(1,1,1,1,0,1,1,0);break;default: break; }}该函数只有一个参数j,此参数操纵数码管显示0~9这十个数字。在该函数中,当j为6时,现在进入case(6),挪用函数xx(),传递的参数为(1,0,1,1,1,1,1,0),现在数码管显示的是数字“6”,一样的道理,通过参数j,能够使数码管显示0~9其中的任何一个数字。voidxiaoyin(void){xx(0,0,0,0,0,0,0,0);}在该函数中挪用了函数xx(uint8_ta,uint8_tb,uint8_tc,uint8_td,uint8_te,uint8_tf,uint8_tg,uint8_th),传递的参数为(0,0,0,0,0,0,0,0),将数码管的段选端全数输入低电平,本设计中利用的是共阴极的两位数码管,段选端一旦全数被拉低,数码管就熄灭,从而达到排除重影的目的。voidsmg(uint8_ta1,uint8_tb1,uint8_tc1,uint8_td1,uint8_te1,uint8_tf1,uint8_tg1,uint8_th1) { uint8_ti,j; for(i=0;i<8;i++) {switch(i) {case(0): LEDA8(0);LEDA9(0);LEDA10(0);shuma(a1);j=10;while(j--);xiaoyin();break;case(1): LEDA8(0);LEDA9(0);LEDA10(1);shuma(b1);j=10;while(j--);xiaoyin();break;case(2): LEDA8(0);LEDA9(1);LEDA10(0);shuma(c1);j=10;while(j--);xiaoyin();break;case(3): LEDA8(0);LEDA9(1);LEDA10(1);shuma(d1);j=10;while(j--);xiaoyin();break;case(4): LEDA8(1);LEDA9(0);LEDA10(0);shuma(e1);j=10;while(j--);xiaoyin();break;case(5): LEDA8(1);LEDA9(0);LEDA10(1);shuma(f1);j=10;while(j--);xiaoyin();break;case(6): LEDA8(1);LEDA9(1);LEDA10(0);shuma(g1);j=10;while(j--);xiaoyin();break;case(7): LEDA8(1);LEDA9(1);LEDA10(1);shuma(h1);j=10;while(j--);xiaoyin();break; default:break;}}}在上面的函数中,共有8个参数,为(uint8_ta1,uint8_tb1,uint8_tc1,uint8_td1,uint8_te1,uint8_tf1,uint8_tg1,uint8_th1),在本设计中利用了四个两位数码管,东西南北四个方向各有一个,也确实是说,一共需要显示8个数字,这8个参数别离对应四个两位数码管显示的8个数字。例如当8个参数别离为(0,1,2,3,4,5,6,7)时,东西南北四个数码管别离显示的数字是“01”,“23”,“45”,“67”。voiddeng(void){ u8t1,t2,t3,t4,t5,t6; t1=DS*10+DG+1; t2=t1+5; t3=t2+BS*10+BG; t4=t3+25; t5=t3+5; t6=t4+DS*10+DG;if(Second>=t4) {Second=1; Second1=1;} if(Second<t1) {smg((t1-Second)/10,(t1-Second)%10, (t1-Second)/10,(t1-Second)%10, (t2-Second)/10,(t2-Second)%10, (t2-Second)/10,(t2-Second)%10); xianshiLED(1);} elseif(Second<t2) {smg((t2-Second)/10,(t2-Second)%10, (t2-Second)/10,(t2-Second)%10, (t2-Second)/10,(t2-Second)%10, (t2-Second)/10,(t2-Second)%10); xianshiLED(2);} elseif(Second<t3) {smg((t4-Second)/10,(t4-Second)%10, (t4-Second)/10,(t4-Second)%10, (t3-Second)/10,(t3-Second)%10, (t3-Second)/10,(t3-Second)%10); xianshiLED(3);}elseif(Second<t5) {smg((t4-Second)/10,(t4-Second)%10, (t4-Second)/10,(t4-Second)%10, (t3+5-Second)/10,(t5-Second)%10, (t5-Second)/10,(t5-Second)%10); xianshiLED(4);}else {smg((t4-Second)/10,(t4-Second)%10, (t4-Second)/10,(t4-Second)%10, (t6-Second)/10,(t6-Second)%10, (t6-Second)/10,(t6-Second)%10); xianshiLED(5);};}在上面的函数中,实现的是数码管倒计时的功能,函数中利用到的相关变量的概念为u32DS=4,DG=0,BS=4,BG=0。Second是时刻计数值,初值为1,每隔一秒钟加1。在默许情形下,Second在1~40时,东西方向数码管从40倒计时到1,现在东西方向为绿灯。41~45,东西方向数码管从5倒计时到1,现在东西方向为黄灯。Second在46~110时,东西方向数码管从65倒计时到1,现在东西方向为红灯。Second在1~45时,南北方向数码管从45倒计时到1,现在南北方向为红灯。46~85时,南北方向数码管从40倒计时到1,现在南北方向为绿灯。Second在86~90时,南北方向数码管从5倒计时到1,现在南北方向为黄灯。91~110时,南北方向数码管从20倒计时到1,现在南北方向为红灯。点阵显示程序设计voidHC595SendData(uint8_tBT3,uint8_tBT2,uint8_tBT1,uint8_tBT0){ uint8_ti; for(i=0;i<8;i++) { LEDA11(BT3>>7); BT3<<=1;LEDA12(0); LEDA12(1); } for(i=0;i<8;i++) { LEDA11(BT2>>7); BT2<<=1;LEDA12(0); LEDA12(1); } for(i=0;i<8;i++) { LEDA11(BT1>>7); BT1<<=1;LEDA12(0); LEDA12(1); } for(i=0;i<8;i++) { LEDA11(BT0>>7); BT0<<=1;LEDA12(0); LEDA12(1); } LEDB10(0); LEDB10(1); LEDB10(0);}该函数实现将BT3,BT2,BT1,BT0,四个八位数据,依次一名一名发送出去,四个八位数据输出到4个74HC595芯片的输出端,最后通过杜邦线连接到点阵的1~16行,1~16列的输入端,从而实现点阵显示通行方向的目的。手动输入通行时刻程序设计u32juzhen(){ u32jianzhi; if(flag1==1) {LEDB1(0);if((Key_Scan(GPIOD,GPIO_Pin_11)==KEY_ON)&&(flag1==1)) {jianzhi=1;flag1=0;returnjianzhi;} if((Key_Scan(GPIOD,GPIO_Pin_12)==KEY_ON)&&(flag1==1)) {Jianzhi=2;flag1=0;returnjianzhi;} if((Key_Scan(GPIOD,GPIO_Pin_13)==KEY_ON)&&(flag1==1)) {Jianzhi=3;flag1=0;returnjianzhi;} if((Key_Scan(GPIOD,GPIO_Pin_14)==KEY_ON)&&(flag1==1)) {Jianzhi=4;flag1=0;returnjianzhi;} LEDB1(1); LEDB2(0);if((Key_Scan(GPIOD,GPIO_Pin_11)==KEY_ON)&&(flag1==1)) {Jianzhi=5;flag1=0;returnjianzhi;} if((Key_Scan(GPIOD,GPIO_Pin_12)==KEY_ON)&&(flag1==1)) {Jianzhi=6;flag1=0;returnjianzhi;} if((Key_Scan(GPIOD,GPIO_Pin_13)==KEY_ON)&&(flag1==1)) {Jianzhi=7;flag1=0;returnjianzhi;} if((Key_Scan(GPIOD,GPIO_Pin_14)==KEY_ON)&&(flag1==1)) {Jianzhi=8;flag1=0;returnjianzhi;} LEDB2(1); LEDB6(0);if((Key_Scan(GPIOD,GPIO_Pin_11)==KEY_ON)&&(flag1==1)) {Jianzhi=9;flag1=0;returnjianzhi;} if((Key_Scan(GPIOD,GPIO_Pin_12)==KEY_ON)&&(flag1==1)) {Jianzhi=10;flag1=0;returnjianzhi;} LEDB6(1); } return0;}在上面的函数中,PB1,PB2,PB6三个I/O口别离接到矩阵键盘的一、二、3行引脚,PD11,PD12,PD13,PD14四个I/O口别离接到矩阵键盘的一、二、3、4列引脚,第一将PB1口拉低,检测PD11,PD12,PD13,PD14引脚是不是为低电平,例如当PD11检测到低电平常,Jianzhi那个变量被赋值1,而且返回那个值。voidset_time(void){jianzhi1=juzhen();if(jianzhi1>0) num++;if((jianzhi1>0)&&(flag2==1)) {DS1=jianzhi1-1;flag1=1;flag2=0;flag3=1;jianzhi1=0;Second=1,Second1=1;} if((jianzhi1>0)&&(flag3==1)) {DG1=jianzhi1-1;flag1=1;flag3=0;flag4=1;jianzhi1=0;Second=1;Second1=1; } if((jianzhi1>0)&&(flag4==1)){BS1=jianzhi1-1;flag1=1;flag4=0;flag5=1;jianzhi1=0;Second=1;Second1=1; }if((jianzhi1>0)&&(flag5==1)) {BG1=jianzhi1-1;flag1=1;flag5=0;flag2=1;jianzhi1=0;Second=1;Second1=1;}if(num>=4) { if(Key_Scan(GPIOE,GPIO_Pin_6)==KEY_ON) {DS=DS1;DG=DG1;BS=BS1;BG=BG1;num=0;Second=1;Second1=1;} }}在本函数中共用到了5个标志位,别离为flag1,flag2,flag3,,flag4,flag5。flag1为1是,表示许诺读取键值,为0时表示不许诺读取键值,初始值为1。flag2为1时表示许诺将读取到的键值赋给变量DS1(东西方向绿灯通行时刻的十位数),flag2为0时表示不许诺,初始值为1。flag3为1时表示许诺将读取到的键值赋给变量DG1(东西方向绿灯通行时刻的个位数),flag3为0时表示不许诺,初始值为0。flag4为1时表示许诺将读取到的键值赋给变量BS1(东西方向绿灯通行时刻的十位数),flag2为0时表示不许诺,初始值为0。flag5为1时表示许诺将读取到的键值赋给变量BG1(东西方向绿灯通行时刻的十位数),flag2为0时表示不许诺,初始值为0。在本函数中,第一挪用函数juzhen(),将返回值赋值给jianzhii1,当有按键按下时,jianzhi1大于0,进入第一个if函数。DS1=jianzhi1-1,例如,第一个按键按下时,函数juzhen()返回值为1,现在DS为0,表示第一个按键表示的是0。flag1=1,表示许诺再读取键值。flag2=0,表示不许诺将读取到的键值再赋给变量DS1。flag3=1,表示许诺下一个读取到的键值赋给变量DG1。jianzhi1=0,避免读取一个键值却为DS1,DG1,BS1,BG1四个变量同时赋值。Second=1,Second1=1,表示将时刻计数从1开始。接一来的几个if函数,跟第一个if函数同理。最后一个if函数表示DS1,DG1,BS1,BG1四个变量都取得键值后,在PE6所连的按键按下后,把DS1,DG1,BS1,BG1这四个值别离赋值给DS,DG,BS,BG。检测车流量动态改变通行时刻程序设计voidEXTI2_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line2)!=RESET)Ï { if(Second<10*DS+DG) { if((Key_Scan(GPIOE,GPIO_Pin_2)==KEY_ON)&&(Second<10*DS+DG)) { Jishu++; if(jishu>che) {Second-=10;jishu=0;}} }EXTI_ClearITPendingBit(EXTI_Line2);}}上面的函数为EXTI2中断效劳函数,当发生中断时,进入中断效劳函数,Second<10*DS+DG,表示在东西方向绿灯通行期间,打开东西方向的车流量检测系统,每当有一辆车通过时,计数加1,当计数值超过che那个变量值时,执行东西方向通行时刻增加10秒的指令。其中变量che的值能够通过矩阵键盘来设置。而且将车流量计数值赋值为0。然后再清除中断标志位。第六章总结本设计充分利用STM32单片机的I/O口资源设计出一个十字路口的交通灯操纵系统,实现东西方向和南北方向的车辆交替运行,两个方向的通行时刻能够手动输入,两个方向还能够通过车流量的大小自动调剂通行时刻,车流量大,通行时刻长,车流量小,通行时刻短。要紧内容有:每次绿灯变红灯时,黄灯先亮5秒,才能变成红灯。东西南北各个方向除有红黄绿三种灯显示之外,每一种灯亮的时刻都利用数码管显示器倒计时进行显示。每一个方向上用点阵显示向左、向右、向前的方向箭头。有人行道,用红绿灯显示。手动输入各方向绿灯通行时刻。通过一个多月的坚持不懈,毕业设计终于被我完成了。通过这次毕业设计,将我所学过的大部份专业知识都等到了应用,各方面能力都有了专门大的提升,专门是在编程设计方面尤其突出,这也为我以后能称为一名应用型人材打下良好的基

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论