单片机中的交通灯代码

关于单片机中的交通灯代码的讨论正在各大平台持续发酵,我们精心筛选了最新资讯 ,希望能为您带来实质性的帮助。

#include<reg51.h>

#define?uchar?unsigned?char

#define?uint?unsignedint

//定义三个灯

sbit?sw1=P3^0;

sbit?sw2=P3^1;

sbit?sw3=P3^2;

sbit?key_ew=P3^3;

sbit?key_sn=P3^4;

sbit?BZ=P3^5;

uchar?TH,TL;?

uchar?SN=30,EW=25,NN=60;

uint?tt,ii,jj,kk;

//数码管,应该是7seg,0-9

uchar?code?DisCode[]

={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar?Disbuff0[2];

uchar?Disbuff1[2];

void?Delay(uint?x)//MS延时

{?

uchar?i;

while(x--)

{

for(i=0;i<123;i++);

}

}

void?init()//对中断的初始化

{?

TMOD=0x01;

TH=(65536-4000)/256;//设置初始值

TL=(65536-4000)%256;

TH0=TH;

TL0=TL;

EA=1;//开中断开关

ET0=1;

TR0=1;

}

void?fenli0()

{

Disbuff0[0]=SN/10;

Disbuff0[1]=SN%10;

}

void?fenli1()

{

Disbuff1[0]=EW/10;

Disbuff1[1]=EW%10;

}

void?Display()

{

uchar?ii;

if(ii==0)

{

P0=0x80;

P2=0x80;

P2=DisCode[Disbuff0[0]]|0x80;

P0=DisCode[Disbuff1[0]]&0x7f;

}

else

{

P0=0x80;

P2=0x80;

P2=DisCode[Disbuff0[1]]&0x7f;

P0=DisCode[Disbuff1[1]]|0x80;

}

}

这程序没写完,没有主程序调用

单片机交通灯的设计与方法 ,要具体,只要文字,不要谢谢了 ,大神帮忙啊

参考《51单片机C语言创新教程》温子祺等著 。

源码转自:《51单片机C语言创新教程》。

/*实验名称:交通灯实验

*描述:交通灯实验要求红灯亮15秒 ,绿灯亮10秒,黄灯亮5秒,

当红灯切换为绿灯或者绿灯切换为红灯 ,

要实现灯闪烁。红灯、绿灯 、黄灯的点亮持续时间可以通过串口来修改,

并在下一个循环中更新数值 。

*作者:温子祺

*修改日期:2010/5/4

*说明:代码注释与讲解详见《51单片机C语言创新教程》温子祺等著,北京航空航天大学出版社

*/

#include?"stc.h"

typedef?unsigned?charUINT8;

typedef?unsigned?int UINT16;

typedef?unsigned?longUINT32;?

typedef?charINT8;

typedef?int?INT16;

typedef?longINT32;

#define?TIMER0_INITIAL_VALUE?5000

#define?HIGH1

#define?LOW0

#define?ON?1

#define?OFF0

#define?SEG_PORTP0

#define?LS164_DATA(x)?{if((x))P0_4=1;else?P0_4=0;}?

#define?LS164_CLK(x){if((x))P0_5=1;else?P0_5=0;}?

#define?NORTH_R_LIGHT(x){if((x))P2_0=0;else?P2_0=1;}

#define?NORTH_Y_LIGHT(x){if((x))P2_1=0;else?P2_1=1;}

#define?NORTH_G_LIGHT(x){if((x))P2_2=0;else?P2_2=1;}

#define?SOUTH_R_LIGHT(x){if((x))P2_3=0;else?P2_3=1;}

#define?SOUTH_Y_LIGHT(x){if((x))P2_4=0;else?P2_4=1;}

#define?SOUTH_G_LIGHT(x){if((x))P2_5=0;else?P2_5=1;}

#define?TRAFFIC_STATUS_10

#define?TRAFFIC_STATUS_21

#define?TRAFFIC_STATUS_32

#define?UART_MARKER0xEE

UINT8?Timer0IRQEvent=0;

UINT8?Time1SecEvent=0;

UINT8?Time500MsEvent=0;

UINT8?TimeCount=0;

UINT8?SegCurPosition=0;

UINT8?LightOrgCount[4]={15,5,15,5};

UINT8?LightCurCount[4]={15,5,15,5};

UINT8?TrafficLightStatus=0;

code?UINT8?SegCode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

UINT8?SegBuf[4]?={0};

code?UINT8?SegPosition[4]={0x07,0x0b,0x0d,0x0e};

typedef?struct?_LIGHT_VAL

{

UINT8?Head;

UINT8?val[4];?

}LIGHT_VAL;

typedef?union?_LIGHT_VAL_EX

{

LIGHT_VAL?lv;

UINT8p[5];?

}LIGHT_VAL_EX;

void?LS164Send(UINT8?byte)

{

UINT8?j;

for(j=0;j<=7;j++)

{

if(byte&(1<<(7-j)))

{

LS164_DATA(HIGH);

?}

?else

?{

LS164_DATA(LOW);

?}

LS164_CLK(LOW);?

LS164_CLK(HIGH);

}

}

void?RefreshDisplayBuf(UINT8?s1) ?//刷新显示缓存

{

SegBuf[0]?=?s1%10;

SegBuf[1]?=?s1/10;

SegBuf[2]?=?s1%10;

SegBuf[3]?=?s1/10;

}

void?SegDisplay(void)

{

UINT8?t;

t?=?SegCode[SegBuf[SegCurPosition]];?

SEG_PORT?|=?0x0f;

LS164Send(t);?

SEG_PORT?=?(SEG_PORT|0x0f)?&?SegPosition[SegCurPosition];

if(++SegCurPosition>=4)?

{

SegCurPosition=0;

}

?

}

void?TimerInit(void)

{

TH1?=?0;

TL1?=?0;?

TH0?=?(65536-TIMER0_INITIAL_VALUE)/256;

TL0?=?(65536-TIMER0_INITIAL_VALUE)%256;?//定时1MS

TMOD?=?0x51; /*01010001?T1计数,T0定时*/

}

void?Timer0Start(void)

{

TR0?=?1; //启动计时器1?

?ET0?=?1;

}

void?Timer0Stop(void)

{

TR0?=?0; //启动计时器1?

ET0?=?0;?

}

void?PortInit(void)

{

?P0=P1=P2=P3=0xFF;

}

void?UartInit(void)

{

SCON=0x40;

T2CON=0x34;

RCAP2L=0xD9;

RCAP2H=0xFF;

REN=1;

ES=1;

}

void?UartSendByte(UINT8?byte)

{

SBUF=byte;

while(TI==0);

TI=0;

}

void?UartPrintfString(INT8?*str)

{

while(str?&&?*str)

{

UartSendByte(*str++);

}

}

void?main(void)

{

UINT8?i=0;

PortInit();

TimerInit();

Timer0Start();

UartInit();

RefreshDisplayBuf(LightCurCount[0]);

EA=1;

NORTH_R_LIGHT(ON);

SOUTH_G_LIGHT(ON);

while(1)

{

if(Timer0IRQEvent)

{?

Timer0IRQEvent=0;

TimeCount++;

if(TimeCount>=200)

{

TimeCount=0;

if(LightCurCount[0])

{

TrafficLightStatus=0;

}

else?if(LightCurCount[1])

{

TrafficLightStatus=1;

}

else?if(LightCurCount[2])

{

TrafficLightStatus=2;

}

else?if(LightCurCount[3])

{

TrafficLightStatus=3;

}

else?

{

for(i=0;i<4;i++)

{

LightCurCount[i]=LightOrgCount[i];

}

TrafficLightStatus=0;

}

switch(TrafficLightStatus)

{

case?0:

{

NORTH_R_LIGHT(ON);

SOUTH_R_LIGHT(OFF);

NORTH_G_LIGHT(OFF);

SOUTH_G_LIGHT(ON);

NORTH_Y_LIGHT(OFF);

SOUTH_Y_LIGHT(OFF);

}

break;

case?1:

{

if(LightCurCount[1]%2)

{

NORTH_R_LIGHT(ON);

SOUTH_G_LIGHT(ON);

}

else

{

NORTH_R_LIGHT(OFF);

SOUTH_G_LIGHT(OFF);

}

NORTH_Y_LIGHT(ON);

SOUTH_Y_LIGHT(ON);

}

break;

case?2:

{

NORTH_R_LIGHT(OFF);

SOUTH_R_LIGHT(ON);

NORTH_G_LIGHT(ON);

SOUTH_G_LIGHT(OFF);

NORTH_Y_LIGHT(OFF);

SOUTH_Y_LIGHT(OFF);

}

break;

case?3:

{

if(LightCurCount[3]%2)

{

NORTH_G_LIGHT(ON);

SOUTH_R_LIGHT(ON);

}

else

{

NORTH_G_LIGHT(OFF);

SOUTH_R_LIGHT(OFF);

}

NORTH_Y_LIGHT(ON);

SOUTH_Y_LIGHT(ON);

}

break;?

default:break;?

}

RefreshDisplayBuf(LightCurCount[TrafficLightStatus]);

LightCurCount[TrafficLightStatus]--;

}

SegDisplay();

}

}

}

void?UartIRQ(void)interrupt?4?

{

static?UINT8?cnt=0;

static?LIGHT_VAL_EX?LightValEx;

if(RI)

{

RI=0;

?LightValEx.p[cnt++]=SBUF;

if(LightValEx.lv.Head?==?UART_MARKER)

{?

if(cnt>=5)

{

for(cnt=1;cnt<5;cnt++)

{

LightOrgCount[cnt-1]=LightValEx.lv.val[cnt];?

LightCurCount[cnt-1]=LightValEx.lv.val[cnt];

}

cnt=0;

UartPrintfString("设置交通灯完成\r\n");

}

}

else

{

cnt=0;

}

}

}

void?Timer0IRQ(void)?interrupt?1?

{

ET0 =?0;

TH0?=?(65536-TIMER0_INITIAL_VALUE)/256;

TL0?=?(65536-TIMER0_INITIAL_VALUE)%256;?//定时1MS

Timer0IRQEvent=1;

ET0 =?1;

}

=====================================================================

坐等拿分!

摘要: 近年来随着科技的飞速发展 ,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用 ,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 十字路口车辆穿梭 ,行人熙攘,车行车道,人行人道 ,有条不紊 。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统 。交通信号灯控制方式很多。本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器 ,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PC口输出至双位数码管);车辆闯红灯报警;绿灯时间可检测车流量并可通过双位数码管显示。本系统实用性强、操作简单 、扩展功能强 。 关键词: 单片机 交通灯 闯红灯 检测车流量 1 引言 当今 ,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。 1858年,在英国伦敦主要街头安装了以燃煤气为光源的红 ,蓝两色的机械扳手式信号灯,用以指挥马车通行 。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上 ,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意 ” 。1869年1月2日 ,煤气灯爆炸,使警察受伤,遂被取消。 电气启动的红绿灯出现在美国 ,这种红绿灯由红绿黄三色圆形的投光器组成 ,1914年始安装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行” 。 1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯 ,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭 ,就使红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路 。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行 ,以免发生交通事故 。 信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力 ,减少交通事故有明显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行 ,左转弯和右转弯 ,除非另一种标志禁止某一种转向 。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线 ,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口 。 2 单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域 ,故又称为微控制器。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等 。因此 ,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。 单片机经过1 、2 、3、3代的发展,目前单片机正朝着高性能和多品种方向发展 ,它们的CPU功能在增强,内部资源在增多,引角的多功能化 ,以及低电压底功耗。 3 芯片简介 3.1 MSC-51芯片简介 MCS-51单片机内部结构 8051是MCS-51系列单片机的典型产品 ,我们以这一代表性的机型进行系统的讲解 。 8051单片机包含中央处理器、程序存储器(ROM) 、数据存储器(RAM)、定时/计数器、并行接口 、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器 ,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 数据存储器(RAM) 8051内部有128个8位用户数据存储单元和128个专用寄存器单元 ,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问 ,而不能用于存放用户数据,所以,用户能使用的RAM只有128个 ,可存放读写的数据,运算的中间结果或用户定义的字型表。 图1 程序存储器(ROM): 8051共有4096个8位掩膜ROM,用于存放用户程序 ,原始数据或表格 。 定时/计数器(ROM): 8051有两个16位的可编程定时/计数器 ,以实现定时或计数产生中断用于控制程序转向 。

