介绍

单片机型号: 普中89C51

​结合按键和LED,设计十字路口交通灯系统。绿灯和红灯10s,黄灯3s,绿灯最后闪烁3s,按键可让红灯提前结束。

设计步骤

  1. 选用开发板上两组三颗led分别作为红灯、黄灯、绿灯,列出交通灯亮灭所有状态

  2. 配置定时器0,定时 1ms产生一次中断,在中断函数中累计次数切换交通灯状态

  3. 配置外部中断0,按键触发并消抖,在中断函数中让交通灯状态提前过渡。

交通灯状态

共六种:

南北方向绿灯,东西方向红灯

南北方向绿灯闪烁,东西方向红灯

南北方向黄灯,东西方向红灯

南北方向红灯,东西方向绿灯

南北方向红灯,东西方向绿灯闪烁

南北方向红灯,东西方向黄灯

本实验南北方向使用D1-D3,东西方向使用D6-D8

流程图

代码

/*
Author: Richer
*/#include "reg52.h"typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8;sbit KEY3=P3^2;//定义十字交通灯控制脚
sbit LED_NS_R=P2^0;                    //南北方向
sbit LED_NS_Y=P2^1;
sbit LED_NS_G=P2^2;                    sbit LED_EW_R=P2^5;                    //东西方向
sbit LED_EW_Y=P2^6;
sbit LED_EW_G=P2^7;                    //使用宏定义十字交通灯六种状态
#define STATE_NS_G      0       //南北方向绿灯
#define STATE_NS_G_E    1       //南北方向绿灯闪烁
#define STATE_NS_Y      2       //南北方向黄灯
#define STATE_EW_G      3       //东西方向绿灯
#define STATE_EW_G_E    4       //东西方向绿灯闪烁
#define STATE_EW_Y      5       //东西方向黄灯//南北绿灯时长,东西绿灯时长,绿灯闪烁时长,黄灯时长(单位:秒)
u8 NS_G_TIME=10, EW_G_TIME=10, G_E_TIME=3, Y_TIME=3;u8 state;   //当前状态
u16 i;      //计数(ms)void delay_ms(u16 ms)
{u16 i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);
}void time0_init(void)      //定时器 0 中断配置函数
{   TMOD|=0X01;TH0=0XFC;              //定时 1msTL0=0X18;ET0=1; EA=1;  TR0=1;
}void exti0_init(void)      //外部中断 0 配置函数
{IT0=1;                    //下降沿EX0=1;EA=1;
}void led()         //交通灯状态显示
{switch(state){case STATE_NS_G: LED_NS_R=1;LED_NS_Y=1;LED_NS_G=0;LED_EW_R=0;LED_EW_Y=1;LED_EW_G=1;break;case STATE_NS_G_E:    LED_NS_R=1;LED_NS_Y=1;LED_NS_G=~LED_NS_G;LED_EW_R=0;LED_EW_Y=1;LED_EW_G=1;delay_ms(100);break;case STATE_NS_Y:    LED_NS_R=1;LED_NS_Y=0;LED_NS_G=1;LED_EW_R=0;LED_EW_Y=1;LED_EW_G=1;break;case STATE_EW_G:  LED_NS_R=0;LED_NS_Y=1;LED_NS_G=1;LED_EW_R=1;LED_EW_Y=1;LED_EW_G=0;break;case STATE_EW_G_E:    LED_NS_R=0;LED_NS_Y=1;LED_NS_G=1;LED_EW_R=1;LED_EW_Y=1;LED_EW_G=~LED_EW_G;delay_ms(100);break;case STATE_EW_Y:    LED_NS_R=0;LED_NS_Y=1;LED_NS_G=1;LED_EW_R=1;LED_EW_Y=0;LED_EW_G=1;break;}
}void main()            //主函数
{   time0_init();   exti0_init();       state=STATE_NS_G;  //初始化交通灯状态while(1){led();}
}void time0() interrupt 1 //定时器 0 中断函数
{TH0=0XFC; //定时 1msTL0=0X18;i++;if(i==NS_G_TIME*1000-G_E_TIME*1000) state=STATE_NS_G_E;else if(i==NS_G_TIME*1000) state=STATE_NS_Y;else if(i==NS_G_TIME*1000+Y_TIME*1000) state=STATE_EW_G;else if(i==NS_G_TIME*1000+Y_TIME*1000+EW_G_TIME*1000-G_E_TIME*1000) state=STATE_EW_G_E;else if(i==NS_G_TIME*1000+Y_TIME*1000+EW_G_TIME*1000) state=STATE_EW_Y;else if(i==NS_G_TIME*1000+Y_TIME*1000+EW_G_TIME*1000+Y_TIME*1000) {state=STATE_NS_G;i=0;}
}void exti0() interrupt 0 //外部中断 0 中断函数
{ delay_10us(1000); //消抖if(KEY3==0)           //再次判断 K3 键是否按下{switch(state){case STATE_NS_G: i=NS_G_TIME*1000-G_E_TIME*1000-1;break; case STATE_EW_G: i=NS_G_TIME*1000+Y_TIME*1000+EW_G_TIME*1000-G_E_TIME*1000-1;break;default:break;}       }
}

