单片机红绿灯程序

一:关于单片机简单的红绿灯程序问题

代码修改如下,经keil编译,proteus仿真结果为 P1.0亮10秒,然后P1.1亮2秒,然后P1.2亮10秒,最后P1.0亮10秒,,,

#include sbit R=P1^0;//HONGsbit W=P1^1;//HUANGsbit L=P1^2;//LVunsigned int a,b=0;//unsigned char code c[]={0xfe,0xfc,0xfb};//1110,1100,1011unsigned char code c[]={0xfe,0xfD,0xfb,0xfd};//1110,1101,1011,1101//红 黄 绿 黄//修正黄灯的值,增加一个状态void timer10s () interrupt 1{ if (a<2000) { TH0=0xec;//5ms TL0=0x78; a++; // b=0;//这里不能对b赋值 TR0=1; TR1=0;//【增加】 } if (a>=2000) { TH0=0xec; TL0=0x78; a=0; b++;//b=1; if(b==4) b=0;//【增加】 TR1=1; TR0=0;//【增加】 }}void timer2s ()interrupt 3{ if (a<400) { TH1=0xec; TL1=0x78; a++; TR1=1; TR0=0; } if (a>=400) { TH1=0xec; TL1=0x78; a=0; b++;//b=2; // if(b==4) b=0;//【增加】 TR0=1; TR1=0;//【增加】 }}void main (){ EA=1; ET0=1; ET1=1; TMOD=0X11; TH0=0xec;//5MS TL0=0x78; TH1=0xec; TL1=0x78; TR0=1; TR1=0; P1=c[0]; b=0;////【增加】 while (1) { switch (b) { case 0x00:P1=c[0];break; case 0x01:P1=c[1];break; case 0x02:P1=c[2];break; case 0x03:P1=c[3];break;//增加一个状态 } }}以上代码可......余下全文>>

二:c51单片机c语言交通灯的程序

#include

#define uint unsigned int

#define uchar unsigned char

sbit spk=P3^0;

sbit k0=P3^2;

sbit k1=P3^7;

sbit k2=P3^6;

sbit red1=P0^0;

sbit yellow1=P0^1;

sbit green1=P0^2;

sbit red2=P0^3;

sbit yellow2=P0^4;

sbit green2=P0^5;

uchar shi,ge,temp=29,aa,i,bb,flag0=0,flag1=0;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管码

void delay(uint z);

void display();

void init()//初始化函数

{

P3=0xfe;

EA=1;

EX0=1;

EX1=1;

IT1=1;

IT0=1;

TMOD=0x11;

TH0=(65536-50000)/256;//定时初值50毫秒

TL0=(65536-50000)%256;

ET0=1;

TR0=1;

}

void main()//主函数

{

init();

while(1)

{

display();

}

}

void delay(uint z)//延时子函数

