⑴ 急求 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;
}
}
}