单片机 用C语言 keil uVision2 编程 编一个红绿灯

黄灯保留3秒 红灯绿灯保留15秒 额 谢谢了。。。

第1个回答  2014-03-16

#include<AT89X52.H>
#define LED_D  P2
#define LED_S  P1
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
sfr P1M0=0xB2;
unsigned int m,i,post1,post2;
unsigned int k=0,nums=1,n=1;

void timer1() interrupt 1 using 1
{   
 i++;
 TH0=0XB1;    //初始化
 TL0=0XE0;   //初始化         
 post1=9-(i/50%10);
 post2=2-i/500; 
 m=i/25;
 if(m==60)
  i=0;
}
void initialize()
{
 P0=0XFF ;
 TMOD=0X01;
 TR0=1;
 TH0=0XB1;
 TL0=0XE0; 
}
void show()
{    switch(n)
    { case 1:
         LED_D=table[post1];
         LED_S=0x01;
      break;
      case 3:
         LED_D=table[post2];
         LED_S=0x02;
      break;
    }
 if(n++==4)
    n=1;
   switch(nums)
   {
    case 1:    
    if(m<52)
      P0=0XDE;
    if(m>=52&&m<59) 
    {P0_0=1;
     if(k++>=50000)
       {
        P0_1=!P0_1;
        k=0;
       }
  }
  if(m==59)
     nums=2;
  break;
      case 2:
    if(m<52)
       P0=0XF3;
    if(m>=52&&m<59) 
    {
     P0_3=1;
     if(k++>=50000)
     {
      P0_4=!P0_4;
        k=0;
   }
   }
  if(m==59)
     nums=1;
    break;
  default: break;
 } 
}
void main()
{
   initialize();
   EA=1;
   P1M0=0XF0;
   ET0=1;  
   TR0=1; 
   while(1)
   { 
     show(); 
   }
}

 

这是带数码管显示的红绿灯,主要用了四位8段的数码管显示时间。如果需要详细的继续追问。

第2个回答  2014-03-16
很简单,延时程序 调整下就ok了

void delay(int t)
{
unsigned int i, j;
j=t*60;
while(j--)
{
for(i=1000;i;i--);
}

} //约1秒延时

调用的时候调用 参数分别设为 3 15 就可以了追问

额。。能不能附上电路图。。

追答

电路图网上找个 自己根据需要一下就好了 如果这个老兄都不会 单片机还一点都不会,再看看书吧

第3个回答  2014-03-16
#include<reg52.h>
#define uchar unsigned char
void delayms(ms);
red=P0^0;
green=P0^1
yellow=P0^2;
int main(void)
{
while(1)

{

red=0;

delayms(15000);

red=1;

green=0;

delayms(15000);

green=1;

yellow=0;
delayms(3000);

}

}
return(0);
}
void delayms(ms)
{
uchar i;
for(ms;ms>0;ms--)
for(i=110;i>0;i--);
}本回答被提问者采纳
相似回答