㈠ 求51单片机控制的交通灯电路图
一、设计任务与要求
1.设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒;
2.要求黄灯先亮5秒,才能变换运行车道;
3.黄灯亮时,要求每秒钟闪亮一次 。
二、实验预习要求
1.复习数字系统设计基础。
2.复习多路数据选择器、二进制同步计数器的工作原理。
3.根据交通灯控制系统框图,画出完整的电路图。
三、设计原理与参考电路
1.分析系统的逻辑功能,画出其框图
交通灯控制系统的原理框图如图12、1所示。它主要由控制器、定时器、译码器和秒脉冲信号发生器等部分组成。秒脉冲发生器是该系统中定时器和控制器的标准时钟信号源,译码器输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作,控制器是系统的主要部分,由它控制定时器和译码器的工作。图中:
TL: 表示甲车道或乙车道绿灯亮的时间间隔为25秒,即车辆正常通行的时间间隔。定时时间到,TL=1,否则,TL=0。
TY:表示黄灯亮的时间间隔为5秒。定时时间到,TY=1,否则,TY=0。
ST:表示定时器到了规定的时间后,由控制器发出状态转换信号。由它控制定时器开始下个工作状态的定时。
图12、1 交通灯控制系统的原理框图 2.画出交通灯控制器的ASM(Algorithmic State Machine,算法状态机)
(1)图甲车道绿灯亮,乙车道红灯亮。表示甲车道上的车辆允许通行,乙车道禁止通行。绿灯亮足规定的时间隔TL时,控制器发出状态信号ST,转到下一工作状态。
(2)甲车道黄灯亮,乙车道红灯亮。表示甲车道上未过停车线的车辆停止通行,已过停车线的车辆继续通行,乙车道禁止通行。黄灯亮足规定时间间隔TY时,控制器发出状态转换信号ST,转到下一工作状态。
(3)甲车道红灯亮,乙车道黄灯亮。表示甲车道禁止通行,乙车道上的车辆允许通行绿灯亮足规定的时间间隔TL时,控制器发出状态转换信号ST,转到下一工作状态。
(4)甲车道红灯亮,乙车道黄灯亮。表示甲车道禁止通行,乙车道上位过县停车线的车辆停止通行,已过停车线的车辆停止通行,已过停车线的车辆继续通行。黄灯亮足规定的时间间隔TY时,控制器发出状态转换信号ST,系统又转换到第(1)种工作状态。
交通灯以上4种工作状态的转换是由控制器器进行控制的。设控制器的四种状态编码为00、01、11、10,并分别用S0、S1、S3、S2表示,则控制器的工作状态及功能如表12、1所示,控制器应送出甲、乙车道红、黄、绿灯的控制信号。为简便起见,把灯的代号和灯的驱动信号合二为一,并作如下规定:
表12、1 控制器工作状态及功能
控制状态 信号灯状态 车道运行状态
S0(00) 甲绿,乙红 甲车道通行,乙车道禁止通行
S1(01) 甲黄,乙红 甲车道缓行,乙车道禁止通行
S3(11) 甲红,乙绿 甲车道禁止通行,甲车道通行
S2(10) 甲红,乙黄 甲车道禁止通行,甲车道缓行
AG=1:甲车道绿灯亮;
BG=1:乙车道绿灯亮;
AY=1:甲车道黄灯亮;
BY=1:乙车道黄灯亮;
AR=1:甲车道红灯亮;
BY=1:乙车道红灯亮;
由此得到交通灯的ASM图,如 图12、2所示。设控制器的初始状态为S0(用状态框表示S0),当S0的持续时间小于25秒时,TL=0(用判断框表示TL),控制器保持S0不变。只有当S0的持续时间等于25秒时,TL=1,控制器发出状态转换信号ST(用条件输出框表示ST),并转换到下一个工作状态。依此类推可以弄懂ASM图所表达的含义。
3.单元电路的设计
(1)定时器
定时器由与系统秒脉冲(由时钟脉冲产生器提供)同步的计数器构成,要求计数器在状态信号ST作用下,首先清零,然后在时钟脉冲上升沿作用下,计数器从零开始进行增1计数,向控制器提供模5的定时信号TY和模25的定时信号TL。
计数器选用集成电路74LS163进行设计较简便。74LS163是4位二进制同步计数器,它具有同步清零、同步置数的功能。74LS163的外引线排列图和时序波形图如图12、3所示,其功能表如表12、2所示。图中, 是低电平有效的同步清零输入端, 是低电平有效才同步并行置数控制端,CTp、CTT是计 图12、2 交通灯的ASM图数控制端,CO是进位输出端,D0~D3是并行数据输入端,Q0~Q 3是数据输出端。由两片74LS163级联组成的定时器电路如图12、4所示。电路的工作原理请自行分析。
(a)
图12、3 74LS163的外引线排列图和时序波形图
(2)控制器
控制器是交通管理的核心,它应该能够按照交通管理规则控制信号灯工作状态的转换。从ASM图可以列出控制器的状态转换表,如表12、3所示。选用两个D触发器FF1、FFO做为时序寄存器产生 4种状态,控制器状态转换的条件为TL和TY,当控制器处于Q1n+1Q0n+1= 00状态时,如果TL= 0,则控制器保持在00状态;如果,则控制器转换到Q1n+1Q0n+1= 01状态。这两种情况与条件TY无关,所以用无关项"X"表示。其余情况依次类推,同时表中还列出了状态转换信号ST。
图12、4 定时器电路图
表12、2 74LS163功能表
|
表12、3 控制器状态转换表
根据表12、3、可以推出状态方程和转换信号方程,其方法是:将Q1n+1、Q0n+1和 ST为1的项所对应的输人或状态转换条件变量相与,其中"1"用原变量表示,"0"用反变量表示,然后将各与项相或,即可得到下面的方程:
根据以上方程,选用数据选择器 74LS153来实现每个D触发器的输入函数,将触发器的现态值( )加到74LS153的数据选择输入端作为控制信号.即可实现控制器的功能。控制器的逻辑图如图12、5所示。图中R、C构成上电复位电路 。
图 12、5控制器逻辑图
(3)译码器
译码器的主要任务是将控制器的输出 Q1、 Q0的4种工作状态,翻译成甲、乙车道上6个信号灯的工作状态。控制器的状态编码与信号灯控制信号之间的关系如表 12、4所示。实现上述关系的译码电路请读者自行设计。
四、实验仪器设备
1. 数字电路实验箱
2. 集成电路74LS74 1片,74LS10 1片,74LS00 2片,74LS153 2片,74LS163 2片,NE555 1片
3. 电阻 51KΩ 1只,200Ω 6只
4. 电容 10Uf 1只
5. 其它 发光二极管 6只
五、实验内容及方法
表12、4控制器状态编码与信号灯关系表
状态 AG AY AR BG BY BR
00 1 0 0 0 0 1
01 0 1 0 0 0 1
10 0 0 1 1 0 0
11 0 0 1 0 1 0
1.设计、组装译码器电路,其输出接甲、乙车道上的6只信号灯(实验时用发光二极管代替),验证电路的逻辑功能。
2.设计、组装秒脉冲产生电路。
3.组装、调试定时电路。当 CP信号为 1Hz正方波时,画出CP、 Q0、 Q1、 Q2、Q3、Q4、TL.、TY的波形,并注意它们之间一的时序关系。
4.组装、调试控制器电路。
5.完成交通灯控制电路的联调,并测试其功能。
㈡ 跪求用单片机8051芯片设计的交通信号灯,那位大哥,大姐,帮下小弟
单片机课程设计与总结报告
摘要
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机AT89C51为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。
目录
一.设计任务…………………………
二.交通灯的设计程序框图………………
三.交通灯程序的主程序 ………………
四.系统硬件电路的设计……………………
五.原理图………………
六.检测与调试…………………………….
七.总结与体会……………………………….
八.致谢……………………………….
一.设计任务
(一)、功能及技术指标要求
设计交通灯的基本要求 : 设计一个交通灯,要应用DVCC实验系统。
(二)、设计内容
按设计技术指标进行交通灯的硬件和软件设计。
(三)设计思路及关键技术
一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。单片机是集成的IC芯片,只需根据实际设计要求选型。其他部分都需要根据应用要求和性能指标自行设计。
基于单片机的交通灯的设计时要充分的认识以下两个问题:
1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。
2.双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
二. 交通灯的设计程序框图
开始
↓
四个路口红灯亮
↓
东西绿灯亮,南北红灯亮,延时
↓
东西黄灯闪烁,南北红灯亮,延时
↓
东西红灯亮,南北绿灯亮,延时
↓
东西红灯亮,南北黄灯闪烁,延时
↓
三.交通灯程序的主程序
程序如下:
ORG 0000H
SJMP A3 ;四盏红灯亮
A3:MOV SP,#60H
MOV A, #24H
MOV P1, A
CLR P3.4
CLR P3.3
SETB P3.5
SETB P3.2 ;显示5秒
MOV R4,#05H
LOOP1:MOV R2,#03H
LCALL xian ;调显示子程序
DJNZ R4,LOOP1
MOV R4,#00H
MOV R2,#03H
LCALL xian
;东西绿灯亮,南北红灯亮
A2:MOV A,#0CH
CLR P3.5
MOV P1,A
SETB P3.3
CLR P3.4
SETB P3.2 ;显示20秒
MOV R4,#14H
LOOP2 :MOV R2,#03H
LCALL xian ;调显示子程序
DJNZ R4,LOOP2
MOV R4,#00H
MOV R2,#03H
LCALL xian ;调显示子程序
SETB P3.2
CLR P3.3 ; 显示5秒
MOV R4 ,#05H ;东西黄灯亮,南北红灯亮
LOOP9:MOV A,#14H
MOV P1 ,A
CLR P3.5
SETB P3.4
MOV R2,#02H
LCALL xian ;调显示子程序
MOV R2,#01H ;定时
LCALL DELAY ;调延时子程序
;南北红灯亮
MOV A ,#04H
MOV P1 ,A
CLR P3.4
CLR P3.5
MOV R2,#01H ;定时
LCALL DELAY ;调延时子程序
DJNZ R4,LOOP9
MOV R4,#00H
MOV R2,#03H
LCALL xian ;调显示子程序
;东西红灯亮,南北绿灯亮
A8: MOV A, #61H
MOV P1,A
CLR P3.4
CLR P3.3
CLR P3.2
SETB P3.5 ; 显示20秒
MOV R4,#14H
LOOP3: MOV R2,#03H
LCALL xian ;调显示子程序
DJNZ R4,LOOP3
MOV R4,#00H
MOV R2,#03H
LCALL xian ;调显示子程序
SETB P3.5
MOV R4 ,#05H
LOOP10: MOV R2,#02H
LCALL xian ;调显示子程序
; 东西红灯亮,南北黄灯亮
A0:MOV A,#0A2H
MOV P1,A
CLR P3.4
CLR P3.3
CLR P3.2
MOV R2,#01H ;定时
LCALL DELAY ;调延时子程序
; 东西红灯亮
MOV A,#20H
MOV P1,A
CLR P3.4
CLR P3.3
CLR P3.2
MOV R2,#01H ;定时
LCALL DELAY ;调延时子程序
DJNZ R4,LOOP10
MOV R4,#00H
MOV R2,#03H
LCALL xian ;调显示子程序
LJMP A2 ;延时子程序
DELAY:PUSH 2
PUSH 1
PUSH 0
DELAY1: MOV 1,#00H
DELAY2:MOV 0,#0B2H
DJNZ 0,$
DJNZ 1,DELAY2
DJNZ 2,DELAY1
POP 0
POP 1
POP 2
DJNZ R2 ,DELAY
RET
;显示子程序
xian: MOV A,R4
MOV B,#10
DIV AB
MOV R6,A
MOV DPTR,#TAB
MOV A,B
MOVC A,@A+DPTR
MOV SBUF,A
MOV R7,#0FH
H55S:DJNZ R7,H55S
MOV A,R6
MOVC A,@A+DPTR
MOV SBUF,A
MOV R7,#0FH
H55S1:DJNZ R7,H55S1
LCALL DELAY
RET
TAB:DB 0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e0h
DB 0feh,0f6h,0eeh,3eh,9ch,7ah,9eh,8eh
END
四.系统硬件电路的设计
(1)芯片由DVCC实验系统提供(AT89C51)
1.主要特性:
•与MCS-51 兼容
•4K字节可编程闪烁存储器
寿命:1000写/擦循环
数据保留时间:10年
•全静态工作:0Hz-24Hz
•三级程序存储器锁定
•128*8位内部RAM
•32可编程I/O线
•两个16位定时器/计数器
•5个中断源
•可编程串行通道
•低功耗的闲置和掉电模式
•片内振荡器和时钟电路
2.管脚说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚 备选功能
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(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
3.振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4.芯片擦除: 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
(2) 完整的DVCC实验箱面板
(3)硬件电路连接说明
五.原理图
六.检测与调试
1、硬件调试:
硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试是在用户系统未工作时的一种硬件检测。
第一步:目测。检查外部的各种元件或者是电路是否有断点。
第二步用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步加电检测。给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步是联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的 器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
2、软件调试:
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
七.总结与体会
本系统是以单片机AT89C51芯片为核心部件,实现了能根据实际车流量通过AT89C51芯片设置红、绿灯燃亮时间的功能。此次在软件上是花费时间最多的,我们上网找资料,上图书馆,尽可能的了解有关于交通灯这方面的知识。通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。
八.致谢
通过本次毕业设计,我在涂老师和王老师的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,单片机领域这对我今后进一步学习计算机方面的知识有极大的帮助。在此,忠心感谢涂老师和王老师以及许多同学的指导和支持。
要图的话,多给我点分,我发到你邮箱里!
㈢ 51单片机C语言程序:交通灯系统
这种问题一般没人会的,像 CSDN、程序员网 等等有类似的设计,你可以去看看
㈣ 基于51单片机控制交通灯的电路图与C语言程序
思路:
红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。
东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。
三、硬件电路设计
此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
四、软件程序(C语言)
以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。
//*****************************//
//程序名:十字路口交通灯控制
//编写人:黄庭剑
//初写时间:2009年1月2日
//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.
//CPU说明:AT89C51型单片机;24MHZ晶体振荡器
//完成时间:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfrp0=0x80;
sfrp1=0x90;
sfrp2=0xA0;
sfrp3=0xb0;//这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。
sbitsw=p0^0;
sbitOE=P0^6;
sbitLE=P0^7;//74LS373锁存器控制端定义
chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;
//函数声明begin
voiddelay1(intcount);
voiddelay_long(intnumber1,intnumber2);
voidpeople_car_drive();
//函数声明end
//***********************//延时子程序
voiddelay1(intcount)
{inti;
for(i=count;i>0;i--)
{;}
}
voiddelay_long(intnumber1,intnumber2)
{
inta,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{_nop_();}
}
}
//**********************//延时子程序
voidpeople_car_drive()
{
intp_1=2,i,j=9,p_2=6;//****************//行人通行时,延时20秒
p2=0x09;//南北红灯亮
p3=0x24;//东西绿灯亮
while(p_1-->0)
{LE=1;
OE=0;
if(p_1==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break;//减到3时退出循环,让其黄灯闪烁显示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
//*******************************************************************************//
p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是车辆通行时延时60秒//
p2=0x24;//南北绿灯亮
p3=0x09;//东西红灯亮
while(p_2-->0)
{LE=1;
OE=0;
if(p_2==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break;//减到2时退出循环
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);//南北黄灯闪烁三秒完毕
}
voidmain()//主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//初始化各端口
{while(1)
{
if(sw==0)
{people_car_drive();}
else
{
p2=0x00;
p3=0x00;//关闭所有交通灯
}
}
}
}
详情访问:http://hi..com/hjiannew/
㈤ 模拟交通灯 单片机C51,要电路图和程序
package guidemo;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/**
* <p>Title: 图形用户界面</p>
*
* <p>Description: 简单的图形界面编程</p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author vic
* @version 1.0
*/
public class ColorFrame extends Frame implements MouseListener {
Label L; //标签
TextField T; //文本域
Button B1, B2; //按钮
public ColorFrame() {
this.setLayout(null); //想要手动指定各组件的的位置
L = new Label("输入学号:"); //设定标签L内容
L.setBounds(60, 50, 50, 25); //设定标签L外观
this.add(L); //将标签L添加到窗口中
T = new TextField("请在这里输入"); //设定文本域T的内容
T.setBounds(125, 50, 90, 25); //设定文本域T的外观
this.add(T); //将文本域T添加到窗口中
B1 = new Button("变红!"); //设定按钮B1的内容
B1.setBounds(25, 90, 90, 25); //设定按钮B1的外观
B1.addMouseListener(this);//在B1上注册鼠标监听器
this.add(B1); //将按钮B1添加到窗口中
B2 = new Button("变绿!");
B2.setBounds(125, 90, 90, 25);
B2.addMouseListener(this);
this.add(B2);
WindowDestroyer Listener = new WindowDestroyer(); //创建关闭窗口监听器
this.addWindowListener(Listener); //将监听器添加到窗口中
this.setBackground(Color.yellow); //设定窗口背景颜色
this.setTitle("This is Frame!"); //设定窗口标题文字
this.setBounds(0, 0, 250, 220); //设定窗口位置和大小
this.setVisible(true); //显示窗口
}
public void mouseClicked(MouseEvent e) {
if (e.getComponent() == B1) {//getComponent返回按钮上面的字符串
this.setBackground(Color.red);
}
if (e.getComponent() == B2) {
this.setBackground(Color.green);
}
}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public static void main(String[] args) {
new ColorFrame();
}
}
㈥ 用51单片机编写城市道路交通灯c语言程序,有左转右转
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P3^0; //东西向指示灯
sbit YELLOW_A=P3^1;
sbit GREEN_A=P3^2;
sbit RED_B=P3^3; //南北向指示灯
sbit YELLOW_B=P3^4;
sbit GREEN_B=P3^5;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
//延时倍数,闪烁次数,操作类型变量
uchar Flash_Count=0,Operation_Type=1,LEDsng,LEDsns,LEDewg,LEDews,discnt;
uint Time_Count=0,time;
uchar ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void displaysn()
{
LEDsng=((time-Time_Count)/20)%10;
LEDsns=((time-Time_Count)/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
void displayew()
{
LEDewg=((time-Time_Count)/20)%10;
LEDews=((time-Time_Count)/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
//定时器0 中断函数
void T0_INT() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
switch(Operation_Type)
{
case 1: //东西向绿灯与南北向红灯亮
if((Time_Count%20)==0)displayew();
RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=2;
break;
case 2: //东西向黄灯开始闪烁,绿灯关闭
LEDewg=0x0;
LEDews=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_A=~YELLOW_A;GREEN_A=0;
if(++Flash_Count!=10) return; //闪烁
Flash_Count=0;
Operation_Type=3;
break;
case 3: //东西向红灯与南北向绿灯亮
if((Time_Count%20)==0)displaysn();
RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=4;
break;
case 4: //南北向黄灯开始闪烁,绿灯关闭
LEDsng=0x0;
LEDsns=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_B=~YELLOW_B;GREEN_A=0;
if(++Flash_Count!=10) return; //闪烁
Flash_Count=0;
Operation_Type=1;
break;
}
}
void t1_isr() interrupt 3
{
TR1=0;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
switch(discnt)
{
case 0:
P2=0x02;
P0=ledtab[LEDewg];
break;
case 1:
P2=0x01;
P0=ledtab[LEDews];
break;
case 2:
P2=0x08;
P0=ledtab[LEDsng];
break;
case 3:
P2=0x04;
P0=ledtab[LEDsns];
break;
default:discnt=0;break;
}
discnt++;
discnt&=0x03;
}
void delay()
{
uint i;
for(i=0;i<1000;i++);
}
//主程序
void main()
{
TMOD=0x11; //T0 方式1
EA=1;
ET0=1;
TR0=1;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
ET1=1;
time=100;
Time_Count=100;
Time_Count=0;
Operation_Type=1;
while(1)
{
if(KEY1==0) //按一下加1S
{
delay();
if(KEY1==0)
{
while(KEY1==0);
TR0=0;
time+=20;
LEDsng=(time/20)%10;
LEDsns=(time/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
}
if(KEY2==0) //按一下减1S
{
delay();
if(KEY2==0)
{
while(KEY2==0);
TR0=0;
time-=20;
if(time==0)time=20;
LEDewg=(time/20)%10;
LEDews=(time/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
}
if(KEY3==0) //启动
{
delay();
if(KEY3==0)
{
while(KEY2==0);
TR0=1;
Time_Count=0;
}
}
}
}
㈦ 用51单片机制作红绿灯,要求按键能控制整个电路的启动和停止,用汇编语言怎么编写程序
交通路口红绿灯自动控制器电路图 如图所示为交通路口红绿灯自动控制电路。该控制器主要由四块555(IC2~IC5)和一些阻容元件组成的四级单稳态延时电路首尾相连而成。输入的8V电压经78M05稳压后为555提供VDD=+5V的电源电压。 当刚接通电源时,触发脉冲经IC1(CD4011)门电路和R1、C1延时,再经C2、R22微分后加到IC2②脚,触发IC2输出高电平,进入暂稳态,其暂稳态定时时间长短取决于K1的位置,延时td=1.1RC6,设定时间分别为60秒、45秒、30秒。暂稳态结束时,IC2③脚为低电平,其经C3、R23微分后,下降沿又触发IC3,形成第二级单稳态延时。如此依次触发定时,完成绿色灯亮-黄色灯亮(8秒、10秒、12秒)-红色灯亮(60秒、45秒、30秒)的循环周期。 本控制器通过四级电路首尾相接,依次延时触发,使交通灯依次出现绿-黄-红(色)信号,指挥行人和车辆在十字路I=1有秩序地通行(绿)-提醒注意(黄)-禁止通行(红)。 看看这个有用吗?
㈧ c51单片机c语言交通灯的程序
Proteus仿真原理图:
程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data buf[4];
uchar data sec_dx=20;//东西数默认
uchar data sec_nb=30;//南北默认值
uchar data set_timedx=20;
uchar data set_timenb=30;
int n;
uchar data b;//定时器中断次数
sbit k1=P1^6;//定义5组开关
sbit k2=P1^7;
sbit k3=P2^7;
sbit k4=P3^0;
sbit k5=P3^1;
sbit Yellow_nb=P2^5; //南北黄灯标志
sbit Yellow_dx=P2^2; //东西黄灯标志
sbit Green_nb=P2^4;
sbit Green_dx=P2^1;
sbit Buzz=P3^7;
bit Buzzer_Indicate;
bit time=0;//灯状态循环标志
bit set=1;//调时方向切换键标志
uchar code table[11]={ //共阴极字型码
0x3f, //--0
0x06, //--1
0x5b, //--2
0x4f, //--3
0x66, //--4
0x6d, //--5
0x7d, //--6
0x07, //--7
0x7f, //--8
0x6f, //--9
0x00 //--NULL
};
//函数的声明部分
void delay(int ms);//延时子程序
void key();//按键扫描子程序
void key_to1();//键处理子程序
void key_to2();
void key_to3();
void display();//显示子程序
void logo(); //开机LOGO
void Buzzer();
//主程序
void main()
{
TMOD=0X01;
TH0=0XD8;
TL0=0XF0;
EA=1;
ET0=1;
TR0=1;
EX0=1;
EX1=1;
logo();
P2=0Xc3;// 开始默认状态,东西绿灯,南北黄灯
sec_nb=sec_dx+5;
while(1)
{
key(); //调用按键扫描程序
display(); //调用显示程序
Buzzer();
}
}
//函数的定义部分
void key() //按键扫描子程序
{
if(k1!=1)
{
delay(10);
if(k1!=1)
{
while(k1!=1)
{
key_to1();
for(n=0;n<40;n++)
{ display();}
}
}
}
if(k2!=1)
{
delay(10);
if(k2!=1)
{
while(k2!=1)
{
key_to2();
for(n=0;n<40;n++)
{ display();}
}
}
}
if(k3!=1)
{
TR0=1; //启动定时器
Buzzer_Indicate=0;
sec_nb=set_timenb; //从中断回复,仍显示设置过的数值
sec_dx=set_timedx;
if(time==0)
{ P2=0X99;sec_nb=sec_dx+5; }
else { P2=0xC3;sec_dx=sec_nb+5; }
}
if(k4!=1)
{
delay(5);
if(k4!=1)
{
while(k4!=1);
set=!set;
}
}
if(k5!=1)
{
delay(5);
if(k5!=1)
{
while(k5!=1)
key_to3();
}
}
}
void display() //显示子程序
{
buf[1]=sec_dx/10; //第1位 东西秒十位
buf[2]=sec_dx%10; //第2位 东西秒个位
buf[3]=sec_nb/10; //第3位 南北秒十位
buf[0]=sec_nb%10; //第4位 南北秒个位
P1=0xff; // 初始灯为灭的
P0=0x00;
P1=0xfe; //片选LCD1
P0=table[buf[1]];
delay(1);
P1=0xff;
P0=0x00;
P1=0xfd; //片选LCD2
P0=table[buf[2]];
delay(1);
P1=0xff;
P0=0x00;
P1=0Xfb; //片选LCD3
P0=table[buf[3]];
delay(1);
P1=0xff;
P0=0x00;
P1=0Xf7;
P0=table[buf[0]]; //片选LCD4
delay(1);
}
void time0(void) interrupt 1 using 1 //定时中断子程序
{
b++;
if(b==19) // 定时器中断次数
{ b=0;
sec_dx--;
sec_nb--;
if(sec_nb<=5&&time==0) //东西黄灯闪
{ Green_dx=0;Yellow_dx=!Yellow_dx;}
if(sec_dx<=5&&time==1) //南北黄灯闪
{ Green_nb=0;Yellow_nb=!Yellow_nb;}
if(sec_dx==0&&sec_nb==5)
sec_dx=5;
if(sec_nb==0&&sec_dx==5)
sec_nb=5;
if(time==0&&sec_nb==0)
{ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}
if(time==1&&sec_dx==0)
{P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}
}
}
void key_to1() //键盘处理子程序之+
{
TR0=0; //关定时器
if(set==0)
set_timenb++; //南北加1S
else
set_timedx++; //东西加1S
if(set_timenb==100)
set_timenb=1;
if( set_timedx==100)
set_timedx=1; //加到100置1
sec_nb=set_timenb ; //设置的数值赋给东西南北
sec_dx=set_timedx;
}
void key_to2() //键盘处理子程序之-
{
TR0=0; //关定时器
if(set==0)
set_timenb--; //南北减1S
else
set_timedx--; //东西减1S
if(set_timenb==0)
set_timenb=99;
if( set_timedx==0 )
set_timedx=99; //减到1重置99
sec_nb=set_timenb ; //设置的数值赋给东西南北
sec_dx=set_timedx;
}
void key_to3() //键盘处理之紧急车通行
{
TR0=0;
P2=0Xc9;
sec_dx=00;
sec_nb=00;
Buzzer_Indicate=1;
}
void int0(void) interrupt 0 using 1 //只允许东西通行
{
TR0=0;
P2=0Xc3;
Buzzer_Indicate=0;
sec_dx=00;
sec_nb=00;
}
void int1(void) interrupt 2 using 1 //只允许南北通行
{
TR0=0;
P2=0X99;
Buzzer_Indicate=0;
sec_nb=00;
sec_dx=00;
}
void logo()//开机的Logo "- - - -"
{ for(n=0;n<50;n++)
{
P0=0x40;
P1=0xfe;
delay(1);
P1=0xfd;
delay(1);
P1=0Xfb;
delay(1);
P1=0Xf7;
delay(1);
P1 = 0xff;
}
}
void Buzzer()
{
if(Buzzer_Indicate==1)
Buzz=!Buzz;
else Buzz=0;
}
void delay(int ms) //延时子程序
{
uint j,k;
for(j=0;j<ms;j++)
for(k=0;k<124;k++);
}
㈨ 基于51单片机控制交通灯的电路图与C语言程序
#include <reg51.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar h;
uint r=0;
uint s;
uchar code dis[]={ 0Xc0,0Xf9, 0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff,};
/*0*//*1*//*2*//*3*//*4*//*5*//*6*//*7*//*8*//*9*//*NULL*/
void delay(uint c)
{
uint i,j;
for(i=0;i<c;i++)
for(j=0;j<100;j++);
}
void t0(void) interrupt 0 using 1 //interrupt 1
{
delay(2);
if(INT0==0)
{
r++;
if(r==2)
{
r=0;
}
r%=2;
if(r==0)
{
P0=0xeb;
P1=0x00;
P2=0xff;
}while(1)
{
if(INT0==0|INT1==0|T0==0)
{
delay(2);
if(INT0==0|INT1==0|T0==0)
break;
}
};
}
}
void t1(void) interrupt 2 using 1 //interrupt 2
{
delay(2);
if(INT1==0)
{
r++;
if(r==2)
{
r=0;
}
r%=2;
if(r==0)
{
P0=0xdd;
P1=0x00;
P2=0xff;
}while(1)
{
if(INT1==0|INT0==0|T0==0)
{
delay(2);
if(INT1==0|INT0==0|T0==0)
break;
}
};
}
}
void t2(void) interrupt 1 using 1 //interrupt 3
{
TH0=0xff;
TL0=0xff;
delay(2);
if(T0==0)
{
P0=0xdb;
P1=0x00;
P2=0xff;
}while(1)
{
if(INT0==0|INT1==0)
{
delay(2);
if(INT0==0|INT1==0)
break;
}
};
}
void main(void)
{
TMOD=0x06;
TH0=0xff;
TL0=0xff;
TR0=1;
EA=1;
EX0=1;
EX1=1;
ET0=1;
while(1)
{
P0=0xeb;
for(h=28;h>0;h--)
{
for(s=248;s>0;s--)
{
P1=0x00;
P2=0xff;
P1=0x01;
P2=dis[h/10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x02;
P2=dis[h%10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x04;
P2=dis[(h+2)/10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x08;
P2=dis[(h+2)%10];
delay(1);
}
}
delay(248);
P0=0xf3;
for(h=3;h>0;h--)
{
delay(392);
P0=0xf3;
delay(1);
P1=0x00;
P2=0xff;
P1=0xaa;
P2=dis[(h-1)%10];
delay(600);
P0=0xfb;
}
delay(248);
P0=0xdd;
for(h=38;h>0;h--)
{
for(s=248;s>0;s--)
{
P1=0x00;
P2=0xff;
P1=0x01;
P2=dis[(h+2)/10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x02;
P2=dis[(h+2)%10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x04;
P2=dis[h/10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x08;
P2=dis[h%10];
delay(1);
}
}
delay(248);
P0=0xde;
for(h=3;h>0;h--)
{
delay(392);
P0=0xde;
delay(1);
P1=0x00;
P2=0xff;
P1=0xaa;
P2=dis[(h-1)%10];
delay(600);
P0=0xdf;
}
delay(248);
}
}
㈩ 51单片机交通灯电路图与程序
网络文档里我已经上传,你可以去下载http://wenku..com/view/16a276c66137ee06eff918a8.html