234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

    (玩电子) 电子技术学习与研究
    当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

    单片机交通灯设计

    作者:佚名   来源:本站原创   点击数:x  更新时间:2007年06月12日   【字体:

    交通灯控制系统设计
    摘要:本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成 。系统包括人行道、左转、右转、以及基本的一交通灯的一功能 。系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的一点亮时间以及根据具体情况手动控制等功能 。
    关键词:AT89S51,交通规则
    一、 方案比较、设计与论证
    1 电源提供方案
    为使模块稳定工作,须有可靠电源 。我们考虑了两种电源方案

    方案一:采用独立的一稳压电源 。此方案的一优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平 。
    方案二:采用单片机控制模块提供电源 。改方案的一优点是系统简明扼要,节约成本;缺点是输出功率不 高 。
    综上    所述,我们选择第二种方案 。
    2 显示界面方案
    该系统要求完成倒计时、状态灯等功能 。基于上    述原因 ,我们考虑了三种方案:
    方案一:完全采用数码管显示 。这种方案只显示有限的一符号№和数码字苻,无法胜任题目要求 。
    方案二:完全采用点阵式LED 显示 。这种方案实现复杂,且须完成大量的一软件工作;但功能强大,可方便的一显示各种英文字符,汉字,图形等 。
    方案三:采用数码管与点阵LED 相结合的一方法因 为设计既要求倒计时数字输出,又●要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息 。这种方案既满足系统功能要求,又●减少了系统实现的一复杂度 。权衡利弊,第三种方案可互补一二方案的一优缺,我们决定采用方案三以实现系统的一显示功能 。
    3 输入方案:
    题目要求系统能手动设灯亮时间、紧急情况处理,我们讨论了两种方案:
    方案一:采用8155扩展I/O 口及键盘,显示等 。该方案的一优点是:
    使用灵活可编程,并且有RAM,及计数器 。若用该方案,可提供较多I/O 口,但操作起来稍显复杂 。
    方案二: 直接在IO口线上    接上    按键开关 。因 为设计时精简№和优化了电路,所以剩余的一口资源还比较多,我们使用四个按键,分别是K1、K2、K3、K4 。
    由于该系统对于交通灯及数码管的一控制,只用单片机本身的一I/O 口就可实现,且本身的一计数器及RAM已经够用,故选择方案二 。
    二、理论分析与计算︻
    1.交通灯显示时序的一理论分析与计算︻
    对于一个交通路口来说,能在最短的一时间内达到最大的一车流量,就算︻是达到了最佳的一性能,我们称在单位时间内多能达到的一最大车流为车流量,用公式:车流量= 车流 / 时间 来表示 。

    先设定一些标号如图2-1 所示 。

    说明:此图为直方图,上    边为北路口灯,右边为东路口灯,下边为南路口灯,左边为西
    路口灯 。
    图2-2 所示为一种红绿灯规则的一状态图,分别设定为S1、S2、S3、S4,交通灯以这四
    的一状态为一个周期,循环执行(见图2-3) 。

    请注意图2-1b№和图2-1d,它们在一个时间段中四个方向都可以通车,这种状态能在
    一定的一时间内达到较大的一车流量,效率特别高 。
    依据上    述的一车辆行驶的一状态图,可以列出各个路口灯的一逻辑表,由于相向的一灯的一状态图
    是一样的一,所以只需写出相邻路口的一灯的一逻辑表;根据图2-3 可以看出,相邻路口的一灯它
    们的一状态在相位上    相差180° 。因 此最终只需写出一组S1、S2、S3、S4的一逻辑状态表 。

    如表2-1 所示 。

    表中的一“×”代表是红灯亮(也代表逻辑上    的一0),“√”是代表绿灯亮(也代表逻辑上    
    的一1),依上    表,就可以向相应的一端口送逻辑值 。

    2.交通灯显示时间的一理论分析与计算︻


    东西№和南北方向的一放行时间的一长短是依据路口的一各个方向平时的一车流量来设定,并且
    S1、S2、S3、S4各个状态保持的一时间之有严格的一对应关系,其公式如下所示 。
    T-S1+T-S2=T-S3
    T-S2=T-S4
    T-S1=T-S3
    我们可以依据上    述的一标准来改变车辆的一放行时间 。按照一般的一规则,一个十字路口可分

    为主干道№和次干道,主干道的一放行时间大于次干道的一放行时间,我们设定值时也应以此为参
    考 。
    三、电路图及设计文件
    1.灯控制电路设计
    由于32个LED 来实现红绿灯状态,若直接接在单片机的一口线,路口倒计时的一显示就不 
    能实现,所以本次设计中采用一种新型的一电路如图3-1 所示 。

    图中74LS04的一作用是倒相№和驱动,它输出的一电流大约48mA,实际测试发现足以满足要
    求,而且发光管也能达到足够的一亮度 。
    观察图可以看出:两组发光管(一组红、一组绿)由于反相器的一作用,其逻辑状态恰恰
    相反 。
    图中№和电阻串联的一二极管的一作用是为了分压,防止因 上    下两组发光管分压不 同导致逻辑
    的一错误 。
    共四组№和上    述相同的一电路分别代表东西南北四个方向的一红绿灯,使用两片74LS04 作为
    驱动 。
    2.倒计时显示电路设计
    前面已经分析过相向的一灯的一状态№和倒计时都是相同的一,所以为了节省,采用两组四个数码管
    作为倒计时的一显示;同时为了节省口资源,采用串口显示的一方式驱动数码管 。见图3-2 所
    示 。

    四、程序设计思路与流程图
    1.主程序流程图
    主程序中主要是一个死循环,不 停的一循环四个状态,如图4-1 所示 。

    2.按键子程序流程图
    它包含倒计时调整№和紧急状态两个状态 。
    主程序中放了一个按键的一判断指令,当有按键按下的一时候,程序就自动的一跳转到按键子
    程序处理 。当检测到K2键按下的一时候就自动返回到主程序 。
    当出现紧急的一情况的一时候,按下K3或者K4 就切换到紧急状态,当紧急事件处理完毕
    的一时候,按下K2,就可以返回正常状态 。

    五、测试、数据及结果分析
    1.状态灯显示测试
    当电路连接完毕后,将写好的一测试程序刷写到芯片内,K1 №和K2分别给端口送高电平№和
    低电平,通电即可检测 。
    2.数码管的一测试
    将串口的一№和电路板上    的一接口连接,将写好的一测试程序刷写到芯片内,开电源即可测试 。
    3.整体电路测试
    系统上    电,刷写好程序即可开始测试,观测一个周期(共计S1~S4四个状态,默认140
    秒)灯的一显示状态是否正常,同时观察倒计的一计数是否正常 。
    六、总结
    由于使用的一是单片机作为核心的一控制元件,使得电路的一可靠性比较高,功能也比较强大,
    而且可以随时的一更新系统,进行不 同状态的一组合 。
    但是在我们设计№和调试的一过程中,也发现了一些问题,譬如红灯№和绿灯的一切换还不 够迅
    速,红绿灯规则不 效率还不 是很高等等,这需要在实践中进一步完善 。
    参考文献
    [1] 李朝青.单片机原理及接口技术(修订版).北京:北京航空航天大学出版社,1998
    [2] 李广弟.单片机基础.北京:北京航空航天大学出版社,1992
    [3] 何立民.单片机应用技术大全.北京:北京航空航天大学出版社, 1994
    [4] 张毅刚. 单片机原理及接口技术.哈尔滨:哈尔滨工业大学出版社,1990
    [5] 谭浩强.单片机课程设计. 北京:清华大学出版社,1989
    Abstract
    This system is made up of single-chip microcomputer ,keyboard,lcd displaying module
    and Traffic lights system.The system includes pavement,left truning,right truning,and the basic
    traffic lights function.Excepting the basic traffic lights function,italso includes couting,time
    installing,emergency disposaling,speech cluing,lcd information displaying,adjusting the lighting
    time of lights based on different time and controlling with hand in accordance with circumstances
    and so on.

    附录 系统总体电路图

    1.满足南北向红绿灯亮,东西向红灯亮,占25秒——南北向黄灯亮,东西向红灯亮,占5秒——南北向红灯亮,东西向绿灯亮,占25秒——南北向红灯亮,东西向黄灯亮,占5秒 。如此循环,周而复始 。 2.十字路口要有数字显示,提示行人把握时间:当某方向绿灯亮时,置显示器为24,然后以每秒减1计数方式工作,直到减为0,绿灯灭,黄灯亮 。黄灯灭,红灯亮时,再次置显示器为29,并开始减计数,直到为0,十字路口红绿灯交换,完成一次工作循环 。
    3.可手动调整№和自动调整,夜间为黄灯闪耀 。

    下面是一个单片机交通灯程序

    /*
    ******************************************************************************************
    * *
    * Keil C 89S51 交通信号控制程序 *
    * (C) 234彩票代理版权所有 Dai_Weis@hotmail.com *
    * *
    ******************************************************************************************

    */
    #include "reg51.h"

    #define UINT unsigned int
    #define ULONG unsigned long
    #define UCHAR unsigned char

    /*
    信号灯变量
    南北方向绿灯
    sbit n_bike_g = P1^0; //自行车
    sbit n_right_g = P1^1; //右转
    sbit n_up_g = P1^2; //直行
    sbit n_left_g = P1^3; //左转 调头

    南北方向红灯
    sbit n_bike_r = P1^4; //自行车
    sbit n_right_r = P1^5; //右转
    sbit n_up_r = P1^6; //直行
    sbit n_left_r = P1^7; //左转 调头

    南北方向黄灯
    sbit n_bike_y = P3^0; //自行车
    sbit n_right_y = P3^1; //右转
    sbit n_up_y = P3^2; //直行
    sbit n_left_y = P3^3; //左转 调头


    东西方向绿灯
    sbit e_bike_g = P2^0; //自行车
    sbit e_right_g = P2^1; //右转
    sbit e_up_g = P2^2; //直行

    东西方向红灯
    sbit e_bike_r = P2^4; //自行车
    sbit e_right_r = P2^5; //右转
    sbit e_up_r = P2^6; //直行

    东西方向黄灯
    sbit e_bike_y = P3^4; //自行车
    sbit e_right_y = P3^5; //右转
    sbit e_up_y = P3^6; //直行
    */

    //延时
    void delay(UINT t, UINT s)
    {
    while (t)
    {
    UINT i;
    for (i = 0; i < s; i++)
    {
    }
    t --;
    }
    }

    //信号灯状态
    void time_x(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3)
    {
    P1 = P_P1;
    P2 = P_P2;
    P3 = P_P3;
    delay(150, 65535);
    }

    void time_s(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3, UCHAR P_P11, UCHAR P_P22)
    {
    UINT i;
    for (i = 0; i < 3; i ++)
    {
    P1 = P_P1;
    P2 = P_P2;
    delay(5, 65535);
    P1 = P_P11;
    P2 = P_P22;
    delay(5, 65535);
    }
    P1 = P_P1;
    P2 = P_P2;
    P3 = P_P3;
    delay(10, 65535);
    }

    //主程序
    void main()
    {
    P1 = P2 = P3 = 0x0;
    while (1)
    {
    time_x(0xA5, 0x38, 0x0);

    time_s(0xA4, 0x38, 0x1, 0xA5, 0x38);

    time_x(0x96, 0x52, 0x0);

    time_s(0x92, 0x52, 0x4, 0x96, 0x52);

    time_x(0x5A, 0x52, 0x0);

    time_s(0x50, 0x50, 0x2A, 0x5A, 0x52);

    time_x(0xF0, 0x25, 0x0);

    time_s(0xF0, 0x24, 0x20, 0xF0, 0x25);

    time_x(0xD2, 0x16, 0x0);

    time_s(0xD0, 0x10, 0x62, 0xD2, 0x16);

    }
    }
    给你一个定时控制的一信号系统,我只做的一简单的一测试,至于延时我用的一软件,你自己想办法 。^_^

     

    Dai_Weis 于 2005-5-4 13:43:23

    重新给你说明
    /*
    ***********************************************************************************
    * *
    * Keil C AT89S51 交通信号控制程序 *
    * (C) 234彩票代理版权所有 Dai_Weis@hotmail.com *
    * *
    ***********************************************************************************
    开发说明:
    固定时间信号变换,南北设置调头、左传、直行、右转、自行车 。
    东西设置左传、直行、右转、自行车 。
    时序状态:
    红 绿 红 绿
    序号 左 前 右 自 左 前 右 自 前 右 自 前 右 自
    1 1 0 1 0 0 1 0 1 1 1 1 0 0 0
    2 1 0 0 1 0 1 1 0 1 0 1 0 1 0
    3 0 1 0 1 1 0 1 0 1 0 1 0 1 0
    4 1 1 1 1 0 0 0 0 0 1 0 1 0 1
    5 1 1 0 1 0 0 1 0 0 0 1 1 1 0
    */
    另外修正个错误
    while (1)
    {
    time_x(0xA5, 0x70, 0x0);

    time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);

    发表评论】【告诉好友】【收藏此文】【关闭窗口
    上    一篇:数字频率计设计

    文章评论

    相关文章