摘要

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用STC89C52单片机以及单片机最小系统和74HC245电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。设计通过两位一体共阴极数码管显示,并能通过按键对定时进行设置。本系统配置了蓝牙模块用于和手机连接,通过手机可控制交通灯的时间;系统处于自动时可通过光电二极管检测车流量,根据车流量智能化调整交通灯时长。本系统实用性强、操作简单、扩展功能强。

效果



完成任务列表

元器件列表

  1. 9*15万用板
  2. STC89C52RC单片机
  3. 40脚 IC座
  4. 11.0592M晶振
  5. 30pf瓷片电容*2
  6. 10k电阻
  7. 103排阻
  8. 102排阻
  9. 10uf电容
  10. 0.36寸两位一体共阴数码管*4
  11. 发光二极管 红 绿 黄 各*4
  12. 20脚IC座
  13. 74hc245
  14. DC电源插口
  15. 按键*9
  16. 自锁开关
  17. 导线若干*2
  18. 焊锡若干
  19. USB电源线(DC接头+电池盒)
  20. 红外传感器*2
  21. 蓝牙模块

源程序

/******************************************************************************** 文件名称:基于51单片机的蓝牙交通灯车流量控制系统* 实验目的:1.* 2.* 程序说明:完整程序Q:2772272579;@: itworkstation@hotmail.com* 日期版本:主要逻辑为下,可定制。2022年8月1日。*******************************************************************************/
#include "config.h"uchar data buf[4];                 //秒显示的变量
uchar data sec_dx=30;              //东西数默认
uchar data sec_nb=30;          //南北默认值
uchar data set_timedx=30;      //设置东西方向的时间
uchar data set_timenb=30;      //设置南北方向的时间
uint dx_liuliang=0,nb_liuliang=0;   //流量监测
int n;
uchar data countt0,countt1;//定时器0中断次数
//定义6组开关
sbit  k4=P3^7;      //切换方向
sbit  k1=P3^5;     //时间加
sbit  k2=P3^6;     //时间减
sbit  k3=P3^4;     //确认
sbit  k5=P1^6;     //紧急
sbit  k6=P1^5;     //夜间模式sbit nb_jiance=P1^4;
sbit dx_jiance=P1^7;sbit Red_nb=P2^6;     //南北红灯标志
sbit Yellow_nb=P2^5;   //南北黄灯标志
sbit Green_nb=P2^4;     //南北绿灯标志sbit Red_dx=P2^3;     //东西红灯标志
sbit Yellow_dx=P2^2;   //东西黄灯标志
sbit Green_dx=P2^1;        //东西绿灯标志bit set=0;             //调时方向切换键标志 =1时,南北,=0时,东西
bit dx_nb=0;           //东西南北控制位
bit shanruo=0;         //闪烁标志位
bit yejian=0;          //夜间黄灯闪烁标志位uchar code table[11]={  //共阴极字型码0x3f,  //--00x06,  //--10x5b,  //--20x4f,  //--30x66,  //--40x6d,  //--50x7d,  //--60x07,  //--70x7f,  //--80x6f,  //--90x00   //--NULL
};//函数的声明部分
void delay(int ms);         //延时子程序
uchar key();                    //按键扫描子程序
void display();             //显示子程序
void logo();                //开机LOGOvoid Key_Set(uchar keycode);
bit flag_send=0;
uchar senddx_liuliang=0,sendnb_liuliang=0,sendtimenb=0,sendtimedx=0;
//主程序
void main()
{uchar key_value=0,Blooth_code=0;int wait_time=0;UartInit();TMOD=0X11;                  //定时器设置TL0 = 0x00;     //设置定时初值    //50毫秒@11.0592MHzTH0 = 0x4C;      //设置定时初值TL1 = 0x00;        //设置定时初值     //50毫秒@11.0592MHzTH1 = 0x4C;     //设置定时初值EA=1;                      //开总中断ET0=1;                       //定时器0中断开启ET1=1;                      //定时器1中断开启TR0=1;                        //启动定时0TR1=0;                          //关闭定时1EX0=1;                      //开外部中断0EX1=1;                     //开外部中断1logo();                     //开机初始化P2=0Xc3;                    // 开始默认状态,东西绿灯,南北黄灯   sec_nb=sec_dx+5;          //默认南北通行时间比东西多5秒sendtimenb=30,sendtimedx=30;while(1)                    //主循环{     key_value=key();                  //调用按键扫描程序if (key_value!=0){       Key_Set(key_value);
//           printf("key:%bu",key_value);}display();              //调用显示程序if(flag_send)            //uchar senddx_liuliang=0,sendnb_liuliang=0,sendtimenb=0,sendtimedx=0;{flag_send=0;
//         printf("Traffic volume:EW:%bu,NS:%bu;\r\n",senddx_liuliang,sendnb_liuliang);
//
//         printf("Traffic time:EW:%buS,NS:%buS;\r\n",sendtimedx,sendtimenb);printf("T-V:EW:%bu,NS:%bu;T-T:EW:%buS,NS:%buS;\r\n",senddx_liuliang,sendnb_liuliang,sendtimedx,sendtimenb);}if(Flag_BloothReceive)    //接收到指令{         wait_time=10;        //500mS  100*4do{ display();               //调用显示,用于延时}while(wait_time--);          //等待 500ms
//          Flag_BloothReceive=0;
//          printf("rec:%bu",1);Blooth_code=Check_Commend();if (Blooth_code!=0){        Key_Set(Blooth_code);}}if(nb_jiance==0){display();                    //调用显示,用于延时消抖if(nb_jiance==0){nb_liuliang++;}do{ display();               //调用显示,用于延时}while(nb_jiance!=1);            //等待按键释放}if(dx_jiance==0){display();                     //调用显示,用于延时消抖if(dx_jiance==0){dx_liuliang++;}do{ display();               //调用显示,用于延时}while(dx_jiance!=1);            //等待按键释放}}
}
void Key_Set(uchar keycode)
{switch (keycode){case 1:   TR0=0;                     //关定时器  shanruo=0;                 //闪烁标志位关P2=0x00;                   //灭显示TR1=0;                            //启动定时1if(set==0)                 //设置键按下set_timedx++;          //南北加1Selseset_timenb++;          //东西加1Sif(set_timenb==100)set_timenb=1;if(   set_timedx==100)set_timedx=1;        //加到100置1sec_nb=set_timenb ;       //设置的数值赋给东西南北sec_dx=set_timedx;break;case 2:   TR0=0;                         //关定时器0 shanruo=0;                 //闪烁标志位关P2=0x00;                   //灭显示TR1=0;                        //关定时器1 if(set==0)set_timedx--;           //南北减1Selseset_timenb--;            //东西减1Sif(set_timenb==0)set_timenb=99;   if( set_timedx==0 )set_timedx=99;        //减到1重置99sec_nb=set_timenb ;           //设置的数值赋给东西南北sec_dx=set_timedx;break;case 3:   TR0=1;                         //启动定时器0sec_nb=set_timenb;             //从中断回复,仍显示设置过的数值sec_dx=set_timedx;             //显示设置过的时间TR1=0;                           //关定时器1 if(set==0)                        //时间倒时到0时{ P2=0X00;                     //灭显示Green_dx=1;                      //东西绿灯亮Red_nb=1;                   //南北红灯亮sec_nb=sec_dx+5;           //回到初值}else { P2=0x00;                 //南北绿灯,东西红灯Green_nb=1;Red_dx=1;sec_dx=sec_nb+5; }break;case 4:   TR0=0;                     //关定时器0 set=!set;                  //取反set标志位,以切换调节方向TR1=0;                        //关定时器1dx_nb=set;break;case 5: TR0=0;                     //关定时器P2=0x00;                 //灭显示Red_dx=1;Red_nb=1;                   //全部置红灯TR1=0;sec_dx=00;                   //四个方向的时间都为00sec_nb=00;break;case 6:   TR0=0;                     //关定时器P2=0x00;TR1=1;sec_dx=00;                   //四个方向的时间都为00sec_nb=00;break;default:break;}
}
//函数的定义部分
uchar key(void) //按键扫描子程序
{    uchar key_num=0;if(k1!=1)                            //当K1(时间加)按下时{display();                    //调用显示,用于延时消抖if(k1!=1)                          //如果确定按下{key_num=1;            do{ display();               //调用显示,用于延时}while(k1!=1);           //等待按键释放}}if(k2!=1)                           //当K2(时间减)按键按下时{        display();                      //调用显示,用于延时消抖  if(k2!=1)                        //如果确定按下{   key_num=2;             do  { display();            //调用显示,用于延时}while(k2!=1);              //等待按键释放}}if(k3!=1)                         //当K3(确认)键按下时{    display();                      //调用显示,用于延时消抖if(k3!=1)                      //如果确定按下{key_num=3;do{display();              //调用显示,用于延时}              while(k3!=1);            //等待按键释放              }}   if(k4!=1)                         //当K4(切换)键按下{display();                       //调用显示,用于延时消抖if(k4!=1)                      //如果确定按下{  key_num=4;  do{display();              //调用显示,用于延时}              while(k4!=1);            //等待按键释放}}    if(k5!=1)                          //当K5(紧急)键按下时{display();                      //调用显示,用于延时消抖if(k5!=1)                      //如果确定按下{   key_num=5; do{display();               //调用显示,用于延时} while(k5!=1);          //等待按键释放    }}if(k6!=1)                            //当K6(夜间模式)按下 {display();                     //调用显示,用于延时消抖 if(k6!=1)                     //如果确定按下{   key_num=6; do{display();             //调用显示,用于延时}   while(k6!=1);          //等待按键释放    }}return key_num;
}
void display(void) //显示子程序
{       buf[1]=sec_nb/10;      //第1位 东西秒十位buf[2]=sec_nb%10;       //第2位 东西秒个位buf[3]=sec_dx/10;       //第3位 南北秒十位buf[0]=sec_dx%10;       //第4位 南北秒个位     P1=0xff;               // 初始灯为灭的P0=0x00;               灭显示P1=0xfe;                   //片选LED1P0=table[buf[1]];      //送东西时间十位的数码管编码         delay(1);               //延时P1=0xff;               //关显示P0=0x00;              //灭显示P1=0xfd;              //片选LED2P0=table[buf[2]];       //送东西时间个位的数码管编码delay(1);                //延时P1=0xff;              //关显示P0=0x00;              //关显示P1=0Xfb;              //片选LED3P0=table[buf[3]];      //送南北时间十位的数码管编码delay(1);                //延时P1=0xff;                //关显示P0=0x00;              //关显示P1=0Xf7;              //片选LED4   P0=table[buf[0]];      //送南北时间个位的数码管编码delay(1);                //延时
}

B003 - 基于51单片机的蓝牙交通灯车流量控制系统相关推荐

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

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

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

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

  3. 基于51单片机十字路交通灯仿真_黄灯闪烁_正常模式+夜间模式+紧急模式

    基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 目录 基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 演示视频 基本功能: 仿真图 程序 程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 ...

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

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

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

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

  6. 基于51单片机设计的交通灯

    准备工作 Proteus仿真,Keil5软件,STC89C52芯片/1,74HC573锁存器,两位数码管4个,红绿高亮LED各四个,黄灯/4,470电阻20个备用,12M外部晶振,10k电阻& ...

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

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

  8. 2.基于51单片机的蓝牙遥控器制作

    上一次介绍了基于51单片机的蓝牙遥控小车,使用的是手机APP作为遥控器,本节中介绍使用51单片机制作遥控器. 1.单片机 同样使用51单片机作为控制芯片,同样只需要一个芯片和一个晶振电路单片机就能运行 ...

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

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

最新文章

  1. SAP QM 内向交货单在完成包装之后就自动触发了检验批?
  2. elasticsearch源码分析之search模块(client端)
  3. 电脑连接电视方法详解_电脑如何连网?——校园宽带的连接方法(详解版)
  4. [react] shouldComponentUpdate方法是做什么的
  5. ❤️六W字《计算机基础知识》(八)(建议收藏)❤️
  6. java if和else if的区别_关于C语言中if,elseif和else的区别在哪里
  7. java 方法 时间_Java 方法
  8. sklearn gridsearchcv_sklearn调包侠之PCA降维
  9. 《专业嵌入式软件开发》的样章、建议和勘误
  10. 达梦共享存储集群DMDSC-2节点部署手册
  11. Lingoes灵格斯翻译家添加法语发音
  12. DeepFM 参数理解(二)
  13. python名片打印程序_Python的格式化输出--制作名片
  14. SEM竞价员一天的工作流程了解一下?
  15. 网站服务器不缴费会清档吗,云服务器不缴费释放
  16. FinalRecon:一款多功能网络侦查OSINT工具
  17. 2022图灵奖出炉!以太网之父鲍勃·梅特卡夫获奖,76岁进入新领域再出发
  18. SpringMVC Controller中常用到的一些注解
  19. 第063讲: 论一只爬虫的自我修养11:Scrapy框架之初窥门径 | 学习记录(小甲鱼零基础入门学习Python)
  20. taxi计费器c语言程序,毕业论文:出租车计费系统(全文完整版)

热门文章

  1. Ubuntu14.04 不用深澜客户端连接深澜校网
  2. LeetCode 1371. 每个元音包含偶数次的最长子字符串
  3. ERC-777 和风险缓解
  4. Cocoapods简单介绍和安装
  5. 2022熔化焊接与热切割考试模拟100题模拟考试平台操作
  6. 计算机软考中高级职称评定条件
  7. 第二章 第二节 使用Python IDLE编写你的第一个UI自动化测试程序
  8. Dockerfile创建镜像
  9. 《低等道路计算机设计视频教程,纬地低等级道路设计入门
  10. 广工研究生计算机学院学费,东北林业大学信息与计算机工程学院2017年研究生学费及奖学金...