打印
[技术求助]

交通灯怎么编程

[复制链接]
641|13
手机看帖
扫描二维码
随时随地手机跟帖
沙发
zhaoxqi| | 2018-4-13 16:59 | 只看该作者
操作定时器  中断   在中断服务函数里面操作IO

使用特权

评论回复
板凳
wuhany| | 2018-4-13 17:04 | 只看该作者

这个应该比较简单的编程,其实这个就是操作IO端口的问题,单片机来完成计算就可以了

使用特权

评论回复
地板
zhaoxqi| | 2018-4-13 17:06 | 只看该作者

C也可以,比较简单。

使用特权

评论回复
5
jiajs| | 2018-4-13 17:09 | 只看该作者

有了算法就好办了。语言很多都可以

使用特权

评论回复
6
zhenykun| | 2018-4-13 17:17 | 只看该作者

内容: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| | 2018-4-13 17:20 | 只看该作者
主要是通过定时器来实现控制   这一块   我感觉应该相对比较可靠  需要考虑的因素还是很多的   必须要考虑清楚

使用特权

评论回复
8
dengdc|  楼主 | 2018-4-13 17:26 | 只看该作者
哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
9
wyjie| | 2018-4-13 17:28 | 只看该作者

交通信号灯, 红绿黄灯.
其实定时控制并不复杂. 倒是给个用户界面, 实现用户可编程及排错功能应该有点复杂

使用特权

评论回复
10
jlyuan| | 2018-4-13 17:31 | 只看该作者
单个交通等的控制根本不是杀难题的,难点在与一条马路上整个交通灯的控制问题

使用特权

评论回复
11
heweibig| | 2018-4-13 17:36 | 只看该作者
该系统的需要考虑非常多的因素的,合理要调整交通等的亮灭时间的

使用特权

评论回复
12
zhenykun| | 2018-4-13 17:39 | 只看该作者
这个楼上说的是,整个系统的考虑就非常复杂了

使用特权

评论回复
13
dengdc|  楼主 | 2018-4-13 17:42 | 只看该作者
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈

使用特权

评论回复
14
airwill| | 2018-4-15 08:31 | 只看该作者
交通灯, 也就是定时的 IO 切换. 不过 用户功能可编程, 也许实现起来有点复杂

交通灯上的时间显示, 最近发现好多会显示 "00" 秒的, 很奇怪也很别扭

使用特权

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

本版积分规则

892

主题

13885

帖子

7

粉丝