• 领导讲话
  • 自我介绍
  • 党会党课
  • 文秘知识
  • 转正申请
  • 问题清单
  • 动员大会
  • 年终总结
  • 工作总结
  • 思想汇报
  • 实践报告
  • 工作汇报
  • 心得体会
  • 研讨交流
  • 述职报告
  • 工作方案
  • 政府报告
  • 调研报告
  • 自查报告
  • 实验报告
  • 计划规划
  • 申报材料
  • 当前位置: 勤学考试网 > 公文文档 > 工作方案 > 正文

    基于proteus交通信号灯设计与仿真(1)

    时间:2020-11-10 04:36:50 来源:勤学考试网 本文已影响 勤学考试网手机站

    学 海 无 涯

    PAGE

    PAGE 1

    宁波理工学院

    专业综合课程实习

    课程论文

    题 目 基于proteus的交通信号灯设计与仿真

    项目成员 沈 毅

    专业班级 电气101

    指导教师 裘 君

    分 院 信 息

    完成日期 20013. 7.14

    目 录

    一、 题目及要求 4

    1.1 实验目的 4

    1.2 实验原理图 4

    二、软件设置 5

    三、硬件原理图 6

    四、软件流程图 7

    五、设计结果(仿真+实物) 8

    5.1状态一 8

    5.2状态二 8

    5.2状态三 9

    5.2状态四 10

    六、个人心得 10

    七、附件 10

    基于proteus的交通信号灯设计与仿真

    题目及要求

    实现一个如下基本功能的交通灯:按照常规我们假设一个十字路口为东西南北走向。初始状态为状态1,南北方向绿灯通车,东西方向红灯。经过一段时间(25S)转换状态2,南北方向绿灯闪几次转亮黄灯,延时5S,东西方向仍然红灯。再转换到状态3,东西方向绿灯通车,南北方向红灯。过一段时间(25S)转换到状态4,东西方向绿灯闪几次转亮黄等,延时5S,南北方向仍然红灯。最后循环至南北绿灯,东西红灯。在这些状态下,有时钟倒数计时。(35分)

    附加功能得分(15分)

    如按键、蜂鸣器等

    实验目的

    掌握MCS-51单片机定时器/计数器、外部中断、LED数码管显示及I/O口的综合应用。

    了解交通灯的工作原理及设计方法。

    掌握单片机应用系统分析、设计、调试方法。

    实验原理图

    图1 交通灯电路原理图(1)

    图2交通灯电路原理图(2)

    软件设置

    图3 软件仿真

    硬件原理图

    图4 硬件模块

    图5硬件连接

    软件流程图

    开始

    开始

    初始化

    初始化

    中断初始化

    中断初始化

    中断触发

    Y状态一0<N

    Y

    状态一

    0<N<=25

    1s中断

    1s中断

    N

    N

    N

    Number+1

    状态二Y25

    状态二

    Y

    25<N<=30

    NNN>60

    N

    N

    N>60

    状态三YYY30<N<=55

    状态三

    Y

    Y

    Y

    30<N<=55

    N状态四YN=1N55<N<=60

    N

    状态四

    Y

    N=1

    N

    55<N<=60

    设计结果(仿真+实物)

    5.1状态一

    状态1:南北方向绿灯通车,东西方向红灯。经过一段时间(25S),倒计时。

    图6 状态一

    5.2状态二

    状态2,南北方向绿灯闪几次转亮黄灯,延时5S,东西方向仍然红灯。

    图7 状态二

    5.2状态三

    状态3,东西方向绿灯通车,南北方向红灯,过一段时间(25S)倒计时。

    图8 状态三

    5.2状态四

    状态4,东西方向绿灯闪几次转亮黄等,延时5S,南北方向仍然红灯。

    图9 状态四

    个人心得

    通过keil与proteus和硬件的联合使用,对交通灯综合考虑,实现了红灯30s,绿灯25s,3s绿灯闪烁,2s黄灯亮的交通功能设计。

    七、附件

    #include<reg51.h>

    #define uchar unsigned char

    #define uint unsigned int

    //uint FUNC = 1 ; //0:数码管功能, 1:红绿灯功能

    uint T_Count= 0;

    uint number=0;

    uint a=0,a1=0,a2=0;

    uint b=0,b1=0,b2=0;

    sbit LED=P1^0;

    int LEDSHOW[10] = {0xC0,0xF9,0xA4,0xB0,0X99,0X92,0X82,0XF8,0X80,0x90};

    //#define LED P1^0

    //延时

    void DelayMS(uint x)

    {

    uchar i;

    while(x--)

    {

    for(i=0;i<120;i++);

    }

    }

    //主程序

    void main()

    {

    //定时器0中断初始化代码

    TMOD=0x00; //定时器0 工作方式0

    TH0=(8192-5000)/32; //5ms 定时

    TL0=(8192-5000)%32;

    IE=0x82; //允许T0 中断

    TR0=1;

    //开始循环

    while(1)

    {

    if(number<=25&&number>0)//状态一

    {

    //南北绿灯,东西红灯 东西 红黄绿 南北 红黄绿

    P1=0xde;

    //显示倒计时

    b=30-number+1;

    b1=b/10;

    b2=b%10;

    a=25-number+1;

    a1=a/10;

    a2=a%10;

    P2 = 0X01; / //南北1

    P0 = LEDSHOW[a1];

    DelayMS(5);

    P2 = 0X02; / //南北2

    P0 = LEDSHOW[a2];

    DelayMS(5);

    P2 = 0X04; / //东西1

    P0 = LEDSHOW[b1];

    DelayMS(5);

    P2 = 0X08; / //东西2

    P0 = LEDSHOW[b2];

    DelayMS(5);

    }

    if(number>25&&number<=30)//状态2

    { //南北绿闪烁几次转黄灯,东西继续红灯 东西 红黄绿 南北 红黄绿

    if(number>25&&number<=28)

    {

    if(number%2==1)

    P1=0xde;

    else P1=0xfe;}

    if(number>28&&number<=30)

    P1=0Xee;

    a=30-number+1; //显示

    a1=a/10;

    a2=a%10;

    P2 = 0X01;

    P0 = LEDSHOW[a1];

    DelayMS(5);

    P2 = 0X02;

    P0 = LEDSHOW[a2];

    DelayMS(5);

    P2 = 0X04;

    P0 = LEDSHOW[a1];

    DelayMS(5);

    P2 = 0X08;

    P0 = LEDSHOW[a2];

    DelayMS(5);

    }

    if(number>30&&number<=55)//状态3

    { //东西绿 南北红

    P1=0xf3; //东西 红黄绿 南北 红黄绿

    a=55-number+1; //显示

    a1=a/10;

    a2=a%10;

    b=60-number+1;

    b1=b/10;

    b2=b%10;

    P2 = 0X01;

    P0 = LEDSHOW[b1];

    DelayMS(5);

    P2 = 0X02;

    P0 = LEDSHOW[b2];

    DelayMS(5);

    P2 = 0X04;

    P0 = LEDSHOW[a1];

    DelayMS(5);

    P2 = 0X08;

    P0 = LEDSHOW[a2];

    DelayMS(5);

    }

    if(number>55&&number<=60)//状态4

    { //东西方向绿灯闪几次转亮黄等,延时5S,南北方向仍然红灯 东西 红黄绿 南北 红黄绿

    if(number>55&&number<=58)

    {

    if(number%2==1)

    P1=0xf3;

    else P1=0xf7;}

    if(number>58&&number<60)

    P1=0Xf5;

    a=60-number+1; //显示

    a1=a/10;

    a2=a%10;

    P2 = 0X01;

    P0 = LEDSHOW[a1];

    DelayMS(5);

    P2 = 0X02;

    P0 = LEDSHOW[a2];

    DelayMS(5);

    P2 = 0X04;

    P0 = LEDSHOW[a1];

    DelayMS(5);

    P2 = 0X08;

    P0 = LEDSHOW[a2];

    DelayMS(5);

    }

    }

    }

    //T0 中断函数

    void LED_Flash() interrupt 1

    {

    TH0=(8192-5000)/32; //恢复初值

    TL0=(8192-5000)%32;

    if(++T_Count==200) //1s 开关一次LED

    {

    number++;

    if(number>60)

    number=1;

    //FUNC = ++FUNC % 2;

    //LED=~LED;

    T_Count=0;

    }

    }

    • 考试时间
    • 范文大全
    • 作文大全
    • 课程
    • 试题
    • 招聘
    • 文档大全

    推荐访问