打印
[技术求助]

交通灯编程

[复制链接]
610|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dengdc|  楼主 | 2016-9-11 19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zhaoxqi| | 2016-9-11 19:42 | 只看该作者

操作定时器  中断   在中断服务函数里面操作IO

使用特权

评论回复
板凳
wuhany| | 2016-9-11 19:43 | 只看该作者
这个应该比较简单的编程,其实这个就是操作IO端口的问题,单片机来完成计算就可以了

使用特权

评论回复
地板
zhaoxqi| | 2016-9-11 19:44 | 只看该作者
C也可以,比较简单。

使用特权

评论回复
5
jiajs| | 2016-9-11 19:45 | 只看该作者
有了算法就好办了。语言很多都可以

使用特权

评论回复
6
zhenykun| | 2016-9-11 19:46 | 只看该作者
内容:1、程序目的:使用定时器学习 倒计时 红绿灯原理
           主要程序与倒计时相同
         2、硬件要求:数码管、晶振12M
                 3、P1口连接至LED用于显示红绿灯(p1接锁存器,八段数码管的位信号和断信号都通过p1口锁存起来,这样可以节省端口)
                 4、数码管用于显示时间
------------------------------------------------*/
#include<reg52.h>//包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义

sbit LACTCH1=P2^2;   
sbit LACTCH2=P2^3;
/*------------------------------------------------
                  全局变量
------------------------------------------------*/
bit red,green,yellow,turnred;//定义红绿黄灯标志位



code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
                                        //共阴数码管 0-9

unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
/*------------------------------------------------
               
------------------------------------------------*/
void delay(unsigned int cnt)
{
while(--cnt);
}
/*------------------------------------------------
               主程序
------------------------------------------------*/
main()
{
TMOD |=0x01;//定时器设置 10ms in 12M crystal
TH0=0xd8;
TL0=0xf0;
IE= 0x82;   //打开中断
TR0=1;

P1=0xfc;    //红灯亮
red =1;
while(1)
   {
   P0=Dis_Shiwei;//显示十位
   LACTCH1=1;    //锁存
   LACTCH1=0;
   P0=0xfe;
  LACTCH2=1;    // 锁存
   LACTCH2=0;
   delay(300);   //短暂延时
   P0=Dis_Gewei; //显示个位
   LACTCH1=1;    //锁存
   LACTCH1=0;
   P0=0xfd;
   LACTCH2=1;    // 锁存
   LACTCH2=0;
   delay(300);
   }

}
/*------------------------------------------------
              定时器0中断函数
------------------------------------------------*/
void tim(void) interrupt 1
{
static unsigned char second=60,count; //初值99

TH0=0xd8;//重新赋值
TL0=0xf0;
count++;
if (count==100)
     {
     count=0;
     second--;//秒减1
         if(second==0)
            {
       if(red)
              {
                   red=0;yellow=1;
           second=5;
                   P1=0xF3;//黄灯亮5秒
                  }
            else if(yellow && !turnred)
              {
                   yellow=0;green=1;
           second=50;
                   P1=0xCF;//绿灯亮50秒
                  }
            else if(green)
              {
                  yellow=1;green=0;
          second=5;
                  P1=0xF3;//黄灯亮5秒
                  turnred=1;
                  }
        else if(yellow && turnred)
              {
              red=1;yellow=0;
                  P1=0xFC;//红灯亮60秒
          second=60;
                  turnred=0;
                  }

           }
         Dis_Shiwei=tab[second/10];//十位显示值处理
     Dis_Gewei=tab[second%10]; //个位显示处理
     
    }
}

使用特权

评论回复
7
zhenykun| | 2016-9-11 19:47 | 只看该作者

主要是通过定时器来实现控制   这一块   我感觉应该相对比较可靠  需要考虑的因素还是很多的   必须要考虑清楚

使用特权

评论回复
8
dengdc|  楼主 | 2016-9-11 19:48 | 只看该作者
哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
9
dengdc|  楼主 | 2016-9-11 19:50 | 只看该作者
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈

使用特权

评论回复
10
Soraka| | 2016-9-11 22:01 | 只看该作者
定时器控制灯亮灭

使用特权

评论回复
11
airwill| | 2016-9-13 13:27 | 只看该作者
交通信号灯, 红绿黄灯.
其实定时控制并不复杂. 倒是给个用户界面, 实现用户可编程及排错功能应该有点复杂

使用特权

评论回复
12
firstblood| | 2016-9-16 16:40 | 只看该作者
单个交通等的控制根本不是杀难题的,难点在与一条马路上整个交通灯的控制问题

使用特权

评论回复
13
firstblood| | 2016-9-16 16:40 | 只看该作者
该系统的需要考虑非常多的因素的,合理要调整交通等的亮灭时间的

使用特权

评论回复
14
tongbu2015| | 2016-9-16 17:18 | 只看该作者
这个楼上说的是,整个系统的考虑就非常复杂了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

892

主题

13885

帖子

7

粉丝