基于51单片机十字路口交通灯_5s黄灯闪烁

目录标题

  • 基于51单片机十字路口交通灯_5s黄灯闪烁
    • 功能要求
    • 仿真图
    • 程序
      • 主要程序代码
      • 程序讲解
        • 倒计时的产生
        • 红黄绿灯状态处理
        • 倒计时显示处理
    • 资料清单

(程序+仿真+仿真视频)

仿真:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:J006

功能要求

交通灯运行状态:

(1)模式1:东西向红灯与南北向绿灯亮5s;

(2)模式2:南北向绿灯灭,黄灯闪烁5s(5次);

(3)模式3:东西向绿灯与南北向红灯各5s;

(4)模式4:东西向绿灯灭,黄灯闪烁5s(5次);

(5)具体秒数可在程序改数字实现。

仿真图

南北通行

东西通行

程序

主要程序代码

#include<reg52.h>
#include<intrins.h>//数据类型定义
typedef unsigned char uchar;
typedef unsigned int  uint;void led_sacn();
void delay_ms(ms);
void seg_disp(uchar number,uchar wei);#define ON   1    //LED给告电平亮灯
#define OFF  0    //LED给低电平灭灯//通用IO引脚分配
sbit W0=P3^4;
sbit W1=P3^5;
sbit W2=P3^6;
sbit W3=P3^7;sbit NS_G = P2^0;
sbit NS_Y = P2^1;
sbit NS_R = P2^2;
sbit WE_R = P2^3;
sbit WE_Y = P2^4;
sbit WE_G = P2^5;bit flag1s;
bit half_1sflag;
uchar one_sec_flag,main_road_time,secondary_road_time,half_sec_flag;
//1秒定时标志位 南北方向显示时间 东西方向显示时间
uchar state=0;//正常模式不同状态
uchar code seg_du[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};uchar main_green_straight_cnt=5,yellow_cnt =5,2sec_green_straight_cnt =5;
//南北方向直行绿灯时间            _黄灯时间      _东西方向绿灯时间void main()
{EA=1; //开总中断TMOD=0X01;//T0的工作模式为模式1TH0=0X4C;TL0=0X00;//11.0592M晶振 50ms定时初值ET0=1; //允许定时器1中断TR0=1;//启动定时器0
//  state=2;   while(1){   led_sacn();                     //LED和数码管显示,时刻刷新if(flag1s)                       //一秒刷新一次{flag1s=0;main_road_time--;            //红绿灯倒计时时间减secondary_road_time--;}if (half_1sflag){half_1sflag = 0;if(state == 0){//黄灯闪烁WE_Y =~WE_Y;}else if(state == 2){NS_Y =~NS_Y;}}}
}void led_sacn()
{if(main_road_time==0 || secondary_road_time==0)//当南北方向或者东西方向倒数到0,切换状态。//这一段程序只有倒计时为0才执行一次,执行完一次等下一次倒计时为0才再执行一次{switch(state)//改变红绿灯的状态{case 0:{state=1;//下次切换到下一个模式main_road_time=main_green_straight_cnt+yellow_cnt;//南北方向直行绿灯通行时间secondary_road_time=sec_green_straight_cnt;//东西方向红灯时间NS_G = ON;NS_Y = OFF;NS_R = OFF;WE_R = ON;WE_Y = OFF;WE_G = OFF;}break;case 1:{state=2;
//                  main_road_time = yellow_cnt;//南北方向直行黄灯时间secondary_road_time =yellow_cnt;NS_G = OFF;NS_Y = ON;NS_R = OFF;WE_R = ON;WE_Y = OFF;WE_G = OFF;    }break;case 2:{state=3;main_road_time=sec_green_straight_cnt;secondary_road_time=sec_green_straight_cnt+yellow_cnt;NS_G = OFF;NS_Y = OFF;NS_R = ON;WE_R = OFF;WE_Y = OFF;WE_G = ON;}break;case 3:{state=0;
//                  secondary_road_time=yellow_cnt;//黄灯时间main_road_time=yellow_cnt;NS_G = OFF;NS_Y = OFF;NS_R = ON;WE_R = OFF;WE_Y = ON;WE_G = OFF;}break;default:break;}}seg_disp(main_road_time/10,0);//显示W0控制的数码管 时刻刷新seg_disp(main_road_time%10,1);//显示W1控制的数码管seg_disp(secondary_road_time/10,2);//显示W2控制的数码管seg_disp(secondary_road_time%10,3);//显示W3控制的数码管}void seg_disp(uchar number,uchar wei) //数码管动态显示程序 wei代表数码管W0 W1 W2 W3的位选
{P0=0XFF;//清零,防止重影if(wei == 0){//显示第一位W0=0;W1=1;W2=1;W3=1;    P0=seg_du[number];delay_ms(2);W0=1;}if(wei == 1){//显示第二位W0=1;W1=0;W2=1;W3=1;    P0=seg_du[number];delay_ms(2);W1=1;}if(wei == 2){//显示第三位W0=1;W1=1;W2=0;W3=1;    P0=seg_du[number];delay_ms(2);W2=1;}if(wei == 3){//显示第四位W0=1;W1=1;W2=1;W3=0;    P0=seg_du[number];delay_ms(2);W3=1;}
}

程序讲解

主要的核心点是倒计时,主干道直行绿灯时间+黄灯时间=次干道红灯时间,

在次干道红灯的过程中,主干道完成了绿灯倒计时+黄灯倒计时两个步骤。

倒计时的产生

记住这个点就可以设计软件了。首先要有时间基础,倒计时从哪来呢?

一般两个来源:

1,延时

delay(1000ms);

通过死循环卡主软件的运行来达到延时效果,程序执行效率极低,不可取。

2,定时

通过定时器产生时基。软件设置50ms产生一次定时中断,在中断执行函数中做计数。

 EA=1;  //开总中断TMOD=0X01;//T0的工作模式为模式1TH0=0X4C;TL0=0X00;//11.0592M晶振 50ms定时初值ET0=1; //允许定时器1中断TR0=1;//启动定时器0

50ms执行一次中断函数,通过one_sec_flag累加到20判断时间过去了一秒。设置一秒标志位flag1s置一。

void Timer0() interrupt 1
{TH0=0X4C;TL0=0X00;//11.0592M晶振 50ms定时初值if(++half_sec_flag>10){half_1sflag = 1;half_sec_flag = 0;}if(++one_sec_flag<20){return;//提前结束函数}one_sec_flag=0;flag1s=1;
}

在主函数while循环里判断标志位,如果是1,则倒计时计数值减一,即完成了倒计时的软件设计思路

    if(flag1s)                       //一秒刷新一次{flag1s=0;main_road_time--;            //红绿灯倒计时时间减secondary_road_time--;}

红黄绿灯状态处理

交通灯状态实际上分为四个状态:

1.主干道绿灯通行,次干道红灯

2.主干道黄灯通行,次干道红灯

3.主干道红灯,次干道绿灯通行

4.主干道红灯,次干道黄灯通行

做一个状态机,设置四个状态,在四个状态的变化中,设置红绿黄灯的亮和灭实现基础交通灯运行逻辑

if(main_road_time==0 || secondary_road_time==0)//当南北方向或者东西方向倒数到0,切换状态。//这一段程序只有倒计时为0才执行一次,执行完一次等下一次倒计时为0才再执行一次{switch(state)//改变红绿灯的状态{case 0:{state=1;//下次切换到下一个模式main_road_time=main_green_straight_cnt+yellow_cnt;//南北方向直行绿灯通行时间secondary_road_time=sec_green_straight_cnt;//东西方向红灯时间NS_G = ON;NS_Y = OFF;NS_R = OFF;WE_R = ON;WE_Y = OFF;WE_G = OFF;}break;case 1:{state=2;
//                  main_road_time = yellow_cnt;//南北方向直行黄灯时间secondary_road_time =yellow_cnt;NS_G = OFF;NS_Y = ON;NS_R = OFF;WE_R = ON;WE_Y = OFF;WE_G = OFF;    }break;case 2:{state=3;main_road_time=sec_green_straight_cnt;secondary_road_time=sec_green_straight_cnt+yellow_cnt;NS_G = OFF;NS_Y = OFF;NS_R = ON;WE_R = OFF;WE_Y = OFF;WE_G = ON;}break;case 3:{state=0;
//                  secondary_road_time=yellow_cnt;//黄灯时间main_road_time=yellow_cnt;NS_G = OFF;NS_Y = OFF;NS_R = ON;WE_R = OFF;WE_Y = ON;WE_G = OFF;}break;default:break;}}seg_disp(main_road_time/10,0);//显示W0控制的数码管 时刻刷新seg_disp(main_road_time%10,1);//显示W1控制的数码管seg_disp(secondary_road_time/10,2);//显示W2控制的数码管seg_disp(secondary_road_time%10,3);//显示W3控制的数码管

倒计时显示处理

实际上倒计时显示就是显示main_road_time–; secondary_road_time–;设计函数通过数码管分别显示主干道的main_road_time和次干道的secondary_road_time即可

     seg_disp(main_road_time/10,0);//显示W0控制的数码管seg_disp(main_road_time%10,1);//显示W1控制的数码管seg_disp(secondary_road_time/10,2);//显示W2控制的数码管seg_disp(secondary_road_time%10,3);//显示W3控制的数码管

资料清单

资料下载

基于51单片机十字路口交通灯_5s黄灯闪烁相关推荐

  1. 基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s

    基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s (程序+仿真+参考报告) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号J011 目录标题 基于5 ...

  2. 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)

    基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J013 目录标题 基于51单片机十字路口 ...

  3. 基于51单片机十字路口红绿灯交通灯+紧急模式

    基于51单片机十字路口红绿灯交通灯 +无黄灯+紧急 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J010 目录标题 基于51单片机十字路口红绿灯交 ...

  4. 【019】基于51单片机的交通灯Proteus仿真设计

    一.资料内容 (1).基于51单片机的交通灯proteus仿真设计一份: (2).基于51单片机的交通灯proteus仿真设计keli源代码一份: (3).基于51单片机的交通灯proteus仿真设计 ...

  5. 毕业设计 基于51单片机无线蓝牙APP控LED灯亮灭亮度设计

    基于51单片机无线蓝牙APP控LED灯亮灭亮度设计 1.项目简介 1.1 系统构成 1.2 系统功能 2.部分电路设计 2.1 LED信号指示灯电路设计 2.2 蓝牙模块 3.部分代码展示 3.1 串 ...

  6. c语言爱心灯制作步骤,基于51单片机设计的心形花样灯(PCB+Proteus仿真+源程序+设计报告)...

    设计了一个基于51单片机的心形花样灯电路,该电路可以实现32个LED灯循环闪亮.依次熄灭.对角闪亮.对角熄灭.间隔闪亮.间隔熄灭等多种功能,可以显示42种不同形式的变化效果.该电路主要由单片机芯片ST ...

  7. 基于51单片机的交通灯控制系统课程设计(含proteus仿真图及代码)

    一.设计要求: 1,十字路口的交通控制系统指挥着人和各种车辆的安全运行,对交叉口实行科学的管理与控制是交通控制工程的重要研究课题,是保障交叉口的交通安全和充分发挥交叉口的通行能力的重要措施,是解决城市 ...

  8. 基于51单片机的交通灯(资源链接见末尾)

    1.控制要求   (1) 东西南北双向红绿灯显示,红灯30s,绿灯27s,黄灯闪烁3s. (2)夜间模式:黄灯闪烁 (3)禁行模式:一侧红灯,一侧绿灯 (4)时间调节:改变红绿灯时间 2.仿真 (1) ...

  9. 基于51单片机十字路口红绿灯管理系统

    设计要求 基本要求 ①单片机外接多个七段数码管和红黄绿LED: ② 实现基本的十字路口红绿灯管理: ③在每种颜色的灯在结束的10s内,显示倒计时时间: ④能够调节每种颜色灯闪烁的时间. 方案论证 方案 ...

