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

黄灯保留3秒红灯绿灯保留15秒额谢谢了。。。... 黄灯保留3秒 红灯绿灯保留15秒 额 谢谢了。。。 展开
 我来答
没事来玩幽白
2014-03-16 · TA获得超过339个赞
知道小有建树答主
回答量:504
采纳率:0%
帮助的人:295万
展开全部

#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段的数码管显示时间。如果需要详细的继续追问。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谢意付清云
2014-03-16 · TA获得超过131个赞
知道答主
回答量:361
采纳率:0%
帮助的人:165万
展开全部
很简单,延时程序 调整下就ok了

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

} //约1秒延时

调用的时候调用 参数分别设为 3 15 就可以了
追问
额。。能不能附上电路图。。
追答
电路图网上找个         自己根据需要一下就好了    如果这个老兄都不会   单片机还一点都不会,再看看书吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
robotking乐园
2014-03-16
知道答主
回答量:25
采纳率:0%
帮助的人:18.7万
展开全部
#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--);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式