单片机交流
直播中

小麦地

11年用户 1620经验值
私信 关注
[问答]

如何利用51单片机实现模拟交通灯控制?

如何利用51单片机实现模拟交通灯控制?

回帖(1)

邢党铿

2021-11-4 10:40:21
1. 实验目的

  

  • 学习模拟交通灯控制的实现方法;
  • 掌握Proteus硬件仿真与调试。

*2. 任务:

  

  • 根据要求编写程序,并写出原理性注释;
  • 将检查程序运行的结果,分析一下是否正确;
  • 完成所建工程的仿真及调试。

3. 实验内容及要求

  按照威廉希尔官方网站 要求在Protues中设计威廉希尔官方网站 图。编程实现如下功能:
用单片机端口作输出口,控制四个方向共12个发光二极管亮灭,模拟交通灯管理。功能描述如下:初始态为四个路口的红灯全亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后东西路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,再切换到东西路口方向,之后重复以上过程。





**
4
实验代码:


```c
**`#include
#include


#define PA         XBYTE[0x7FFC]   //PA端口地址
#define PB         XBYTE[0x7FFD]               
#define PC         XBYTE[0x7FFE]
#define COM         XBYTE[0x7FFF]


char code dx516[3] _at_ 0x003b;


unsigned char Second[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10};  
unsigned char count = 0, total = 0;


/**************8255初始化******************************/
void init_8255(void)
{
        COM = 0x80;        // C = out B=out A = out
        PA = 0xFF;
        PB = 0xFF;
}


/**************定时器1初始化******************************/
void init_T1(void)
{
        TMOD = 0x01; //定时器1,模式1
  TH1 = 0x4c; // 定时为50ms
  TL1 = 0x00;      
  ET1 = 1;  //允许定时器中断1
  EA = 1;        //开总中断
  TR1 = 1;        //启动定时器T1
}


//-------------------
// 函数名称: void delay_s(unsigned t)
// 函数功能: 利用定时器延时t*0.5秒子程序
//-------------------
void delay_s(unsigned char t)
{  
        TR1 = 1;//启动定时
        total = t * 10;
        count = 0;
        while(1)
        {
          if(count == total)//定时时间到
                {
                        count = 0;       
                        total = 0;
                        TR1 = 0;
                        return;
                }
        }
}


void timer1() interrupt 3       //定时器1
{     
        TR1 = 0;
        TH1 = 0x4c;           // 定时为50ms
        TL1 = 0x00;
        count++;
        TR1 = 1;
}


void main(void)
{
        unsigned char i = 0;
        init_8255();
        init_T1();
        while(1)
        {                       
                for(i = 10;i > 0;i--)
                {
                        PC = Second;                       
                        if(i < 4)
                        {
                                PA = 0xf6;        //东西绿灯亮
                                PB = 0xdb;//南北红灯亮                       
              delay_s(10);
              PA = 0xff;//交替闪烁
                                PB = 0xff;//交替闪烁
              delay_s(10);        
                        }
                        else
                        {
                                PA = 0xf6;        //东西绿灯亮
              PB = 0xdb;        //南北红灯亮
                                delay_s(10);
      }
                }
               
                for(i = 3;i > 0; i--)
                {
                        PC = Second;
                        PA = 0xed;//东西黄灯亮
                        PB = 0xed;//南北红灯亮                               
            delay_s(10);
                        PA = 0xff;//交替闪烁
                        PB = 0xff;//交替闪烁
            delay_s(10);
                }
         
                for(i = 10;i > 0;i--)
                {
                        PC = Second;                       
                        if(i < 4)
                        {
                                PA = 0xdb;//东西红灯亮
                                PB = 0xf6;        //南北绿灯亮
              delay_s(10);
                                PA = 0xff;  //红灯闪烁
              PB = 0xff;  //绿灯闪烁
              delay_s(10);        
                        }
                        else
                        {
                                PA = 0xdb;         //东西红灯亮
              PB = 0xf6;   //南北绿灯亮
                                delay_s(20);
      }
                }
               
                for(i = 3;i > 0;i--)
                {
                        PC = Second;
                        PA = 0xed; //东西黄灯亮
                        PB = 0xed;  //南北黄灯亮                               
            delay_s(10);
                        PA = 0xff;//黄灯闪烁
                        PB = 0xff;   
            delay_s(10);
                }
        }       
}


- 仿真结果


举报

更多回帖

发帖
×
20
完善资料,
赚取积分