最新文章

  1. 三百年前的AI骗局:骗过美国总统和普鲁士大帝的国际象棋AI
  2. 如何选择PDU电源配套机柜?
  3. Python字符串格式化f-string格式
  4. 5 hbase-shell + hbase的java api
  5. PHP全栈开发(五):PHP学习(1.基础语法)
  6. vue预加载动态生成runtime.js_预渲染 prerender-spa-plugin 避坑指南
  7. Eclipse如何卸载插件
  8. MS SQL查询库、表、列数据结构信息汇总
  9. 简述php和web交互过程,PHP与Web页面交互操作实例分析
  10. oracle numlist,oracle sql str2numlist numtabletype
  11. Media Player Classic - HC 源代码分析 5:关于对话框 (CAboutDlg)
  12. classmethod作用
  13. 毕设题目:Matlab图像修复
  14. 【虚拟机装黑苹果(第三弹)】macOS安装镜像格式转换(dmg转iso,非UltraISO方法)
  15. 计算机绘图中级,计算机绘图(中级)
  16. Babylonjs 官网demo预览图合集整理 带说明
  17. Cross-Lingual NER Using Parallel Corpus: A New Approach Using XLM-RoBERTa Alignment
  18. building sasl.wrapper extention
  19. 基于matlab的锁相环频率合成器,基于MATLAB锁相环.ppt
  20. 【温故而知新】JavaWEB回顾(八)

热门文章

  1. 自定义8583模板,打包解包,使用j8583包
  2. NEFU 大一寒假培训【一】二维数组、结构体
  3. android手机游戏-三国无双(二)
  4. 使用jira管理Scrum敏捷项目实战(四)jira自定义电子看板、敏捷看板、KANBAN配置
  5. CSS3实现径向渐变
  6. uniapp 下载文件却变成了跳转
  7. 稻盛和夫的经营十二条
  8. 使用长角牛演示:防止ARP被攻击的原理和配置----------划水也别忘记学着玩
  9. 故障电弧检测技术现状及难点
  10. 《乌合之众》中30句精华