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

作者&投稿:杜届 (若有异议请与网页底部的电邮联系)
求一单片机编程高手 有关红绿灯的问题~

你这个需要知道你的灯和输入信号用的哪个引脚啊
假设灯高电平亮
总共有红灯、黄灯、绿灯三种和一个输入引脚
假设引脚分别为P0.0、P0.1、P0.2、P1.0
#include
#define uchar unsigned char
sbit a=P0.0;
sbit b=P0.1;
sbit c=P0.2;
sbit d=P1.0;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); //延时函数
}
void main()
{
if(d==1)
{
a=1;
delay(20);
a=0;

b=1;
delay(5);
b=0;

c=1;
delay(40);
c=0;
}
else
{
c=1;
delay(8);
c=0

b=1;
delay(5);
b=0;

a=1;
}
}
这是我写的,希望对你有帮助

注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

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

#include <reg51.h>
sbit R=P1^0;//HONG
sbit W=P1^1;//HUANG
sbit L=P1^2;//LV
unsigned int a,b=0;
//unsigned char code c[]={0xfe,0xfc,0xfb};//1110,1100,1011
unsigned 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;//增加一个状态
        }
    }
}

以上代码可以优化,如下:


#include <reg51.h>
sbit R=P1^0;//HONG
sbit W=P1^1;//HUANG
sbit L=P1^2;//LV
unsigned int a,b=0;
unsigned char code c[]={0xfe,0xfD,0xfb,0xfd};
void timer10s () interrupt 1
{
    TH0=0xec;//5ms
    TL0=0x78;
    a++;
    if(TR1==1) TR1=0;

    if (a>=2000)
    {
        a=0;
        b++;
        if(b==4) b=0;
        TR1=1;
        TR0=0;
    }
}
void timer2s ()interrupt 3
{
    TH1=0xec;
    TL1=0x78;
    a++; 
    if(TR0==1) TR0=0;

    if (a>=400)
    {
        a=0;
        b++;
        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;
    a=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;
        }
    }
}


有程序流程图吗


不用单片机和其他什么芯片怎么做一个红绿蓝三灯交替闪烁的电路?
没问题,等下给你画电路图。成功了再给你黏贴图给你 不用什么芯片这个可能性太小了,能用芯片实现你所需功能的有很多种方法,我所给的未必是最简单的,但是可以用。你看看吧。

急求:51单片机 交通灯控制
LJMP T0_INT ;跳转到中断服务程序处 ORG 0013H ;外部中断1的中断程序入口地址 MAIN : MOV SP,#50H MOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断 MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1 MOV TH1,#00H ;T1计数器清零 MOV TL1,#...

急用!! 求大神 求单片机程序?
买一只带红绿蓝三种合一的LED,324运放用来调节亮度(也可以采用PWM调制不用运放(运放可以提高亮度)),看你的单片机是不是开漏输出,如果用PWM调制接大点的电容滤波后即可控制亮度 p0.1---(red)---|---led p0.2---(green)---|--+---led p0.3---(blue)---|--+--|---led = ...

急!!!求单片机8255交通灯控制课程设计报告
你的题目写的太简单了,我只能看出来ABC口的地址是一样的 底下是我的论文,倒计时是用LED做的,红绿灯是用发光二极管做的 你自己在里面截吧 单片机控制交通...道口交通灯指示采用高亮度红绿双色发光二极管,左拐、直行、右拐及行人各一个。当发光电流为6mA时,按公式R=(5-1.8)\/0.006计算,限流电阻应为510Ω.由于...

...用单片机5V和一低电平输出脚连可以发绿 但是》》》
电路本身很简单,中间一脚是公共脚接5V,剩下的两个脚分别对应两种颜色,无法点亮要么是该脚的电路有问题,要么就是发光管损坏。给你个等效电路一看就明白了。

单片机的交通灯控制
我说你直接用STC的51单片机,别郭天祥学两天你就明白了,只要你懂C语言就好了。元件是十分少:STC89C51*1 Max232*1 6~24M晶振一个(如果你买了单片机内部有晶振的话就不用了)12个LED灯。几片电容就OK了

高分求单片机课程设计报告
手边有一些你需要的关于单片机的论文设计资料 需要的话加QQ 晚上7点以后隐身在线,直接加就行,说明要的资料名字就好。嘿嘿 楼主 要是觉的好的话 可别忘了给分哦。

单片机交通灯程序每条代码的意思
ORG 0000H LJMP MAIN ORG 000BH ;中断程序入口地址 LJMP TIME_0 ORG 0040H MAIN:MOV IE,#82H MOV TCON , #10H MOV TH0, #3CH MOV TL0,#0AFH ;定时器T0初始化 MOV R1,#20 ;定时累积 RED:MOV R2,#30 ;R2为时间设定 LOOP1:MOV A,R2 JZ GREEN ;R2为0时转到GREEN处...