运行结果

51单片机实现十字交通灯相关推荐

  1. 51单片机LED模拟交通灯

    51单片机LED模拟交通灯 文章目录 51单片机LED模拟交通灯 实验环境 仿真图 代码解析 效果演示 实验环境 实验软件: Keil5 + Proteus7 实验元件: AT89C51 * 1, L ...

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

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

  3. B003 - 基于51单片机的蓝牙交通灯车流量控制系统

    摘要 十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊.那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统.交通信号灯控制方式很多.本系统采用STC89C52单片机以及单片机最小系 ...

  4. 基于51单片机的十字路口交通灯系统

    1 设计名称 基于51单片机的十字路口交通灯系统(C语言.Proteus开发环境) 2 设计要求 1. 基于51系列单片机设计一个十字路口交通灯控制系统,用于模拟道路十字路口交通灯实际运行的场景. 2 ...

  5. 51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...

    /********************************************************************** 51单片机数码管倒计时模拟交通灯汇编程序 LED数码管为 ...

  6. 基于51单片机的简易交通灯仿真代码讲解

    J028 51单片机简易交通灯易懂版_仿真+代码+报告讲解 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 目录标题 工作状态 仿真图 程序 倒计时的产生 红黄 ...

  7. 基于51单片机的智能化交通灯控制系统防止堵车疏散系统方案原理图程序设计

    硬件电路的设计 (末尾附文件) 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+LED灯指示电路+红外避障传感器电路+lcd1602显示+电源电路组成. ...

  8. C语言交通灯数码管,51单片机数码管交通灯程序

    本程序的pdf格式的原理图下载: http://www.51hei.com/f/ks51.pdf  ,是在51hei单片机开发板上面做的,只需要看数码管部分的原理图即可 其他的可以忽略. /** ** ...

  9. 带注释的c51汇编语言,51单片机汇编语言实现交通灯 代码有详细注释

    ORG 0000H;程序起始地址 LJMP START;初始化标号 ORG 0003H;外部中断地址--东西紧急按钮触发 LJMP DXJJ;东西紧急标号 ORG 0013H;外部中断地址--南北紧急 ...

最新文章

  1. 2022-2028年中国PE膜产业竞争现状及发展前景分析报告
  2. MyEclipse的Git配置
  3. python多大学_用Python看看你的大学A4纸还剩多少!
  4. spss因子分析结果解读_AMOS进行问卷分析中效度分析之验证因子分析教程 ——【杏花开生物医药统计】...
  5. 异速联服务器配置 虚拟机,异速联 安装教程
  6. react axios封装
  7. JavaFX 2 Dialogs
  8. 罗技推出可蓝牙连接的5.1环绕立体声扬声器
  9. python使用selenium进行浏览器中途调试的方法
  10. 岸上的猫和水里的老鼠
  11. win7计算机亮度怎么调节,win7系统屏幕亮度怎么修改调整
  12. 知路,然后智行远;懂行,所以万业兴
  13. AI生命科学绘图(2):基因结构可变剪切的绘制
  14. 用javascript根据当前年月获得当前季度
  15. SQL数据库根据指定字段去重
  16. 学习表——受任于败军之际,奉命于危难之间(11.28-12.4)
  17. 【接口测试】Jenkins+ant+jmeter接口自动化测试及邮件发送
  18. Html 课程笔记(1)
  19. Ros结合科大讯飞linuxSDK进行离线语唤醒、命令识别
  20. 51单片机——利用DS12C887实现时钟

热门文章

  1. java byte转文件大小_java上传文件大小转换(字节转kb/mb/gb)
  2. jude(java建模软件)_JUDE(JAVA建模软件)下载
  3. uni轮播图添加页数
  4. Fabric官方教程(release 2.2)翻译及总结——链码的生命周期管理
  5. Appium 自动化测试 手机操作
  6. 超好用的pdf编辑+pdf转word工具 – Adobe Acrobat Pro DC下载
  7. 机器自动翻译古文拼音 - 十大宋词 - 念奴娇 赤壁怀古 苏轼
  8. 一些古文里面的字的读音
  9. ubuntu下没有中文输入法的解决办法!
  10. power 相关:(二)功耗的分析 —— power compiler