求一段51单片机交通灯程序:1.东西红南北绿时间15s 2.东西黄灯闪烁5s 以上2段+上延时与计时器

求一段51单片机交通灯程序:1.东西红南北绿时间15s 2.东西黄灯闪烁5s 以上2段+上延时与计时器,第1张

RED_NS EQU P10

GREEN_NS EQU P11

YELLOW_NS EQU P12

RED_EW EQU P13

GREEN_EW EQU P14

YELLOW_EW EQU P15

FLASH_NS BIT 00H

FLASH_EW BIT 01H

TIME EQU 30H

TICK EQU 31H

;---------------------------------

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

MOV SP,#5FH

MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

MOV TICK,#20

MOV P1,#0FFH ;全部关

CLR FLASH_NS

CLR FLASH_EW

SETB TR0

SETB ET0

LOOP:

MOV TIME,#15

CLR RED_EW ;东西

CLR GREEN_NS ;南北绿

SETB GREEN_EW

SETB YELLOW_EW

SETB RED_NS

SETB YELLOW_NS

LOOP1:

MOV A,TIME

JNZ LOOP1

MOV TIME,#5

SETB FLASH_NS ;南北黄灯闪烁

LOOP2:

MOV A,TIME

JNZ LOOP2

CLR FLASH_NS

MOV TIME,#15

CLR RED_NS ;南北红

CLR GREEN_EW ;东西绿

SETB GREEN_NS

SETB YELLOW_NS

SETB RED_EW

SETB YELLOW_EW

LOOP3:

MOV A,TIME

JNZ LOOP3

MOV TIME,#5

SETB FLASH_EW ;东西黄灯闪烁

LOOP4:

MOV A,TIME

JNZ LOOP4

CLR FLASH_EW

SJMP LOOP

;------------------------------

T0ISR:

PUSH ACC

CLR TR0

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

JNB FLASH_NS,T0ISR1

CPL YELLOW_NS

SJMP T0ISR2

T0ISR1:

JNB FLASH_EW,T0ISR2

CPL YELLOW_EW

T0ISR2:

DEC TICK

MOV A,TICK

JNZ T0ISRE ;判1s到否

MOV TICK,#20

DEC TIME

T0ISRE:

POP ACC

RETI

;---------------------------------

END

#include <reg51h>

#include <stdioh>

#define uchar     unsigned char

#define uint      unsigned int

uchar h;

uint r=0;

uint s;

uchar code  dis[]={ 0Xc0,0Xf9, 0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff,};

/0//1//2//3//4//5//6//7//8//9//NULL/

void delay(uint c)

{

uint i,j;

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

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

}

void t0(void) interrupt 0 using 1   //interrupt 1

{

delay(2);

if(INT0==0)

{

r++;

if(r==2)

{

r=0;

}

r%=2;

if(r==0)

{

P0=0xeb;

P1=0x00;

P2=0xff;

}while(1)

{

if(INT0==0|INT1==0|T0==0)

{

delay(2);

if(INT0==0|INT1==0|T0==0)

break;

}

};

}

}

void t1(void) interrupt 2 using 1   //interrupt 2

{

delay(2);

if(INT1==0)

{

r++;

if(r==2)

{

r=0;

}

r%=2;

if(r==0)

{

P0=0xdd;

P1=0x00;

P2=0xff;

}while(1)

{

if(INT1==0|INT0==0|T0==0)

{

delay(2);

if(INT1==0|INT0==0|T0==0)

break;

}

};

}

}

void t2(void) interrupt 1 using 1   //interrupt 3

{

TH0=0xff;

TL0=0xff;

delay(2);

if(T0==0)

{

P0=0xdb;

P1=0x00;

P2=0xff;

}while(1)

{

if(INT0==0|INT1==0)

{

delay(2);

if(INT0==0|INT1==0)

break;

}

};

}

void main(void)

{

TMOD=0x06;

TH0=0xff;

TL0=0xff;

TR0=1;

EA=1;

EX0=1;

EX1=1;

ET0=1;

while(1)

{

P0=0xeb;

for(h=28;h>0;h--)

{

for(s=248;s>0;s--)

{

P1=0x00;

P2=0xff;

P1=0x01;

P2=dis[h/10];

delay(1);

P1=0x00;

P2=0xff;

P1=0x02;

P2=dis[h%10];

delay(1);

P1=0x00;

P2=0xff;

P1=0x04;

P2=dis[(h+2)/10];

delay(1);

P1=0x00;

P2=0xff;

P1=0x08;

P2=dis[(h+2)%10];

delay(1);

}

}

delay(248);

P0=0xf3;

for(h=3;h>0;h--)

{

delay(392);

P0=0xf3;

delay(1);

P1=0x00;

P2=0xff;

P1=0xaa;

P2=dis[(h-1)%10];

delay(600);

P0=0xfb;

}

delay(248);

P0=0xdd;

for(h=38;h>0;h--)

{

for(s=248;s>0;s--)

{

P1=0x00;

P2=0xff;

P1=0x01;

P2=dis[(h+2)/10];

delay(1);

P1=0x00;

P2=0xff;

P1=0x02;

P2=dis[(h+2)%10];

delay(1);

P1=0x00;

P2=0xff;

P1=0x04;

P2=dis[h/10];

delay(1);

P1=0x00;

P2=0xff;

P1=0x08;

P2=dis[h%10];

delay(1);

}

}

delay(248);

P0=0xde;

for(h=3;h>0;h--)

{

delay(392);

P0=0xde;

delay(1);

P1=0x00;

P2=0xff;

P1=0xaa;

P2=dis[(h-1)%10];

delay(600);

P0=0xdf;

}

delay(248);

}

}

以上就是关于求一段51单片机交通灯程序:1.东西红南北绿时间15s 2.东西黄灯闪烁5s 以上2段+上延时与计时器全部的内容,包括:求一段51单片机交通灯程序:1.东西红南北绿时间15s 2.东西黄灯闪烁5s 以上2段+上延时与计时器、基于51单片机控制交通灯的电路图与C语言程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9345476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存