电路设计,电压高低控制红绿LED亮灭
只有用运放或比较器或单片机比较电压才准,你不想用也是可以实现的,但不是很准哦。我帮你设计了一个,如图所示:‍

51单片机程序修改
现在,你显示的是 num1,其范围是 0~60。可以把它的上限,改为 30,这就符合你的要求了。另外再增加一个变量 num2,其范围是 0~60。用它来控制红绿黄的交替变化,即可。void display(uchar ge,uchar shi){ if (num2 <= 25) { P1=0xfe;} else if (num2 <= 30) { P1=0...

越西县17186286051: 关于单片机简单的红绿灯程序问题 -
谯齐环尔: 代码修改如下,经keil编译,proteus仿真结果为 P1.0亮10秒,然后P1.1亮2秒,然后P1.2亮10秒,最后P1.0亮10秒,,,#include <reg51.h> sbit R=P1^0;//HONG sbit W=P1^1;//HUANG sbit L=P1^2;//LV unsigned int a,b=0;//unsigned char code c[...

越西县17186286051: 单片机最简单的交通灯程序设计 -
谯齐环尔: #include<reg52.h> sbit green=P2^0;//绿灯 sbit yellow=P2^1;//黄灯 sbit red=P2^2;//红灯 void main(void) {delay(); green=0; yellow=0; red=0; while(1) {green=1; delay(10000); green=0; yellow=1; delay(500); yellow=0; red=1; delay(10000); red=0; } } void delay(int a) {int i; for(i=o;i<a;i++); }

越西县17186286051: 单片机简单交通灯怎么编程?? -
谯齐环尔: 红、黄、绿. 用LED来显示. 有专门的控制系统, 细节不说了. 编程就是 if (red) // 如果是红灯 yellow = false; green = false; else if (yellow) // 如果是黄灯 green = true; car_crash = true; sleep(3); // 3秒 red = true; green = false; else // 绿灯 yellow = false; red = false; 这里可以把false理解为“不亮灯”或者熄灭状态, 而true就是亮灯状态, car_crash作为一个模拟说明还可以运行.

越西县17186286051: 单片机的红绿灯控制程序如何写啊 -
谯齐环尔: //-------------------------------------------------- //名称:LED模拟交通灯 //作者:彭伟《单片机C语言程序设计实训100例-基于8051+PROTEUS仿真》 //-------------------------------------------------- //说明:东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后亮红灯 // 红...

越西县17186286051: 单片机实验,交通灯程序如下,希望帮忙解答一下,如果老师问,具体该怎样回答为什么这样编程,谢谢 -
谯齐环尔: 程序很简单啊,就是定时,然后输出控制信号,估计是控制数码管显示吧,至于s[]数组里面的数的含义只有看到电路才能明白.定时器中断里面就干了一件事情,定时时间到了就改变显示内容.

越西县17186286051: 求高手给我编一个51单片机红绿灯程序 -
谯齐环尔: 你的设计不合常理.1、右转弯无需红绿灯;2、若用595作时间显示驱动,可节省大量端口.3、缺少A、B路通行时间、黄灯闪烁时间规定.

越西县17186286051: 单片机交通灯程序疑问 -
谯齐环尔: 单片机处理程序的时候,是单条指令执行的!若同时让灯和数码管亮的话,须使用定时器中断!让CPU在灯和数码管间来回的切换任务!切换的间隔差不多在100Ms左右,最佳的效果还是你自己测试一下为好!

越西县17186286051: 单片机控制交通灯的程序怎么写? -
谯齐环尔: 十字路口东西向和南北向都有红、黄、绿三种颜色的灯,东西向绿灯和南北向红灯同时亮50秒(最后的十秒要用LED显示倒计时)后,两个方向的黄灯亮3秒,;然后东西向红灯和南北向绿灯同时亮50秒(最后的十秒要用LED显示倒计时)后,两个方向的黄灯再亮3秒,如此实现循环.(注:我交通灯接的是P1口,LED的a、b、c、d、e、f、g端接的是P0口,接地是P2.6和P2.7)

越西县17186286051: 有没有单片机的简单交通灯的设计思路了例程? -
谯齐环尔: 先控制红灯亮,然后设定一定延时,然后变绿灯,然后设定一定延时,然后黄灯闪,然后变红灯,一个循环完成.可以自己加一个显示时间的数码管显示器.

越西县17186286051: 一个简单的单片机红外控灯程序,求解释和纠正错误(已经列出)... -
谯齐环尔: sbit d1=P1^0,d2=P1^2,d3=P1^3;//不能这应进行位定义.应改为:sbit d1=P1^0; sbit d2=P1^2; sbit d3=P1^3; 程序中的TR=1;应该是TR0 = 1;如果不是,那么TR这个变量在使用前就没有声明,所以发生错误.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网