求采纳

本文已完

#include<reg51.h>

#define?uchar?unsigned?char

#define?uint?unsignedint

//定义三个灯

sbit?sw1=P3^0;

sbit?sw2=P3^1;

sbit?sw3=P3^2;

sbit?key_ew=P3^3;

sbit?key_sn=P3^4;

sbit?BZ=P3^5;

uchar?TH,TL;?

uchar?SN=30,EW=25,NN=60;

uint?tt,ii,jj,kk;

//数码管,应该是7seg,0-9

uchar?code?DisCode[]

={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar?Disbuff0[2];

uchar?Disbuff1[2];

void?Delay(uint?x)//MS延时

{?

uchar?i;

while(x--)

{

for(i=0;i<123;i++);

}

}

void?init()//对中断的初始化

{?

TMOD=0x01;

TH=(65536-4000)/256;//设置初始值

TL=(65536-4000)%256;

TH0=TH;

TL0=TL;

EA=1;//开中断开关

ET0=1;

TR0=1;

}

void?fenli0()

{

Disbuff0[0]=SN/10;

Disbuff0[1]=SN%10;

}

void?fenli1()

{

Disbuff1[0]=EW/10;

Disbuff1[1]=EW%10;

}

void?Display()

{

uchar?ii;

if(ii==0)

{

P0=0x80;

P2=0x80;

P2=DisCode[Disbuff0[0]]|0x80;

P0=DisCode[Disbuff1[0]]&0x7f;

}

else

{

P0=0x80;

P2=0x80;

P2=DisCode[Disbuff0[1]]&0x7f;

P0=DisCode[Disbuff1[1]]|0x80;

}

}

这程序没写完,没有主程序调用

单片机交通灯的设计与方法 ,要具体,只要文字,不要谢谢了 ,大神帮忙啊

参考《51单片机C语言创新教程》温子祺等著。

源码转自:《51单片机C语言创新教程》。

/*实验名称:交通灯实验

*描述:交通灯实验要求红灯亮15秒,绿灯亮10秒,黄灯亮5秒 ,

当红灯切换为绿灯或者绿灯切换为红灯,

要实现灯闪烁 。红灯 、绿灯、黄灯的点亮持续时间可以通过串口来修改,

并在下一个循环中更新数值。

*作者:温子祺

*修改日期:2010/5/4

*说明:代码注释与讲解详见《51单片机C语言创新教程》温子祺等著 ,北京航空航天大学出版社

*/

#include?"stc.h"

typedef?unsigned?charUINT8;

typedef?unsigned?int UINT16;

typedef?unsigned?longUINT32;?

typedef?charINT8;

typedef?int?INT16;

typedef?longINT32;

#define?TIMER0_INITIAL_VALUE?5000

#define?HIGH1

#define?LOW0

#define?ON?1

#define?OFF0

#define?SEG_PORTP0

#define?LS164_DATA(x)?{if((x))P0_4=1;else?P0_4=0;}?

#define?LS164_CLK(x){if((x))P0_5=1;else?P0_5=0;}?

#define?NORTH_R_LIGHT(x){if((x))P2_0=0;else?P2_0=1;}

#define?NORTH_Y_LIGHT(x){if((x))P2_1=0;else?P2_1=1;}

#define?NORTH_G_LIGHT(x){if((x))P2_2=0;else?P2_2=1;}

#define?SOUTH_R_LIGHT(x){if((x))P2_3=0;else?P2_3=1;}

#define?SOUTH_Y_LIGHT(x){if((x))P2_4=0;else?P2_4=1;}

#define?SOUTH_G_LIGHT(x){if((x))P2_5=0;else?P2_5=1;}

#define?TRAFFIC_STATUS_10

#define?TRAFFIC_STATUS_21

#define?TRAFFIC_STATUS_32

#define?UART_MARKER0xEE

UINT8?Timer0IRQEvent=0;

UINT8?Time1SecEvent=0;

UINT8?Time500MsEvent=0;

UINT8?TimeCount=0;

UINT8?SegCurPosition=0;

UINT8?LightOrgCount[4]={15,5,15,5};

UINT8?LightCurCount[4]={15,5,15,5};

UINT8?TrafficLightStatus=0;

code?UINT8?SegCode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

UINT8?SegBuf[4]?={0};

code?UINT8?SegPosition[4]={0x07,0x0b,0x0d,0x0e};

typedef?struct?_LIGHT_VAL

{

UINT8?Head;

UINT8?val[4];?

}LIGHT_VAL;

typedef?union?_LIGHT_VAL_EX

{

LIGHT_VAL?lv;

UINT8p[5];?

}LIGHT_VAL_EX;

void?LS164Send(UINT8?byte)

{

UINT8?j;

for(j=0;j<=7;j++)

{

if(byte&(1<<(7-j)))

{

LS164_DATA(HIGH);

?}

?else

?{

LS164_DATA(LOW);

?}

LS164_CLK(LOW);?

LS164_CLK(HIGH);

}

}

void?RefreshDisplayBuf(UINT8?s1) ?//刷新显示缓存

{

SegBuf[0]?=?s1%10;

SegBuf[1]?=?s1/10;

SegBuf[2]?=?s1%10;

SegBuf[3]?=?s1/10;

}

void?SegDisplay(void)

{

UINT8?t;

t?=?SegCode[SegBuf[SegCurPosition]];?

SEG_PORT?|=?0x0f;

LS164Send(t);?

SEG_PORT?=?(SEG_PORT|0x0f)?&?SegPosition[SegCurPosition];

if(++SegCurPosition>=4)?

{

SegCurPosition=0;

}

?

}

void?TimerInit(void)

{

TH1?=?0;

TL1?=?0;?

TH0?=?(65536-TIMER0_INITIAL_VALUE)/256;

TL0?=?(65536-TIMER0_INITIAL_VALUE)%256;?//定时1MS

TMOD?=?0x51; /*01010001?T1计数,T0定时*/

}

void?Timer0Start(void)

{

TR0?=?1; //启动计时器1?

?ET0?=?1;

}

void?Timer0Stop(void)

{

TR0?=?0; //启动计时器1?

ET0?=?0;?

}

void?PortInit(void)

{

?P0=P1=P2=P3=0xFF;

}

void?UartInit(void)

{

SCON=0x40;

T2CON=0x34;

RCAP2L=0xD9;

RCAP2H=0xFF;

REN=1;

ES=1;

}

void?UartSendByte(UINT8?byte)

{

SBUF=byte;

while(TI==0);

TI=0;

}

void?UartPrintfString(INT8?*str)

{

while(str?&&?*str)

{

UartSendByte(*str++);

}

}

void?main(void)

{

UINT8?i=0;

PortInit();

TimerInit();

Timer0Start();

UartInit();

RefreshDisplayBuf(LightCurCount[0]);

EA=1;

NORTH_R_LIGHT(ON);

SOUTH_G_LIGHT(ON);

while(1)

{

if(Timer0IRQEvent)

{?

Timer0IRQEvent=0;

TimeCount++;

if(TimeCount>=200)

{

TimeCount=0;

if(LightCurCount[0])

{

TrafficLightStatus=0;

}

else?if(LightCurCount[1])

{

TrafficLightStatus=1;

}

else?if(LightCurCount[2])

{

TrafficLightStatus=2;

}

else?if(LightCurCount[3])

{

TrafficLightStatus=3;

}

else?

{

for(i=0;i<4;i++)

{

LightCurCount[i]=LightOrgCount[i];

}

TrafficLightStatus=0;

}

switch(TrafficLightStatus)

{

case?0:

{

NORTH_R_LIGHT(ON);

SOUTH_R_LIGHT(OFF);

NORTH_G_LIGHT(OFF);

SOUTH_G_LIGHT(ON);

NORTH_Y_LIGHT(OFF);

SOUTH_Y_LIGHT(OFF);

}

break;

case?1:

{

if(LightCurCount[1]%2)

{

NORTH_R_LIGHT(ON);

SOUTH_G_LIGHT(ON);

}

else

{

NORTH_R_LIGHT(OFF);

SOUTH_G_LIGHT(OFF);

}

NORTH_Y_LIGHT(ON);

SOUTH_Y_LIGHT(ON);

}

break;

case?2:

{

NORTH_R_LIGHT(OFF);

SOUTH_R_LIGHT(ON);

NORTH_G_LIGHT(ON);

SOUTH_G_LIGHT(OFF);

NORTH_Y_LIGHT(OFF);

SOUTH_Y_LIGHT(OFF);

}

break;

case?3:

{

if(LightCurCount[3]%2)

{

NORTH_G_LIGHT(ON);

SOUTH_R_LIGHT(ON);

}

else

{

NORTH_G_LIGHT(OFF);

SOUTH_R_LIGHT(OFF);

}

NORTH_Y_LIGHT(ON);

SOUTH_Y_LIGHT(ON);

}

break;?

default:break;?

}

RefreshDisplayBuf(LightCurCount[TrafficLightStatus]);

LightCurCount[TrafficLightStatus]--;

}

SegDisplay();

}

}

}

void?UartIRQ(void)interrupt?4?

{

static?UINT8?cnt=0;

static?LIGHT_VAL_EX?LightValEx;

if(RI)

{

RI=0;

?LightValEx.p[cnt++]=SBUF;

if(LightValEx.lv.Head?==?UART_MARKER)

{?

if(cnt>=5)

{

for(cnt=1;cnt<5;cnt++)

{

LightOrgCount[cnt-1]=LightValEx.lv.val[cnt];?

LightCurCount[cnt-1]=LightValEx.lv.val[cnt];

}

cnt=0;

UartPrintfString("设置交通灯完成\r\n");

}

}

else

{

cnt=0;

}

}

}

void?Timer0IRQ(void)?interrupt?1?

{

ET0 =?0;

TH0?=?(65536-TIMER0_INITIAL_VALUE)/256;

TL0?=?(65536-TIMER0_INITIAL_VALUE)%256;?//定时1MS

Timer0IRQEvent=1;

ET0 =?1;

}

=====================================================================

坐等拿分!

摘要: 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中 ,单片机往往作为一个核心部件来使用 ,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善 。 十字路口车辆穿梭 ,行人熙攘,车行车道,人行人道 ,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多 。本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出 ,显示时间直接通过8255的PC口输出至双位数码管);车辆闯红灯报警;绿灯时间可检测车流量并可通过双位数码管显示。本系统实用性强 、操作简单、扩展功能强。 关键词: 单片机 交通灯 闯红灯 检测车流量 1 引言 当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段 。但这一技术在19世纪就已出现了。 1858年 ,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯 。1868年 ,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上 ,安装了世界上最早的煤气红绿灯 。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止 ”,绿色表示“注意”。1869年1月2日 ,煤气灯爆炸,使警察受伤,遂被取消。 电气启动的红绿灯出现在美国 ,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上 。红灯亮表示“停止”,绿灯亮表示“通行 ”。 1918年 ,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯 ,司机遇红灯时按一下嗽叭,就使红灯变为绿灯 。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。红外光束能把信号灯的红灯延长一段时间 ,推迟汽车放行 ,以免发生交通事故。 信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力 ,减少交通事故有明显效果 。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行 ,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行 。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号 ,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。 2 单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种 。单片机微型计算机简称单片机 ,特别适用于控制领域,故又称为微控制器 。 通常,单片机由单块集成电路芯片构成 ,内部包含有计算机的基本功能部件:中央处理器 、存储器和I/O接口电路等。因此 ,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。 单片机经过1 、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展 ,它们的CPU功能在增强,内部资源在增多,引角的多功能化 ,以及低电压底功耗 。 3 芯片简介 3.1 MSC-51芯片简介 MCS-51单片机内部结构 8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器 、程序存储器(ROM)、数据存储器(RAM)、定时/计数器 、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器: 中央处理器(CPU)是整个单片机的核心部件 ,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制 、指挥和调度整个单元系统协调的工作 ,完成运算和控制输入输出功能等操作。 数据存储器(RAM) 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据 ,用户只能访问 ,而不能用于存放用户数据,所以,用户能使用的RAM只有128个 ,可存放读写的数据,运算的中间结果或用户定义的字型表 。 图1 程序存储器(ROM): 8051共有4096个8位掩膜ROM,用于存放用户程序 ,原始数据或表格。 定时/计数器(ROM): 8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。

