各位兄弟姐妹帮我编一个C语言程序,急用。
设计要求:从LED中选择三个表示红黄绿等并实现红绿灯交替点亮(红绿灯各30s,黄灯5s)、用两位数码管显示点亮的时间、在绿灯要灭前5秒钟变成黄灯闪烁。
是那种#include<reg52.h>这种。跪求跪求
邮箱[email protected]
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P3^0; //ä¸è¥¿åæ示ç¯
sbit YELLOW_A=P3^1;
sbit GREEN_A=P3^2;
sbit RED_B=P3^3; //åååæ示ç¯
sbit YELLOW_B=P3^4;
sbit GREEN_B=P3^5;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
//延æ¶åæ°ï¼éªç次æ°ï¼æä½ç±»ååé
uchar Flash_Count=0,Operation_Type=1,LEDsng,LEDsns,LEDewg,LEDews,discnt;
uint Time_Count=0,time;
uchar ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void displaysn()
{
LEDsng=((time-Time_Count)/20)%10;
LEDsns=((time-Time_Count)/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
void displayew()
{
LEDewg=((time-Time_Count)/20)%10;
LEDews=((time-Time_Count)/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
//å®æ¶å¨0 ä¸æå½æ°
void T0_INT() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
switch(Operation_Type)
{
case 1: //ä¸è¥¿å绿ç¯ä¸ååå红ç¯äº®
if((Time_Count%20)==0)displayew();
RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=2;
break;
case 2: //ä¸è¥¿åé»ç¯å¼å§éªçï¼ç»¿ç¯å ³é
LEDewg=0x0;
LEDews=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_A=~YELLOW_A;GREEN_A=0;
if(++Flash_Count!=10) return; //éªç
Flash_Count=0;
Operation_Type=3;
break;
case 3: //ä¸è¥¿å红ç¯ä¸ååå绿ç¯äº®
if((Time_Count%20)==0)displaysn();
RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=4;
break;
case 4: //åååé»ç¯å¼å§éªçï¼ç»¿ç¯å ³é
LEDsng=0x0;
LEDsns=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_B=~YELLOW_B;GREEN_A=0;
if(++Flash_Count!=10) return; //éªç
Flash_Count=0;
Operation_Type=1;
break;
}
}
void t1_isr() interrupt 3
{
TR1=0;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
switch(discnt)
{
case 0:
P2=0x02;
P0=ledtab[LEDewg];
break;
case 1:
P2=0x01;
P0=ledtab[LEDews];
break;
case 2:
P2=0x08;
P0=ledtab[LEDsng];
break;
case 3:
P2=0x04;
P0=ledtab[LEDsns];
break;
default:discnt=0;break;
}
discnt++;
discnt&=0x03;
}
void delay()
{
uint i;
for(i=0;i<1000;i++);
}
//主ç¨åº
void main()
{
TMOD=0x11; //T0 æ¹å¼1
EA=1;
ET0=1;
TR0=1;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
ET1=1;
time=600;
Time_Count=600;
Time_Count=0;
Operation_Type=1;
while(1)
{
if(KEY1==0) //æä¸ä¸å 1S
{
delay();
if(KEY1==0)
{
while(KEY1==0);
TR0=0;
time+=20;
LEDsng=(time/20)%10;
LEDsns=(time/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
}
if(KEY2==0) //æä¸ä¸å1S
{
delay();
if(KEY2==0)
{
while(KEY2==0);
TR0=0;
time-=20;
if(time==0)time=20;
LEDewg=(time/20)%10;
LEDews=(time/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
}
if(KEY3==0) //å¯å¨
{
delay();
if(KEY3==0)
{
while(KEY2==0);
TR0=1;
Time_Count=0;
}
}
}
}
追é®æä¹åä¸è¥¿ï¼ååçï¼
追çéä¾¿ä½ æä¹å®æé½å¯ä»¥åï¼æå¾å½ç¶æ¯ä¸ä¸ååãå·¦å³ä¸è¥¿ï¼è¿æ¯å½å®¶æ ååã
追é®æè¿ä¸ªè¦åå®éªï¼å°±æ¯ååºæé¢ç®é£ä¸ªææå°±å¯ä»¥äºï¼ä¸ç¨ä»ä¹ä¸è¥¿åå
追çæç»ä½ çè¿ä¸ªå°±å¯ä»¥ï¼å«å¤ï¼å¯ä»¥å»æä¸åï¼ä¸è¥¿å»ä¸ä¸ªï¼ååå»ä¸ä¸ªï¼æå°è¿ä¸ªåä½ é®ç®±å§ï¼proteus+ç¨åºã
追é®å¯ä»¥å¸®æå»æåï¼æèªå·±ä¸æãä¸ç¨ä¸è¥¿ååèµ°åãå°±åªè¦3个ç¯å°±å¯ä»¥äº