| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 588 人关注过本帖, 1 人收藏
标题:关于交通灯控制问题
只看楼主 加入收藏
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
结帖率:83.33%
收藏(1)
 问题点数:0 回复次数:0 
关于交通灯控制问题
程序代码:
#include<reg51.h>
#include<intrins.h>
sbit D1=P1^0;         //led灯引脚定义
sbit D2=P1^1;
sbit D3=P1^2;
sbit LS138A=P2^2;      //数码管引脚定义
sbit LS138B=P2^3;
sbit LS138C=P2^4;
void delay(unsigned int i);
unsigned char aa,num,num1,a;
unsigned int LedOut[2];
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  //0~9数模
void main()
{ unsigned char i;
   TMOD=0x01,TH0=0x3c,TL0=0xb0, EA=1;    //定时器初始化(50ms中断一次)
   ET0=1;
   TR0=1;
   num = 40;
  D1=1;D2=1;D3=0;                         //led灯初始化
   while(1)
   {  num1=num/2;
     LedOut[0]=Disp_Tab[num1/10];
     LedOut[1]=Disp_Tab[num1%10];   
     for( i=0; i<2; i++)  //实现8位动态扫描循环
     {    
      P0 = LedOut[i];  //将字模送到P0口显示
             
      switch(i)      //使用switch 语句控制位选  也可以是用查表的方式 学员可以试着自己修改                 
         {       
           case 0:LS138A=0; LS138B=0; LS138C=0; 
                     break;        
           case 1:LS138A=1; LS138B=0; LS138C=0;
                     break;                
         
         }
        
        delay(10);
      }
    
   }
}
void timer0(void) interrupt 1
 {
    TH0=0x3c,TL0=0xb0;
    aa++;
    if(aa == 10) 
     {                //如果到了0.5s
          aa = 0;
          num--;    
         if(num <= 6) D1 = ~D1;  //黄灯闪烁                         
         else if(a==2&&num==39)   //变量a是控制不能重如这个通道
           {
            D1 = 1;          //关闭黄灯.
            D2 = 1;          //关闭红灯.
            D3 = 0;          //打开绿灯.
            a=0;
          }
         if(num == 0)            
              {
                D1 = 1;               //关闭黄灯.
                D2 = 0;               //打开红灯.
                D3 = 1;               //关闭绿灯.
                num = 40;            //开始20s倒计时.
                a++;
              }   
    }
}

void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}
这怎么在灯交换时,它的秒数跳得不正常,望高手解决.......谢谢!
搜索更多相关主题的帖子: 定时器 led灯 include 交通灯 数码管 
2011-12-25 13:08
快速回复:关于交通灯控制问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021780 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved