一:关于单片机简单的红绿灯程序问题
代码修改如下,经keil编译,proteus仿真结果为 P1.0亮10秒,然后P1.1亮2秒,然后P1.2亮10秒,最后P1.0亮10秒,,,
#include
二:c51单片机c语言交通灯的程序
#include
#define uint unsigned int
#define uchar unsigned char
sbit spk=P3^0;
sbit k0=P3^2;
sbit k1=P3^7;
sbit k2=P3^6;
sbit red1=P0^0;
sbit yellow1=P0^1;
sbit green1=P0^2;
sbit red2=P0^3;
sbit yellow2=P0^4;
sbit green2=P0^5;
uchar shi,ge,temp=29,aa,i,bb,flag0=0,flag1=0;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管码
void delay(uint z);
void display();
void init()//初始化函数
{
P3=0xfe;
EA=1;
EX0=1;
EX1=1;
IT1=1;
IT0=1;
TMOD=0x11;
TH0=(65536-50000)/256;//定时初值50毫秒
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
}
void main()//主函数
{
init();
while(1)
{
display();
}
}
void delay(uint z)//延时子函数
{
uint x,y;
for(x=0;x for(y=0;y<110;y++); } void interrupt_0() interrupt 0//外部中断0,当k0按下时两路红的全亮 { TR0=!TR0; spk=1; P1=0xff; red1=0; red2=0; green1=1; green2=1; yellow1=1; yellow2=1; spk=0; } void interrup_1() interrupt 2//外部中断1,东西红灯亮或南北红灯亮 { if(k1==0) //当中断触发时,检测到k1按下时东西红灯亮 { TR0=!TR0; P1=0xff; red1=0; red2=1; green1=1; green2=0; yellow1=1; yellow2=1; } if(k2==0)//当中断触发时,检测到k2按下时南北红灯亮 { TR0=!TR0; P1=0xff; red1=1; red2=0; green1=0; green2=1; yellow1=1; yellow2=1; } } void timer0() interrupt 1//定时器,实现倒计时 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; if(aa==10) { aa=0; temp--; } if(flag1==0) { if((temp>5)&&(temp<30)) P0=0xde; if((......余下全文>> 注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 MOV P1,#0;置灯全暗 JNB P1.0,$;P1.0=0;时则等待通电 STA:SETB P1.1;点亮红灯 LCALL DEL;延时30S CLR P1.1;灭红灯 STEB P1.3;亮黄灯 LCALL DEL;延时5秒 SETB P1.2;亮绿灯 LCALL DEL;延时30S CLR P1.2;灭绿灯 STEB P1.3;亮黄灯 LCALL DEL;延时5秒 SJMP STA;转STA处 DEL:MO抚 R7,#240; DEL1:MOV R6,#250; DEL2:MOV R5,#250; DJNZ R5,$; DJNZ R6,DEL2; DJNZ R7,DEL1; RET; //-------------------------------------------------- //名称:LED模拟交通灯 //作者:彭伟《单片机C语言程序设计实训100例-基于8051+PROTEUS仿真》 //-------------------------------------------------- //说明:东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后亮红灯 // 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁 // 闪烁5次后亮红灯,东西向绿灯亮,如此重复 //--------------------------------------------------- #include #define uchar unsigned char #define uint unsigned int sbit RED_A=P0^0;//东西向指示灯 sbit YELLOW_A=P0^1; sbit GREEN_A=P0^2; sbit RED_B=P0^3;//南北向指示灯 sbit YELLOW_B=P0^4; sbit GREEN_B=P0^5; uchar Flash_count=0;Operation_type=1;//闪烁次数及操作类型变量 //----------------------------------------------------- //延时 //---------------------------------------------------- void DelayMS(uint x) { uchar i; while(x--)for(i=0;i<120;i++) } //-------------------梗------------------------------- //交通灯切换子程序 //--------------------------------------------------- void Traffic_light() { switch(Operation_type) { case 1://东西向绿灯南北向红灯亮 RED_A=1;YELLOW_A=1;GREEN_A=0; RED_B=0;YELLOW_B=1;GREEN_B=1; DelayMS(2000); Operation_type=2; break; case 2://东西向黄灯闪烁,绿灯关闭 DelayMS(300); GREEN_A=1; YELLOW_A=~YELLOW_A; //闪烁5次 if (++Flash_count!=10) return; Flash_count=0; Operation_type=3; break; case 3://南北向绿灯东西向红灯亮 RED_A=0;YELLOW_A=1;GREEN_A=1; RED_B=1;YELLOW_B=1;GREEN_B=0; DelayMS(2000); O......余下全文>> 你的设计不合常理。 1、右转弯无需红绿灯; 2、若用595作时间显示驱动,可节省大量端口。 3、缺少A、B路通行时间、黄灯闪烁时间规定。 51单片机关于红绿灯的C语言程序设 肯定非常不一样的 好的 仿真实例可以参考,可以直接仿真效果,试试。 at89c51 27p电容 10K电阻 12M晶振 按钮开关 10U电容 接插件(根据你需要) LED灯 C1815三极管(如果需要驱动的话) 面包板 线三:求个89C51单片机红绿灯程序
四:单片机:编写十字路口交通灯程序 10分
五:单片机的红绿灯控制程序如何写啊
六:求高手给我编一个51单片机红绿灯程序
七:51单片机关于红绿灯的C语言程序设计 35分
八:AT89C51单片机交通灯程序
九:单片机at89c51制作红绿灯所需要的元器件和编程的程序。。。。急