花了一个星期制作的交通灯仿真程序+原理图,通过数码管显示路口的时间,通过led显示红绿灯。@[TOC]
#include<reg51.H> // 对单片机的口进行了定义

#define uint unsigned int

#define uchar unsigned char

uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//段码组合,共阳极

uchar code b[4]={0x01,0x02,0x04,0x08}; //位码组合

uchar code c[4]={0xcc,0xd4,0x78,0xb8};/P1 绿红、黄红、红绿、红黄/

//12MHz

//*************************************************************************************

uchar NB=25,DX=30,NBG=25,DXG=15,H=5; /数码管显示值设置/

uchar i,k=0,cnt=0,j=0;

sbit K0=P3^4; /支干道通行/

sbit K1=P3^5; /主干道通行/

sbit K4=P3^6; /返回/

sbit K3=P3^2; /设置时间/

sbit K2=P3^3; /紧急刹车/

void delay(uchar t); /定义延时程序/

void key(); /定义键盘程序/

void display(); /定义显示程序/

void settime(); /定义时间设置显示程序/

//程序初始********************

void init(void)

{

TMOD=0x01; /使用定时器0模式一/

TH0=0x3c; /(65536-5000)/256/

TL0=0xb0; /(65536-5000)%256/

IT0=1; //开中断

ET0=1;

TR0=1;

EA=1;

EX0=1;

EX1=1;

P1=c[k]; //开启交通灯

}

//中断0处理程序**************

void int0(void) interrupt 0 // 通行时间设置