{

uint x,y;

for(x=0;x

for(y=0;y<110;y++);

}

void interrupt_0() interrupt 0//外部中断0,当k0按下时两路红的全亮

{

TR0=!TR0;

spk=1;

P1=0xff;

red1=0;

red2=0;

green1=1;

green2=1;

yellow1=1;

yellow2=1;

spk=0;

}

void interrup_1() interrupt 2//外部中断1,东西红灯亮或南北红灯亮

{

if(k1==0) //当中断触发时,检测到k1按下时东西红灯亮

{

TR0=!TR0;

P1=0xff;

red1=0;

red2=1;

green1=1;

green2=0;

yellow1=1;

yellow2=1;

}

if(k2==0)//当中断触发时,检测到k2按下时南北红灯亮

{

TR0=!TR0;

P1=0xff;

red1=1;

red2=0;

green1=0;

green2=1;

yellow1=1;

yellow2=1;

}

}

void timer0() interrupt 1//定时器,实现倒计时

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

aa++;

if(aa==10)

{

aa=0;

temp--;

}

if(flag1==0)

{

if((temp>5)&&(temp<30)) P0=0xde;

if((......余下全文>>

三:求个89C51单片机红绿灯程序

注p0口为东西红灯

; p1口为东西黄灯

;p2口为东西绿灯

;p3南北红灯

;p4南北黄灯

;p5南北绿灯

;绿灯停留3s;黄灯闪烁5次,每次0.2s,红的停留4s

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:MOV DPTR,#B1

MOV R2,#4

MOV A,#0H

F3:MOV R1,A

MOVC A,@A+DPTR

JNB ACC.4,SS1 ;判断东西方向黄灯是否亮,若亮工转移到黄灯闪烁程序

JNB ACC.1,SS2 ;判断南北方向黄灯是否亮,若亮则转移到黄灯闪烁程序

MOV P1,A

LCALL DY1S

SS:MOV A,R1

INC A

DJNZ R2,F3

SJMP MAIN

SS1:MOV R0,#10

XH1:CPL ACC.4

MOV P1,A

LCALL DYS

DJNZ R0,XH1

SJMP SS

SS2:MOV R0,#10

XH2:CPL ACC.1

MOV P1,A

LCALL DYS

DJNZ R0,XH2

SJMP SS

DY1S:MOV R5,#30

DLP0:MOV R6,#100

DLP1:MOV R7,#250 ;F=6MHZ

DLP2:DJNZ R7,DLP2 ;2X250X2uS=1ms

DJNZ R6,DLP1 ;1x100=0.1S

DJNZ R5,DLP0 ;0.1X30=3s

RET

DYS:MOV R6,#200

DLP3:MOV R7,#250 ;F=6MHZ

DLP4:DJNZ R7,DLP4 ;2X250X1uS=500us=1ms

DJNZ R6,DLP3 ;1x200=0.2S

RET

B1: DB 11011110B,11101110B,11110011B,11110101B

END

四:单片机:编写十字路口交通灯程序 10分

MOV P1,#0;置灯全暗

JNB P1.0,$;P1.0=0;时则等待通电

STA:SETB P1.1;点亮红灯

LCALL DEL;延时30S

CLR P1.1;灭红灯

STEB P1.3;亮黄灯

LCALL DEL;延时5秒

SETB P1.2;亮绿灯

LCALL DEL;延时30S

CLR P1.2;灭绿灯

STEB P1.3;亮黄灯

LCALL DEL;延时5秒

SJMP STA;转STA处

DEL:MO抚 R7,#240;

DEL1:MOV R6,#250;

DEL2:MOV R5,#250;

DJNZ R5,$;

DJNZ R6,DEL2;

DJNZ R7,DEL1;

RET;

五:单片机的红绿灯控制程序如何写啊

//--------------------------------------------------

//名称:LED模拟交通灯

//作者:彭伟《单片机C语言程序设计实训100例-基于8051+PROTEUS仿真》

//--------------------------------------------------

//说明:东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后亮红灯

// 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁

// 闪烁5次后亮红灯,东西向绿灯亮,如此重复

//---------------------------------------------------

#include

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0;//东西向指示灯

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3;//南北向指示灯

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_count=0;Operation_type=1;//闪烁次数及操作类型变量

//-----------------------------------------------------

//延时

//----------------------------------------------------

void DelayMS(uint x)

{

uchar i;

while(x--)for(i=0;i<120;i++)

}

//-------------------梗-------------------------------

//交通灯切换子程序

//---------------------------------------------------

void Traffic_light()

{

switch(Operation_type)

{

case 1://东西向绿灯南北向红灯亮

RED_A=1;YELLOW_A=1;GREEN_A=0;

RED_B=0;YELLOW_B=1;GREEN_B=1;

DelayMS(2000);

Operation_type=2;

break;

case 2://东西向黄灯闪烁,绿灯关闭

DelayMS(300);

GREEN_A=1;

YELLOW_A=~YELLOW_A;

//闪烁5次

if (++Flash_count!=10) return;

Flash_count=0;

Operation_type=3;

break;

case 3://南北向绿灯东西向红灯亮

RED_A=0;YELLOW_A=1;GREEN_A=1;

RED_B=1;YELLOW_B=1;GREEN_B=0;

DelayMS(2000);

O......余下全文>>

六:求高手给我编一个51单片机红绿灯程序

你的设计不合常理。

1、右转弯无需红绿灯;

2、若用595作时间显示驱动,可节省大量端口。

3、缺少A、B路通行时间、黄灯闪烁时间规定。

七:51单片机关于红绿灯的C语言程序设计 35分

51单片机关于红绿灯的C语言程序设

肯定非常不一样的

好的

八:AT89C51单片机交通灯程序

仿真实例可以参考,可以直接仿真效果,试试。

九:单片机at89c51制作红绿灯所需要的元器件和编程的程序。。。。急

at89c51

27p电容

10K电阻

12M晶振

按钮开关

10U电容

接插件(根据你需要)

LED灯

C1815三极管(如果需要驱动的话)

面包板

线

扫一扫手机访问

发表评论