求采纳

呈现单片机中的交通灯代码的核心内容解析,若这些分析对您的工作或学习有所助益 ,建议您将本站加入书签以便后续查阅 。

本文来自作者[中親調]投稿,不代表旋风格立场,如若转载,请注明出处:https://xfg666.cn/wenzhang/1484.html

(44)

文章推荐

  • 考公报名证件照要求

    考公报名证件照要求考公报名证件照要求相关话题近期引发广泛关注,我们特别整理了多维度信息,希望能为您提供有价值的参考。考公报名证件照要求如下:照片规格:jpg格式(如不满足请使用图像处理工具处理,不要直接改扩展名),高宽比约为4:3,建议像素:240(宽)*320(高),照片文件大小50~200

    2025年10月24日
    38300
  • 万能开挂辅助“松原长岭麻将开挂!分享用挂教程

    万能开挂辅助“松原长岭麻将开挂!分享用挂教程亲,松原长岭麻将开挂这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的通过添加客服微:本

    2025年11月10日
    18308
  • 必备绝技“悠闲麻将川南有挂吗”详细开挂教程

    必备绝技“悠闲麻将川南有挂吗”详细开挂教程悠闲麻将川南有挂吗是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加入我们(QQ群聊)免费测试,先看效果下载使用。手机打牌可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义手机打牌系统

    2025年11月11日
    22303
  • 实操教程“微乐刨么跑得快怎么开挂”(详细开挂教程)

    实操教程“微乐刨么跑得快怎么开挂”(详细开挂教程) 您好:微乐刨么跑得快怎么开挂这款游戏是可以开挂的,软件加微信【添加图中***群】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是

    2025年11月12日
    17319
  • 万能开挂辅助“桃乐斗牌开挂”详细开挂教程

    万能开挂辅助“桃乐斗牌开挂”详细开挂教程>>亲,桃乐斗牌开挂这款游戏原来确实可以开挂,详细开挂教程1、起手看牌2、随意选牌3、控制牌型4、注明,就是全场,公司软件防封号、防检测、 正版软件、非诚勿扰。2022首推。全网独家,诚信可靠,无效果

    2025年11月18日
    18322
  • 必备绝技“决胜麻将小程序开挂神器软件下载(透视)”确实可以开挂

    必备绝技“决胜麻将小程序开挂神器软件下载(透视)”确实可以开挂>>您好:决胜麻将小程序开挂神器软件下载,软件加微信【】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际

    2025年11月25日
    17305
  • 必备绝技“广西微乐麻将开挂免费!分享用挂教程

    必备绝技“广西微乐麻将开挂免费!分享用挂教程亲,广西微乐麻将开挂免费这款游戏原来确实可以开挂,详细开挂教程有意向的用户,请加入上面Q_Q群.1、起手看牌2、随意选牌3、控制牌型4、注明,就是全场,公司软件防封号、防检测、 正版软

    2025年11月25日
    15314
  • 万能开挂辅助“微乐推倒胡辅助”最新辅助详细教程

    万能开挂辅助“微乐推倒胡辅助”最新辅助详细教程无需打开直接搜索微信:本司针对手游进行,选择我们的四大理由:1、软件助手是一款功能更加强大的软件!无需打开直接搜索微信:2、自动连接,用户只要开启软件,就会全程后台自动连接程序,无需用户时时盯着软件。3、安全保

    2025年11月29日
    15301
  • 万能开挂辅助“微乐二人麻将破解版(透视)”确实可以开挂

    万能开挂辅助“微乐二人麻将破解版(透视)”确实可以开挂微乐二人麻将破解版是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加入我们(QQ群聊)免费测试,先看效果下载使用。手机打牌可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义

    2025年12月08日
    2316
  • 重大发现“天空麻将怎么开挂!分享用挂教程

    重大发现“天空麻将怎么开挂!分享用挂教程认准官方唯一联系方式 客服24小时在线关于!天空麻将怎么开挂是不是有挂,有没有挂!很多玩家在这款游戏中打牌都会发现很多玩家的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙

    2025年12月09日
    1320

发表回复

本站作者才能评论

评论列表(3条)

  • 中親調的头像
    中親調 2025年12月10日

    我是旋风格的签约作者“中親調”

  • 中親調
    中親調 2025年12月10日

    本文概览:关于单片机中的交通灯代码的讨论正在各大平台持续发酵,我们精心筛选了最新资讯,希望能为您带来实质性的帮助。#include<reg51.h>#define?ucha...

  • 中親調
    用户121008 2025年12月10日

    文章不错《单片机中的交通灯代码》内容很有帮助

联系我们

邮件:旋风格@gmail.com

工作时间:周一至周五,9:30-17:30,节假日休息

旋风格