{

EA=0;

P1=0xd8; /红灯全亮/

for(;?

{

settime();if(K1==0)       /*P3^6=0设置主干道通行时间*/{  delay(40);if(K1==0){while(!K1){settime();}DXG++;    /*主干道通行时间加1*/if(DXG==100)DXG=0;   }}if(K0==0)        /*P3^5=0设置支干道通行时间*/{  delay(40);if(K0==0){while(!K0){settime();}NBG++;      /*支干道通行时间加1*/if(NBG==100)NBG=0;  }}if(K4==0)          /*P3^7=0返回*/ {  delay(40); if(K4==0){while(!K4){}k=0;P1=c[k];NB=NBG,DX=NBG+H; display(); EA=1;break;}                }}

}

//***************中断1处理程序

void int1(void) interrupt 2 //紧急情况

{

    /*东西南北红灯亮*/

EA=0;

TR0=!TR0; /停止计数/

for(;? /主支干道显示全为0/

{

P1=0xd8,

P0=a[0];

P2=b[0];delay(20);P2=b[1];delay(20);P2=b[2];delay(20);P2=b[3];delay(20);if(K4==0)         /*返回*/

{

delay(20);

EA=1;

P1=c[k]; /返回紧急前状态开始计数/

TR0=!TR0; /重启计数/

break;

}

}

}

void time1(void) interrupt 1 /交通灯控制程序/

{

TH0=0x3c; /定时50ms/

TL0=0xb0;

cnt++;

if(cnt>=20) /每2050ms=1s自减一*/

{

NB–;

DX–;

cnt=0;

if(NB0||DX0)

{

k++;

if(k>3) /k取0,1,2,3/

k=0;

switch(k)

{

case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break;   /*主干道通行显示绿红*/case 1:NB=H;j=1;P1=c[k];break;        /*主干道黄灯闪烁*/case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break;   /*支干道通行显示红绿*/case 3:DX=H;j=2;P1=c[k];break;        /*支干道黄灯闪烁*/

}

}

}

}

void delay(uchar t) //延时程序延时0.1*nms

{

uchar i;

do

{

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

} while(t–);

}

void settime()

{

P2=b[0],P0=a[(NBG+H)%10]; /*显示主干道通行时间  */delay(20); P2=b[1],P0=a[(NBG+H)/10]; delay(20); P2=b[2],P0=a[(DXG+H)%10];  /*显示支干道通行时间*/delay(20); P2=b[3],P0=a[(DXG+H)/10]; delay(20);

}

void key() //键盘程序用KO K1模拟一道有车一道无车

{

 if(K1==0)        /*主干道有车支干道无车*/{  delay(40);if(K1==0)    { while(!K1){  display();}k=0,P1=c[k];cnt=0;NB=NBG, DX=NBG+H;display();}}if(K0==0)         /*支干道有车主干道无车*/{  delay(40);if(K0==0){while(!K0){display(); }k=2,P1=c[k];cnt=0;NB=DXG+H,DX=DXG;display(); }

}

}

void display() //显示程序

{

P2=b[0],P0=a[NB%10]; /由k的不同值进入确定显示数值/

delay(20);

P2=b[1],P0=a[NB/10];

delay(20);

P2=b[2],P0=a[DX%10];

delay(20);

P2=b[3],P0=a[DX/10];

delay(20);

}

void main(void)

{ //主程序

init();

for(;?

{

display();

key();

//黄灯闪烁程序

while(j==1) /主干道黄灯闪烁/

   {              P1=0xdc;         /*给黄灯一高电平黄灯灭*/    for(i=83;i>0;i--){display();}      /*执行for循环延时*/   P1=c[k];         /*再给黄灯一低电平黄灯亮*/for(i=83;i>0;i--){display();}

}

while(j==2)

     {              /*支干道黄灯闪烁*/P1=0xf8;for(i=83;i>0;i--){display();}P1=c[k];for(i=83;i>0;i--){display();}

}

}

}

基于51单片机的交通灯原理图加代码相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总

    51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总 浏览必读: 使用关键词搜索可以达到事半功倍的效果. 电脑浏览器CTRL+F可以使用搜索查找 设计编号J000 功能说明: 1.四路交通 ...

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

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

  8. 声控灯程序C语言,基于51单片机的声控灯设计设计-包含完整设计与指导文件.doc...

    基于51单片机的声控灯设计设计-包含完整设计与指导文件 工 学 院 毕 业 设 计(论文) 题 目:基于单片机的智能光控路灯的设计 专 业: 机电技术教育 班 级: *** 姓 名: *** 学 号: ...

  9. 单片机c语言交通灯源程序,基于80C51单片机的交通灯C语言源程序

    <基于80C51单片机的交通灯C语言源程序>由会员分享,可在线阅读,更多相关<基于80C51单片机的交通灯C语言源程序(5页珍藏版)>请在人人文库网上搜索. 1.include ...

  10. 基于AT89C51单片机的交通灯控制系统的设计

    一.前言 本文中交通灯系统采用MSC-51单片机AT89C51核心来设计交通灯控制器,利用单片机的外围扩展,显示电路构成基本硬件,编程实现对定时.控制.显示电路的控制,调试仿真,完成设计.本系统实现了 ...

最新文章

  1. Apache Mahout中推荐算法Slope one源码分析
  2. linux cat 脚本,Linux Shell 脚本攻略 读书笔记 -- 201.cat的几种用法
  3. cuda 编 程(10) cuda 并行加速时间对比
  4. java 多模块项目 包路径冲突_多智能体仿真建模在交通中的应用|MATSim入门指南...
  5. Mac快捷键和实用技巧
  6. oracle中如何创建表的自增ID(通过序列)
  7. [转载总结]Linux环境下C++运行时动态链接库加载要点总结
  8. WOW工会DKP管理系统
  9. 算法笔记_面试题_6.二进制/位运算相关
  10. 单元测试框架TestableMock快速入门(一):快速Mock任意调用
  11. 禁止横竖屏切换、强制横竖屏
  12. 卸载 Notepad++ !事实已证明,它更牛逼……
  13. JS下载不带后缀名的文件,下载后自动加了后缀名,如何处理?
  14. 编程就是python吗_编程python是什么
  15. 论文浅尝 | 基于多模态特征的视觉实体链接
  16. 联盟广告回利模式4种
  17. 点亮 Linux 驱动开发路上的第一个灯
  18. python根据url下载数据_利用Python如何实现根据URL地址下载并保存文件至对应目录...
  19. 卖二手车能挣多少钱?
  20. 钉钉机器人关键词应答_Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现...

热门文章

  1. 【模式识别-北理工】04线性分类器
  2. abb机器人过载报错_ABB机器人驱动模块温度警告及保养方案简介
  3. 十大思维导图软件推荐
  4. 阿里开源数据同步工具--DataX
  5. python实现录音_python实现网页录音效果
  6. 初中信息技术说课稿_语文说课稿模板一等奖
  7. html做彩色方格,超级炫酷,美图秀秀制作超漂亮彩色格子字图文教程
  8. Python操作Excel制作可视化数据图,实现自动化办公
  9. vue-router 三级路由
  10. Protues8.6仿真STM32出现错误-VDDA和VSSA的问题解决办法