P1.0/P1.1/P1.2分别控制主干道的红、黄、绿灯P1.3/P1.4/P1.5分别控制次干道的红、黄、绿灯P1.6/P1.7驱动光电耦合器/P1.7为干道红灯亮输出0主干道绿灯亮41秒、亮0.5秒、灭0.5秒4次计45秒次干道绿灯亮27秒、亮0.5秒、灭0.5秒4次计31秒黄灯亮3秒****************************************************SEC EQU 36H 秒
DEDA EQU 37H 毫秒
ORG 0000H
SJMP START
ORG 0BHT0中断入口
JMP TIM0
ORG 30H
START:MOV SP,#46H
MOV A,#0FFH
MOV P1,A
MOV A,#0
MOV P0,A
MOV P2,A
MOV P3,A
MOV DEDA,#0
MOV SEC,#0
MOV TMOD,#11H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB EA
SETB ET0
SETB TR0
START1:NOP
NOP
MOV 0A6H,#01EH看门狗
MOV 0A6H,#0E1H看门狗
MOV A,#11101101B
MOV P1,A双方向黄灯亮3秒
BK1: MOV 0A6H,#01EH看门狗
MOV 0A6H,#0E1H看门狗
MOV A,SEC S
NOP
NOP
CJNE A,#3,BK1
MOV A,DEDA MS
NOP
NOP
CJNE A,#19,BK1
MOV A,#10110011B
MOV P1,A 主干道绿灯亮、次干道红亮MOV DEDA,#0
MOV SEC,#0B
K2: MOV 0A6H,#01EH看门狗 MOV 0A6H,#0E1H看门狗 MOV A,SECNOPNOPCJNE A,#41,BK2 CPL P1.2MOV R0,#8 BK3: MOV 0A6H,#01EH看门狗 MOV 0A6H,#0E1H看门狗 MOV A,DEDANOPNOPCJNE A,#10,BK3CPL P1.2MOV DEDA,#0DJNZ R0,BK3MOV A,#11101101BMOV P1,A 双方向黄灯亮3秒MOV DEDA,#0MOV SEC,#0BK4: MOV 0A6H,#01EH看门狗 MOV 0A6H,#0E1H看门狗 MOV A,SECNOPNOPCJNE A,#3,BK4 MOV A,DEDANOPNOPCJNE A,#19,BK4MOV A,#01011110BMOV P1,A 主干道红灯亮、次干绿道亮MOV DEDA,#0MOV SEC,#0BK5: MOV 0A6H,#01EH看门狗 MOV 0A6H,#0E1H看门狗 MOV A,SECNOPNOPCJNE A,#27,BK5CPL P1.5MOV R0,#8 BK6: MOV 0A6H,#01EH看门狗 MOV 0A6H,#0E1H看门狗 MOV A,DEDANOPNOPCJNE A,#10,BK6CPL P1.5MOV DEDA,#0DJNZ R0,BK6MOV DEDA,#0MOV SEC,#0JMP START1TIM0:PUSH ACC T0中断子程序 PUSH PSWMOV TL0,#0B0HMOV TH0,#3CHMOV 0A6H,#01EH看门狗MOV 0A6H,#0E1H看门狗 INC DEDA MSMOV A,DEDANOPNOPCJNE A,#14H,TT1MOV DEDA,#0INC SEC STT1:POP PSW POP ACCRETINOPNOPNOPAJMP START1SJMP $END
嘉定单片机是STC89C52RC这款常用51单片机,推荐用两个74HC573,输入全接P0;输出接16个LED负极(573有一定驱动能力,实际应用可以接LED正极,但是习惯上仍采用灌电流的驱动方式)然后LED另一极接正极,设573的所存分别用P3.7和P3.6控制,程序如下:#include<reg52.h>sbit suocun1=P3^7
sbit suocun2=P3^6
void delay(int z){
int x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
void main(){
char a
while(1)
{
suocun1=1
suocun2=0
for(a=0a<8a++)
{
P0=0x01<<1
delay(50)
}
suocun2=1
suocun1=0
for(a=0a<8a++)
{
P0=0x01<<1
delay(50)
}
}
}
我在KEIL4上编译0错误0警告
573的接法可以百度 datasheet 很简单的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)