⑴ 急求 c51单片机的红绿灯交通灯控制
还不错吧
⑵ 单片机汇编语言设计红绿灯~(很简单)看图!
http://blog.163.com/asm_c/blog/static/248203113201358090570/
参考。
⑶ 基于51单片机的红绿灯设计
ORG 0000H
MOV DPTR ,#0B00H ;选中8155的命令寄存器,P2.2接CE端,p2.1接I/O
MOV A,#01H ;命令寄存器设为01H=000000001B D0=1A口输出,D1=0B口输入
MOVX @DPTR,A
LOOP :MOV DPTR,#0B01H
LED0:MOV A,#0FFH ;第一组灯点亮
MOVX @DPTR,A
MOV R4,#09H
LOOP0:ACALL DELAY
DJNZ R4,LOOP0
MOV A,#11011110B
MOVX @DPTR,A
ACALL DELAY
ACALL DELAY
ACALL DELAY
LED1:ACALL DELAY ;第二组灯点亮
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
LED2:MOV R5,#09H ;第三组灯点亮
LOOP1:ACALL DELAY
DJNZ R5,LOOP1
MOV A,#11110011B
MOVX @DPTR,A
ACALL DELAY
ACALL DELAY
ACALL DELAY
SJMP LOOP
DELAY:MOV R3,#02H
LOP3:MOV R1,#85H
LOP1:MOV R2,#0FAH
LOP2:DJNZ R2,LOP2
DJNZ R1,LOP1
DJNZ R3,LOP3
RET
END
⑷ 单片机红绿灯的程序解释
每个人写的程序的都是五花八门的,你最起码应该把程序贴出来,总不能要求别人连程序都写出来。然后你找一些不明白的地方去网络提问或者去scdn发帖子。其实无感觉红绿灯无非就是用到定时器和发光二极管。还有LED显示器。你自己C语言如果过关的话自己肯定看的懂。
⑸ 单片机红绿灯名称
代表的正是他的指示,是一个程序中的底下程序加了到自然成的的条件。这挺好的,是不是?挺好的?单片机是一个挺好的!需要好好学习!
⑹ 单片机红绿灯编程
看贴图,有框图,有程序源代码,你还需要什么呢?只要录入后编译就可以了,或许需要一些简单的调试。
⑺ 高手!!单片机红绿灯程序
经过仿真的程序如下:
;----------------------------
ORG 0000H
MOV P0, #11111100B
MOV R4, #80
LCALL DL0D5S
MOV P0, #11100111B
MOV R4, #10
LCALL DL0D5S
MOV P0, #00111111B
MOV R4, #40
LCALL DL0D5S
SJMP 0000H
;----------------------------
DL0D5S:
LCALL DL500MS
DJNZ R4, DL0D5S
RET
;----------------------------
DL500MS:
MOV R5, #50
D0: MOV R6, #20
D1: MOV R7, #250
D2: DJNZ R7, D2
DJNZ R6, D1
DJNZ R5, D0
RET
;----------------------------
⑻ 求个89C51单片机红绿灯程序
data segmentioport equ 0c400h-0280hio8255c equ ioport+28ahio8255k equ ioport+28bhportc1 db 24h,44h,04h,44h,04h,44h,04h ;六个灯可能 db 81h,82h,80h,82h,80h,82h,80h ;的状态数据 db 0ffh ;结束标志data ends code segment assume cs:code,ds:datastart: mov cx,3000delay: loop delay mov ax,data mov ds,ax mov dx,io8255k mov al,80h out dx,al mov dx,io8255cre_on: mov bx,0 on: mov al,portc1[bx] cmp al,0ffh jz re_on out dx,al inc bx mov cx,2000h test al,21h jz de1 mov cx,0ffffh de1: mov di,0ffffh de0: dec di jnz de0 loop de1 push dx mov ah,06h mov dl,0ffh int 21h pop dx jz on exit: mov ah,4ch ;返回 int 21hcode ends end start
⑼ 单片机控制交通灯
ORG 0000H
STA: MOV P0,#11011011B ;干线亮绿灯,支线亮红灯
MOV P2,#0001000B ;选通LED
MOV P3,#11101111B ;K1列线置0
MOV R7,#3
STA1: JB P3.3,$ ;无按键等待
LCALL DELAY30MS ;去抖动
JB P3.3,STA1
JNB P3.3,$ ;等键释放
DJNZ R7,STA1
MOV R6,#200
STA2: LCALL DELAY30MS ;延时30MS
DJNZ R6,STA2 ;延时6秒
MOV P0,#10111011B ;干线亮黄灯,支线亮红灯
MoV R6,#100
STA3: LCALL DELAY30MS
DJNZ R6,STA3 ;延时3秒
MOV P0,#01111110B ;干线亮红灯,支线亮绿灯
MOV R5,#4
STA4: MOV R6,#200
STA5: LCALL DELAY30MS
DJNZ R6,STA5
DJNZ R5,STA4 ;延时24秒
MOV P0,#01111101B ;干线亮绿灯,支线亮黄灯
MOV R6,#100
STA6: LCALL DELAY30MS
DJNZ R6,STA6 ;延时3秒
LJMP STA
DELAY30MS:MOV R4,#55
DELAY:MOV R3,#250
DJNZ R3,$ ;1.085us(指令周期)*2*250+2=547.5us
DJNZ R4,DELAY
⑽ 关于单片机简单的红绿灯程序问题
代码修改如下,经keil编译,proteus仿真结果为 P1.0亮10秒,然后P1.1亮2秒,然后P1.2亮10秒,最后P1.0亮10秒,,,
#include<reg51.h>
sbitR=P1^0;//HONG
sbitW=P1^1;//HUANG
sbitL=P1^2;//LV
unsignedinta,b=0;
//unsignedcharcodec[]={0xfe,0xfc,0xfb};//1110,1100,1011
unsignedcharcodec[]={0xfe,0xfD,0xfb,0xfd};//1110,1101,1011,1101//红黄绿黄//修正黄灯的值,增加一个状态
voidtimer10s()interrupt1
{
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;//【增加】
}
}
voidtimer2s()interrupt3
{
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;//【增加】
}
}
voidmain()
{
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)
{
case0x00:P1=c[0];break;
case0x01:P1=c[1];break;
case0x02:P1=c[2];break;
case0x03:P1=c[3];break;//增加一个状态
}
}
}
以上代码可以优化,如下:
#include<reg51.h>
sbitR=P1^0;//HONG
sbitW=P1^1;//HUANG
sbitL=P1^2;//LV
unsignedinta,b=0;
unsignedcharcodec[]={0xfe,0xfD,0xfb,0xfd};
voidtimer10s()interrupt1
{
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;
}
}
voidtimer2s()interrupt3
{
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;
}
}
voidmain()
{
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)
{
case0x00:P1=c[0];break;
case0x01:P1=c[1];break;
case0x02:P1=c[2];break;
case0x03:P1=c[3];break;
}
}
}