1、靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机AT89C51为中心器件来设计交通灯控制器,实现了红绿灯循环点亮,红绿灯交替时5秒黄灯亮并关闭数码显示管(交通灯信号通过P1口输出,显示时间直接通过P0口输出至双位数码管);可通过按键重设通行时间(本系统设了两个按键,一个加键,另一个减键,所加时间通过编程设定)并通过双位数码管显示(本系统必须复位后才能加减设置时间,在按完ok开始键之后不能再设置时间)。关键词:单片机 交通灯 重设通行时间 1.51单片机的功能与简介1.1单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机
2、微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机经过1、2、3,3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。1.2 MSC-51芯片简介MCS-51单片机内部结构 8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RA
3、M)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 图1程序存储器
4、(ROM)8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。时钟电路:8051内置最高频
5、率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。下图是MCS-51系列单片机的内部结构示意图2。 图2 MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,
6、正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:如图3Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。8051的复位方式可以是自动复位,也可以是手动复位,见
7、下图4。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。 图4Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。如果单片机是EPROM,在编程其间,将用于输入编程脉冲。Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上
8、,由CPU读入并执行。Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。在编程时,EA/Vpp脚还需加上21V的编程电压。 2.交通信号灯方案(1)、南北直行绿灯亮,东西直行红灯亮,延时。(2)、南北直行绿灯闪烁几次转黄灯,南北左转(固定绿灯)亮,南北直行红灯亮,东西直行仍然红灯亮,延时。(3)、南北左转灯闪几次转黄灯,东西直行绿
9、灯亮,南北直行仍然红灯,延时。(4)、东西直行绿灯闪烁几次转黄灯,东西左转灯亮,东西直行红灯亮,南北直行仍然红灯,延时。(5)、循环至1,继续。(这里左转时绿灯亮,不转时灭)(6)、倒计时部分。(南北、东西方向时间独立) 3.引脚分配及元件清单引脚图 灯 引脚东西红灯 P1.0 东西黄灯 P1.1 东西绿灯 P1.2 东西左转灯(绿) P1.3 南北左转灯(绿) P1.4 南北红灯 P1.5 南北黄灯 P1.6 南北绿灯 P1.7元件清单表 LED 绿灯 8个 LED 黄灯 4个 LED 红灯 插针 10 共阴数码管 2个 排阻 4.主程序及流程图程序 WW BIT 00H;1s标志位 MM
10、EQU 40H;秒值计数器,用于累加秒值 AA EQU 41H ;中断次数,用于统计定时中断的次数 BB EQU 5EH ;定义5eh,5fh为显示缓冲区 XIAOYING EQU 10;消隐吗在字形表的第十位 ORG 0000H; 程序从0000h开始 JMP MAIN; ORG 000BH;定时器t0中断人口 LJMP TIME0 ORG 0003H;外部中断入口 LJMP INT_0 ORG 030H;主程序从这里开始MAIN: MOV SP,#70H MOV MM,#0;秒计数器 MOV MM,#30; MOV BB,#3;立即数送显示缓冲区十位 MOV BB+1,#0;立即数送个位缓
11、冲区 ACALL DISP;调显示子程序 ACALL TIME0_INIT;;调定时器t0初始化子程序 CLR WW; 清零秒标志位;/*- 南北车辆直行 15S - L1: mov p1,#07eh ;绿灯共亮10S ACALL LOOP3 /调用显示程序 MOV R7,MM CJNE R7,#21,L1; 到21S时跳转到绿灯闪烁L2: mov p1,#0feh ; 灭 绿灯闪3次 ACALL LOOP3 JBC WW,L2L3: mov p1,#7eh; 亮 JBC WW,L3 WW秒标志位不为1,继续循环 CJNE R7,#15,L2 ; 南北直行绿灯共亮15S *- 南北左拐 10S
12、 - */ SETB P1.7 ;灭南北绿灯 mov p1,#0BEh ;亮南北黄灯,同时亮南北直行红灯L16: JBC WW,L16 SETB P1.6 ; 灭南北黄灯共亮3S L4: mov p1,#0ceh ;亮南北左拐灯 CJNE R7,#6,L4 ;L5: mov p1,#0deh; 南北左拐灯闪3次 JBC WW,L3 CJNE R7,#2,L5; SETB P1.4 灭左拐灯L6: CLR P1.6 亮黄灯 JBC WW,L6 L15 : JBC WW,L15/*=东西方向直行 15S =*/ L7: mov p1,#0dbh ; / 东西绿灯亮 CJNE R7,#21,L7;L
13、8: mov p1,#0dfh ;绿灯闪3次 JBC WW,L8L9: mov p1,#0dbh; JBC WW,L9 CJNE R7,#15,L8 ;/*= 东西左拐 10S = */ SETB P1.2 ;灭东西绿灯 mov p1,#0DDh ;亮黄灯L17: SETB P1.1 ;灭黄灯L10: mov p1,#0d6h;亮左转灯 CJNE R7,#6,L10 ;L11:灭东西左拐灯 JBC WW,L11 mov p1,#0d6h ; JBC WW,L11 CJNE R7,#2,L11; SETB P1.3 L12: CLR P1.1;亮黄灯 JBC WW,L12L18: JBC WW,
14、L18 LJMP L1 - 中断0服务程序 -INT_0:PUSH ACC PUSH PSW MOV P1,#0FFH MOV P2,#0FFH MOV MM,#11 L13: mov p1,#0deh ;东西红灯亮;南北红灯亮 MOV A,MM CJNE A,#1,L13 POP ACC ;恢复现场 POP PSW RETI/*=显示子程序=*/LOOP3:NOP LOOP: JBC WW,NEXT;WW为1,说明1s到不为1调用显示子程序 AJMP LOOP;一秒未到继续循环NEXT: lCALL CC ;调用转换子程序 RETCC: MOV A,MM;获得秒值,并送到a MOV B,#1
15、0 DIV AB JZ NEXT1;如果a中的值为0,高位消隐 AJMP NEXT2;否则直接送去显示NEXT1:MOV A,#XIAOYING;消隐码送aNEXT2:MOV BB,A;十位送显示BB MOV BB+1,B;个位送BB+1 ACALL DISP ;调用显示子程式 ;- 显示子程序 -DISP: PUSH ACC MOV A,BB;去十位带显示位 MOV DPTR,#TAB; MOVC A,A+DPTR MOV P0,A CLR P2.1 ACALL DELAY SETB P2.1 MOV A,BB+1 MOV P0,A CLR P2.0 SETB P2.0 POP ACC -1
16、0ms延时子程序- DELAY:MOV R5,#50 LOOP2:MOV R4,#100LOOP1: DJNZ R4,LOOP1 DJNZ R5,LOOP2定时初始化程序TIME0_INIT:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H CLR IT0; SETB EA SETB EX0;开外部中断0 SETB PT0 ; 定时器中断优先 SETB ET0 SETB TR0;启动定时器-定时50ms中断程序- TIME0: INC AA MOV A,AA CJNE A,#20,TIME_EXIT;20*50=1 MOV AA,#0; SETB WW; DEC
17、 MM; CJNE A,#0,TIME_EXIT;若秒值不到30,则跳转到TIME_EXIT若秒数到30,则秒值计数复位为0TIME_EXIT:POP PSW RETI TAB:DB 0C0H,0F9H,0A4H,0B0H,99H; DB 92H,82H,0F8H,80H,90H,0FFH END 5.原理图及分析分析:交通灯的计数的数码管用采用了动态扫描方式来计时,由于单片机的输出负载驱动数码管能力不足,所以用了74LS240作为数码管的驱动芯片,使得数码管能正常工作。做为交通灯的LED其阳极通过一个1K的电阻限流接VCC,阴极连单片机I/O口。 6、总结在学习单片机这门课程时,老师便围绕着
18、交通灯应用系统来给我们讲课,并布置了交通灯应用系统的设计作为我们的期末测试。在学习期间我们不断的学习和了解了单片机的应用和编辑其程序。这也为我们接下来所要做的交通灯应用系统而打下了坚实的基础。在学期末,我们运用我们所学的知识设计了我们小组自己的交通灯应用系统,在我们分工合作下,虽然第一次检查没有通过,但通过最后几天查看书籍和网络资源及仿真,交通灯应用系统被我们一步步的通过仿真模拟完成了程序的编写,这是我们一起用心完成的作品,虽然不是很完美,但却是我们一起努力携手完成的作品。经过我们的不懈努力,我们初步实现了交通灯和倒计时的分别测试,最后通过了合成,但还是存在着缺陷。经过我们小组再研究讨论后,我
19、们又精心的修改了程序,终于成功的实现了交通灯要求的功能。学习使用单片机只能靠循序渐进的积累,尤其是在编写程序,不可能一蹴而就。万事开头难、要勇敢迈出第一步知识点用到才学,不用的暂时丢一边。想把厚厚的一本书看完在做实验,估计是不太可能的。所以,最好结合实际程序进行仿真,在不断调试中完善和得到成功的喜悦。这样实验的成功率会大大提高。在编写程序也不要光看不写,看别人的知识了解别人的编程思路而已,最终的程序还是要靠自己,尤其是在一些细节上要特别注意,对一些程序指令要理解的运用好,刚开始我们可以模仿别人的程序,然后慢慢的学会自己编写,这是一个完全自主学习的过程,需要恒心和信心。7.参考文献1 姜志海单片机原理及应用M.北京:电子工业出版社,2005.7.27-712 龙脉工作室51单片机C语言应用开发技术大全M.北京:人民邮政出版社,2008.9.240-5003 彭为 黄科 雷道仲单片机典型系统设计M.北京:电子工业出版社,2006.5.246-2734 谢维成单片机原理及应用M.北京:清华大学出版社,2009.2.11-26