基于单片机控制交通灯的设计_毕业设计说明书(论文)(编辑修改稿)内容摘要:
图 引脚 9:RESET/Vpd复位信号复用脚,当 8051 通电,时钟电路开始工作,在 RESET引脚上出现 24 个时钟周期以上的高电平, 系统即初始复位。 初始化后,程序计数器PC 指向 0000H, P0P3 输出口全部为高电平,堆栈指针写入 07H,其它专用寄存器被清“ 0”。 RESET 由高电平下降为低电平后,系统即从 0000H 地址开始执行程序。 然而,初始复位不改变 RAM(包括工作寄存器 R0R7)的状态, 8051 的初始态。 8051 的复位方式可以是自动复位,也可以是手动复位,见下图。 此外,RESET/Vpd还是一复用脚, Vcc掉电其间,此脚可接上备用电源,以保证单片机内部 RAM的数据不丢失。 四川信息职业技术学院毕业设计说明书 (论文 ) 第 页 9 图 引脚 30:ALE/ 当访问外部程序器时, ALE(地址锁存 )的输出用于锁存地址的低位字节。 而访问内部程序存储器时, ALE 端将有一个 1/6 时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。 更有一个特点,当访问外部程序存储器, ALE 会跳过一个脉冲。 如果单片机是 EPROM,在编程其间, 将用于输入编程脉冲。 引脚 29: 当访问外部程序存储器时,此脚输出负脉冲选通信号, PC 的 16位地址数据将出现在 P0 和 P2 口上,外部程序存储器则把指令数据放到 P0口上,由CPU 读入并执行。 引脚 31:EA/Vpp程序存储器的内外部选通线, 8051 和 8751 单片机,内置有 4kB的程序存储器,当 EA 为高电平并且程序地址小于 4kB 时,读取内部程序存储器指令数据,而超过 4kB 地址则读取外部指令数据。 如 EA为低电平,则不管地址大小,一律读取外部程序存 储器指令。 显然,对内部无程序存储器的 8031,EA 端必须接地。 LED 显示数码管 八段 LED 显示器由八个发光二极管组成。 其中 7 个长条形的发光管排列成“日”字形,另一个圆点形的放光管在显示器的右下角作为显示小数点用,它能显示各种数字及部分英文字母。 LED 显示器有两种不同的形式:一种是 8 个发光二极管的阳极都连在一起的,称为共阳极 LED 显示器如图 22所示;另一种是 8个发光二极管的阴极都连在一起的,称为共阴极 LED 显示器。 LED 数码管结构原理图:(如图 、 、 ) 四川信息职业技术学院毕业设计说明书 (论文 ) 第 页 图 高电平驱动 (共阴极 ) 图 低电平驱动 (共阳极 ) 图 八段 LED 数码管 晶体振荡器 石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整,作用是为系统提供基本的时钟信号。 我们在晶体某一方向加一电场,从而在与此垂直的方向产生机械振动,有了机械振动,就会在相应 的垂直面上产生电场,从而使机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限制时,才达到最后稳定,这种压电谐振的频率即为晶体振荡器的固有频率。 四川信息职业技术学院毕业设计说明书 (论文 ) 第 页 11 振荡器特性, XTAL1 和 XTAL2 分别为反向放大器的输入和输出。 该反晶体向放大器可以配置为片内振荡器。 石晶振荡和陶瓷振荡均可采用。 如采用外部时钟源驱动器件, XTAL2 应不接。 有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 在 XTAL1 和 XTAL2 引脚上外接定时元件就能构成自激振荡电路。 定时元件通常采用石英晶体和电容组成的并联谐振电路。 电容器 C1 和 C2 主要起频率微调作用。 图 复位电路 89C51 的复位时由外部的复位电路来实现的。 复位引脚 RST 通过一个施密特触发器用来抑制噪声,施密特触发器的输出电平由复位电路采样一次,然 后才能得到内部复位操作所需要的信号。 本设计是采用上电自动复位,上电自动复位时通过外部复位电路的电容充电来实现的。 只要 VCC 的上升时间不超过 1ms,就可以实现自动上电复位。 时钟频率用12MHz 时 C取 20PF。 图 四川信息职业技术学院毕业设计说明书 (论文 ) 第 页 第三章 交通灯系统 软件设计 主程序流程图 软件延时程序 在整个程序里面,如在上一句命令与下一句命令执行之间(上一句命令执行完后,间隔一段时间再执行下面一句命令),产生的中间时间差,就 是延时程序所起到的作用。 在 C 语言中,延时程序,就是一种利用循环执行一段命令,以起到延时的功能。 具体的延时程序分析: void delay(uint z)//带参数的延时函数 { uchar x,y。 //定义两个变量 四川信息职业技术学院毕业设计说明书 (论文 ) 第 页 13 for(x=z。 x0。 x)//循环延时 for(y=110。 y0。 y)。 //循环延时 } 中断程序 定时器中断 在 main 函数中的 if( cc==82)【 82是红黄绿三灯循环一次所需的时间】来判断语句中的 cc 是用来控制数码显示管与 LED 灯工作的。 部分程序如下: void timer0() interrupt 1//定时器 0 的中断函数 { TH0=(6553650000)/256。 //重装计数初值 TL0=(6553650000)%256。 //重装计数初值 aa++。 if(aa==20)//判断定时 1 分钟是否到 { aa=0。 //计数次数清 0 if(cc==0)//南北亮红灯 40 秒,东西亮黄灯 5秒 { DXY=0。 //东西的黄灯亮 DXG=1。 //东西的绿灯不亮 DXR=1。 //东西的红灯不亮 NBY=1。 //南北的黄灯不亮 NBG=1。 //南北的绿灯不亮 NBR=0。 //南北的红灯亮 DXtemp=5。 //东西的黄灯亮 5 秒 NBtemp=40。 //南北的红灯亮 40秒 四川信息职业技术学院毕业设计说明书 (论文 ) 第 页 } 外部中断 当由于紧急事件需要对道路进行长时间中断时,就要外加一个外部中断,以保持该道路的畅通。 代码如下: void JJZD() interrupt 0 //紧急中断程序,南北东西都亮红灯 { DXY=1。 //东西的黄灯不亮 DXG=1。 //东西的绿灯不亮 DXR=0。 //东西的红灯亮 NBY=1。 //南北的黄灯不亮 NBG=1。 //南北的绿灯不亮 NBR=0。 //南北的红灯亮 displayNB(0,0)。 //南北数码管都显示 0 displayDX(0,0)。 //东西数码管都显示 0 cc=0。 //重最开始显示 } 数码显示管倒计时程序 在十字路口,由于东西、南北方向的灯亮时间各不相同(参考 表格),就只能单独编写东西、南北数码显示管倒计时程序(其中黄灯时间 5秒)。 然后利用函数调用来实现显示。 如下为南北(东西亦同)方向的显示程序。 如下: void fenjieNB()//南北数码管显示数字的分解函数 { NBshi=NBtemp/10。 //将要显示的时间的十位赋给变量 NBge=NBtemp%10。 //将要显示的时间的个位赋给变量 四川信息职业技术学院毕业设计说明书 (论文 ) 第 页 15 NBtemp。 } void displayNB(uchar NBshi,uchar NBge)//带参数的数码管显示函数 { //显示南北十位 P2=0xfe。 P0=table[NBshi]。基于单片机控制交通灯的设计_毕业设计说明书(论文)(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。