基于某AT89c51单片机实现地交通灯文档格式.docx
- 文档编号:21501775
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:33
- 大小:1.26MB
基于某AT89c51单片机实现地交通灯文档格式.docx
《基于某AT89c51单片机实现地交通灯文档格式.docx》由会员分享,可在线阅读,更多相关《基于某AT89c51单片机实现地交通灯文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
倒计时显示表示红、黄、绿灯亮时所剩时间。
由于人行横道通行指示标志与红灯是同步的,所以在模拟交通灯时省略。
交通会遇到一些突发情况。
因此交通信号灯要设定一些特定功能,以防不时之需。
整个电路由单片机完成,控制部分由软件完成,硬件只负责响应。
4、方案设计
方案一:
主控系统采用AT89C51单片机作为控制器,由定时器1间接控制
通行倒计时及南北和东西的通行。
由按键开关完成禁止通行,东西
通行,南北通行。
方案二:
主控系统采用AT89C51单片机作为控制器,由延时函数完成信号灯
的相互转换,由定时器完成通行倒计时。
由按键开关完成禁止通行,
东西通行,南北通行。
方案比较:
方案二由于信号灯的相互转换与倒计时显示用的是两种独立的方法
完成,要把这两种方法运行的时间达到一致,这大大的增大了程序
的难度,而方案一切采用了同一种方法。
就是程序变得了简单。
占
用端口少,耗电也最小。
统电源采用独立的+5V稳压电源,有各种
成熟电路可供选用,使此方案可靠稳定。
该设计可直接在I/O口上
接按键开关,精简并优化了电路。
结合实际情况,显示界面采用LED
数码管动态扫描的方法,满足了倒计时的时间显示输出和状态灯提
示信息输出的要求,减少系统的复杂度,既经济又简洁。
所以选择
方案一。
5、方案实现
该交通灯有以下几个部分组成:
紧急控制(按键电路)、复位电路、晶振电路、电源电路、单片机、led数码管显示、led信号指示灯。
如图所示:
该交通灯控制系统有以上几个部分组成:
紧急控制(按键电路)、单片机。
1各模块电路
1.1主控制系统
主控器采用AT89C51,是美国ATMEL公司生产的一款性能稳定、低功耗的单片机,兼容MCS-51系列产品指令系统及引脚。
片含4KB的可重复编程的Flash程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,使用5(1±
20﹪)V的电源电压,128×
8位的部RAM,4个8位的双向可位寻址的I/O端口,2个16位定时/计数器,6个中断源,AT89C51单片机可提供许多高性价比的应用,灵活应用于各种控制领域。
单片机的P0口及P2口应用于控制南北及东西方向的通行灯,P1口及P3.0、P3.1、P3.3、P3.4口应用于2组LED计时器的控制,P2.6、P2.7、P1.7分别用于南北方向和东西方向和禁止通行的紧急情况。
1.2晶振电路、复位电路
1.3通行灯输出控制
道口交通灯指示采用红、绿、黄发光二极管,南北通行、东西通行各两个。
1.4时间显示电路
红绿灯通行时间采用数码管显示,这是一种很好的方法。
通行剩余时间采用高亮7段LED发光数码管,采用共阳数码管。
由于采用动态扫描的方法进行显示,即逐个循环点亮各位显示器。
虽然这样在任一时刻只有一位显示器被点亮,但由于视觉残留效应,看起来与全部显示器同时点亮效果完全一样。
为了显示LED显示器的动态扫描,不仅要给显示器提供段(字形代码)的输入之外,还要对显示器加位控制,这就是通常所说的段控和位控。
因此多位LED显示器接口电路需要有两个输出口,其中一个用于输出8条段控线(有小数点显示);
另一个用于输出位控线,位控线的数目等于显示器的位数。
时间显示驱动电路如图所示。
时间显示驱动电路
1.5电源电路
整个系统采用的是+5V电压。
由于实训没有要求,因此可采用自制不可调的3端稳压器件,用LM7805就可以满足系统电源的要求。
LM7805部是由基准电压回路、恒流源、过流保护、过压保护和短路保护回路等8部分组成的三端集成稳压电源,且其低功耗,高效率,纹波系数小,输出电压稳定。
2.1LED显示器简介
通常所说的LED显示器由7个发光二极管组成因此也称之为七段LED显示器,其排列形状如图3.10所示。
此外,显示器中还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。
通过七个发光二极管亮暗的不同组合,可以显示多种数字、字母以及其他符号。
LED显示器中的发光二极管共有两种连接方法:
(1)共阳极接法
把发光二极管的阳极连在一起构成公共阳极。
使用时公共阳极接+5V。
这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。
(2)共阴极接法
把发光二极管的阴极连在一起构成公共阴极。
使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。
图3.9LED显示器结构图
使用LED显示器时要注意区分这两种不同的接法。
为了显示数字或符号,要为LED显示器提供代码,这些代码是为显示字形的,因此称之为字形代码。
七段发光二极管,再加上一个小数点位,共计八段。
因此提供给LED显示器的字形代码正好一个字节。
各代码位的对应关系如表3.4。
表3.4代码对应关系表
代码位
D7
D6
D5
D4
D3
D2
D1
D0
显示段
dp
g
f
e
d
c
b
A
3.2单片机AT89C51
AT89C51是一种高效微控制器,它是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片含4Kbytes的可反复擦写的Flash只读程序存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)和128×
8位的随机存取数据存储器(RAM),该器件采用ATMEL公司的高密度、非易失性存储技术生产,它与MCS-51系统产品兼容,AT89C51单片机功能强大,具有8Kb中央处理器(CPU)和4KbFlash程序存储器,性价比高,可应用于很多要求高性价比的场合,灵活地应用于各个控制领域。
3.2.1AT89C51的主要性能
·
含4Kb可重编程的FPEROM;
与MCS-51产品指令系统完全兼容;
128×
8位的部RAM;
4个8位(32根)双向可位寻址的I/O端口;
2个16位的计数/定时器;
全双工方式的串行通道(UART);
6个中断源;
5个向量二级中断结构;
最高时钟振荡频率可达12MHz;
指令集中64条为单周期指令,支持6种寻址方式,共111条指令;
低功耗空闲和掉电方式;
片振荡器和时钟电路。
3.2.2AT89C51的引脚功能
AT89C51为双列直插(DIP)式封装的51单片机芯片,有40条引脚,其引脚示意及功能分类如图3.2所示。
图3.289C51单片机引脚图
各引脚功能说明如下:
(1)主电源引脚
Vcc(40脚):
接+5(1±
20﹪)V电源正端;
Vss(20脚):
接地。
(2)I/O引脚
P0口(39~32脚):
P0.0~P0.7统称为P0口。
P0口是一组8位漏极开路型双向I/O口,分时复用为低8位地址总线和双向数据总线。
作为输出口用时,每位能吸收电流的方式驱动8个逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器时,这组端口线分时转换地址(低8位)和数据总线复用,在访问期间激活部上拉电阻。
在FLASH编程时,P0口作为原码输入口,当Flash进行校验时,P0口输出原码,此时P0外部必须被拉高。
P1口(1~8脚):
P1.0~P1.7统称为P1口,可作为准双向I/O口使用。
P1是一个带部上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口。
P1口被外部下拉为低电平时,输出电流,是因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在Flash编程和校验时,P1口作为第八位地址接收。
P2口(21~28脚):
P2.0~P2.7统称为P2口,一般作为准双向I/O使用。
P2是一个带部上拉电阻的8位双向I/O口。
P2的输出缓冲器可驱动4个TTL逻辑门电路。
当对P2端口写“1”时,部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,由于部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在接有片外存储器或扩展I/O口且寻址围超过256B时,P2口用作高8位地址总线。
当给出地址为“1”时,它就利用部上拉优势,当对外部八位地址数据存储器进行读/写时,P2口便输出其特殊功能寄存器的容。
在FLASH编程和校验时,P2口接收高八位地址信号和控制信号。
P3口(10~17脚):
P3.0~P3.7统称为P3口。
P3口是一组带有部上拉电阻的8位双向I/O口。
P3口的输出缓冲器可驱动4个TTL逻辑门电路接收输出电流。
当P3口写“1”时,通过部的上拉电阻上拉为高电平并作为输入口。
此时由于外部下拉为低电平,P3口将输出电流(IIL)。
除作为准双向I/O口使用外,还可以将每一位用于第二功能,而且P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。
P3口第二功能祥见表3.1:
表3.1P3口第二功能表
口线
第二功能
信号名称
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
外部数据存储器读选通
(3)外接晶体引脚
XTAL1(19脚):
它在单片机部是一个反向放大器的输入端,构成了片振荡器。
当采用外部时钟时,HMOS单片机的该引脚应接地;
CHMOS单片机的该引脚作为外部振荡信号的输入端。
XTAL2(18脚):
它在单片机部是片振荡器的反向放大器的输出端。
当采用外部时钟时,HMOS单片机的该引脚作为外部振荡信号的输入端;
CHMOS单片机的该引脚应悬空不接。
(4)控制线
ALE/——————PROG(30脚):
地址锁存允许/编程信号。
在访问片外程序存储器期间,此信号可用于控制锁存P0输出地址总线的低8位,ALE以每机器周期两次进行信号输出;
在FLASH编程期间,此引脚用作编程脉冲——————PROG的输入端。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率fosc的1/6,可作为对外输出的时钟脉冲或用于定时目的。
但要注意的是:
在访问片外数据存储器期间,ALE脉冲会跳空一个。
若想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE执行MOVX,MOVC指令使ALE起作用。
另外,该引脚将被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
——————PSEN(29脚):
片外程序存储器读选通信号输出端,低电平有效。
在由外部程序存储器读取指令或常数期间,每个机器周期——————PSEN两次有效,P0口读回指令或常数。
当访问部程序存储器时,——————PSEN信号不跳变。
RST/VPD(9脚):
RST即RESET,VPD为备用电源,该引脚为单片机的上电复位或掉电保护端。
当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机回复到初始状态。
上电时,考虑到振荡器有一定的起振时间,该引脚上高电平必须持续10ms以上才能保证有效复位。
当VCC发生故障,降低到低电平规定值或掉电时,该引脚可接上备用电源VPD(+5V)为部RAM供电,以保证RAM中的数据不丢失。
————EA/VPP(30脚):
————EA为片外程序存储器选用端,访问部程序存储器控制信号。
当————EA端接高电平时,CPU访问部程序存储器。
当————EA接低电平时,则在此期间外部程序存储器(0000H-FFFFH),则强调CPU访问外部存储器,而不管程序计数器的容是多少。
此外,该引脚还用做EPROM编程电压的输入端。
在编程期间,此引脚用作21V编程电源VPP的输入端。
3.2.3
AT89C51的部结构
89C51单片机部组成结构中包含运算器和控制器(CPU)、片存储器、4个并行I/O接、串行口、定时/计数器、中断系统、振荡器等功能部件[10]。
其部结构框图如图3.3所示。
图中PC是程序计数器;
PSW是程序状态字寄存器;
DPTR是数据指针寄存器。
图3.3AT89C51单片机部结构框图
运算器和控制器
89C51的运算器和控制器功能类似于一般微机中的微处理器(CPU),是单片机的核心部件,它决定了单片机的主要功能特性。
它完成逻辑算术运算并协调单片机其它各部分的工作。
各种算术、逻辑运算所涉及到的寄存器包括:
累加器ACC、寄存器B、暂存器1(TEMP1)和暂存器2(TEMP2)、程序状态字寄存器PSW,程序计数器PC,堆栈指针SP,数据指针寄存器DPTR等。
它们位于CPU部,又称CPU专用寄存器,以区别于I/O接口专用寄存器。
存储器
MCS-51系列单片机存储器组成是所谓的哈佛结构,存储器的组织方式与通用单片机系统不同,包含程序存储器与数据存储器,其地址空间是相互独立的,而不是程序存储器与数据存储器统一编址。
在89C51单片机中,程序存储器采用EEPROM,而数据存储器采用RAM。
它们又可以进一步分成部或外部两类。
①程序存储器程序存储器部和外部是统一连续编址的,部占用地址空间的低4KB,地址0000H~0FFFH,外部地址围1000H~FFFFH,共60KB。
程序存储器主要用来存放程序和常数。
当程序计数器PC由部ROM开始执行到外部ROM时,会自动寻址外接程序存储器。
程序地址空间原则上可由用户任意安排,但复位和中断源的程序入口地址在51系列单片机中是固定的,用户不能改变。
入口地址见表3.2。
复位后,CPU从0000H地址开始执行程序。
其他地址为中断服务程序入口地址,响应某个中断时,将自动从其对应的入口地址执行中断服务程序。
表3.251单片机复位、中断入口地址
操作
入口地址
复位
0000H
外部中断0
0003H
定时器/计数器0溢出
000BH
外部中断1
0013H
定时器/计数器1溢出
001BH
串行口中断
0023H
定时器/计数器2溢出或T2EX端负跳变(52子系列)
002BH
②数据存储器MCS-51系列单片机数据存储器也有部、外部之分。
但与程序存储器不同,片、片外存储器是分别独立编址的,片数据存储器除RAM块外,还有特殊功能寄存器(SFR)块,其中片数据存储器有128个字节,其编制为00H~FFH;
特殊功能寄存器也占128个字节,其编制为80H~FFH;
二者连续而不重叠。
外部RAM地址围0000H~FFFFH,共64KB。
部存储器可直接寻址。
尽管片、片外地址空间的低256B有重叠,但寻址并不会造成混乱。
这是因为片、片外存储器使用不同的指令(MOV和MOVX)。
扩展的I/O地址也占用数据存储器空间。
对I/O端口操作无须特殊指令且访问程序存储器是用——————PESN信号选通,而访问片外数据存储器时,由————RD信号(读)和————WR信号(写)选通。
③寄存器区部数据存储器分为4个区域,数据RAM用于存放临时变量,下面介绍其他三个寄存器区:
a)工作寄存器区它占用地址00~FFH的32个存单元,又分成4个区。
每个区有R0~R7共8个工作寄存器。
工作寄存器区的选择又由程序状态寄存器PSW的第4位和第3位(RS1和RS0)共同指定。
单片机复位时,RS1和RS0为零,故指向0区。
通过位操作改变RS1和RS0的值,可以方便地指向任一个区间。
b)位寻址区每位都有一个独立的8位地址(占据空间00~7F),共128位。
此外,在专用寄存器SFR中还有一部分是可以位寻址的(有些位可能无定义)。
c)专用寄存器区共有21个专用寄存器SFR,位于80~FFH地址空间。
这些寄存器又可以分为CPU专用寄存器和接口专用寄存器。
CPU专用寄存器前面己经提过,而接口专用寄存器包括两部分。
一部分就是单片机的I/O端口P0~P3,分别编址为80H、90H、A0H、B0H,共4个单元,32位,每一位都可以独立寻址。
另一部分为定时/计数器,串行口、中断的一些控制寄存器。
定时/计数器
89C51有两个16位定时/计数器(T0,T1)。
在定时功能中,每个机器周期定时器加1,由于l个机器周期包含12个振荡周期,因而它的计数频率为1/12,即由定时器计数到的脉冲为振荡周期频率的1/12。
在计数器功能中,在外部事件相应输入脚(T0或T1)产生负跳变时,计数器加1。
由于计数器的计数过程需要2个机器周期(24个振荡周期),所以,最高的计数频率为振荡频率的1/24。
这两个定时/计数器的工作状态(定时/计数)及工作方式(方式0~方式3)的选择是由定时/计数器方式寄存器(TMOD)中的每位值所决定的。
定时/计数器的控制由控制寄存器(TCON)完成。
I/O口
89C51不仅有4个8位并行口,供单片机和外部RAM、EEPROM等扩展连接用或与其它设备交换信息用,它还有一个全双工串行口,能同时发送和接收数据。
在前面的引脚功能中已对并行口作了简要介绍,在此就主要介绍一下串行口。
串行口也就是P3.0和P3.1的第二功能。
它既能工作在异步方式,又能工作在同步方式。
该串行口是全双工的,它在物理上分为两个独立的发送缓冲器和接收缓冲器SBUF,但它们占用一个特殊功能寄存器的地址99H,只需对SBUF进行写或读的操作,就可以同时发送和接收了。
串行口的工作方式选择、波特率选择、串行通信协议的完成,由两个特殊功能寄存器,即串行口控制寄存器SCON和功耗控制寄存器PCON完成。
中断
89C51单片机提供了6个中断源,而每一个中断源都能被程控为高优先级或低优先级。
其中5个中断源包括2个外部中断和3个部中断。
两个外部中断源为
INT0和INT1,外部设备的中断请求信号、掉电等故障信号都可以从INT0而和INT1引脚输入,向CPU提出中断申请,INT0和INT1的中断请求标志IE0、IE1分别设在TCON寄存器的TCON.1、TCON.3。
3个部中断源为T0、Tl溢出中断源及片串行发送或接收中断源,T0、Tl中断请求标志TF0和TF1分别设在TCON寄存器的TCON.5、TCON.7,串行发送或接收中断标志TI或RI设在SCON寄存器的第SCON.0、SCON.1。
5个中断源中的一个、几个或全部中断源的开、关由中断允许寄存器(IE)完成,而每个中断源的优先级别的高低由中断优先级控制寄存器(IP)完成。
89C51单片机中断源简要特性见表3.3。
表3.3中断源特性表
名称
符号
标志符号
标志符号位置
矢量地址
优先级别
外部中断
INT0
IE0
TCON.1
最高
最低
定时器0溢出中断
TF0
TCON.5
INT1
IE1
TCON.3
定时器1溢出中断
TF1
TCON.7
R1+T1
R1
SCON.0
SCON.1
六、仿真电路图
7、程序设计过程
交通道口交通灯控制系统的控制程序主要包括以下几个部分:
主程序、、显示程序、定时中断程序、等。
4.1.1主程序
主程序主要是负责总体程序的管理功能,实现人与机的交互设定。
因为设计采用动态扫描方式显示时间,所以主程序大部分时间要调用扫描显示程序。
主程序流程图如图4.1所示。
主程序流程图
程序如下:
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
//调用函数的声明
voiddisplay(uintshi1,uintge1,uintshi2,uintge2);
//数码管显示函数的声明
voiddelay(uintz);
//延时函数的声明
voidState1();
voidState2();
voidState3();
voidState4();
voidState5();
voidState6();
voidState7();
voidState8();
voidNanBei();
voidDongXi();
voidStop();
//定义管脚
sbitARED_NB=P0^5;
sbitBRED_NB=P2^2;
sbitAYELLOW_NB=P0^4;
sbitBYELLOW_NB=P2^1;
sbitAGREEN_NB=P0^3;
sbitBGREEN_NB=P2^0;
sbitARED_DX=P2^5;
sbitBRED_DX=P0^2;
sbitAYELLOW_DX=P2^4;
sbitBYELLOW_DX=P0^1;
sbitAGREEN_DX=P2^3;
sbitBGREEN_DX=P0^0;
sbitDXweixuan1=P3^3;
//东西方向数码管位选1
sbitDXweixuan2=P3^4;
//东西方向数码管位选2
sbitNBweixuan1=P3^1;
//南北方向数码管位选1
sbitNBweixuan2=P3^0;
//南北方向数码管位选2
sbitKey1=P2^7;
sbitKey2=P2^6;
sbitKey3=P1^7;
//定义全局变量
ucharflag1=0,flag2=1;
uintshi1,ge1,shi2,ge2,aa;
uintcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//主函数
voidmain()
{
//初始化管脚
P0=0xFF;
P1=0Xff;
P2=0xFF;
P3=0xFF;
//循环函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89c51 单片机 实现 交通灯