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

article/2025/6/22 13:08:55

花了一个星期制作的交通灯仿真程序+原理图,通过数码管显示路口的时间,通过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();}

}

}

}


http://chatgpt.dhexx.cn/article/kijr6ugF.shtml

相关文章

51单片机电路原理图_51单片机玩转物联网基础篇03-独立按键

前言 上一节,我们完成了51单片机控制LED灯,并实现流水灯效果,本节我们学习操作独立按键,并通过两个按键,分别打开和关闭所有LED灯,按键作为输入设备,在系统开发过程中十分常见,一般来说,按键可以设置系统参数、控制系统运行状态。 一、基础知识 1.按键简介 通常的按键…

单片机基础:MCS-51单片机的硬件结构(附硬件结构框图)

单片机硬件结构知识点非常琐碎&#xff0c;通过一次两次的学习是不太可能记住的。想要熟练掌握硬件结构&#xff0c;最好的方法是在实验中练习&#xff0c;通过编程多见多用才能牢固的掌握。 MCS-51单片机硬件结构 1.硬件系统框图2.单片机功能图3.单片机的主要部件4.CPU内部结…

基于51单片机的智能温控风扇(程序+仿真+原理图)

目录 基于51单片机的智能温控风扇1、主要功能2、实验结果3、仿真工程4、原理图5、程序源码6、资源获取 基于51单片机的智能温控风扇 1、主要功能 基于51单片机的智能温控风扇&#xff0c;通过DS180温度传感器采集温度&#xff0c;并通过数码管显示温度&#xff0c;当温度高于…

基于51单片机的温度监测控制系统仿真程序原理图设计

整体方案设计 3.1.1 系统概述 整个系统以STC89C52单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,传感器采用DS18B20,负责采集温度数据后发给单片机。显示设备采用4位共阴数码管,显示检测到的温度值。按键…

51单片机电路原理图_51单片机AD转换电路设计实现

51单片机AD转换电路设计实现 关于AD转换的原理,大家在《数字电子技术》中已经学过,这里做过多的介绍,本文介绍一款经典的8位AD转换芯片ADC0804,基于51单片机设计AD转换电路,并完成测量值的转换。 1 芯片引脚介绍 CS:片选信号,低电平有效,即CS=0时候芯片才能正常工作,单…

51单片机电路原理图_HX711的电子秤称重系统设计详解,51单片机,含Proteus仿真、C代码、原理图、论文等...

设计要求 1.系统可实现电子秤基本的称重功能(称重范围为0~10Kg,重量误差不大于0.005Kg); 2.系统应具备键盘输入单价,显示重量,计算总价的功能; 3.单价和总价金额的单位为元,最大金额数值为999.99元,金额误差不大于0.01元; 4.系统超出最大测量范围10Kg时,具有报警指…

51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告)

本设计&#xff1a; 基于51单片机的简易计算器设计&#xff08;仿真程序原理图PCB设计报告&#xff09; 仿真&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 编号S0001 芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯…

51单片机计算机加原理图,MCS-51单片机最小系统的组成部分及电路图介绍

MCS-51单片机概述 MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到…

手把手教你看懂51单片机原理图

最近当了单片机课设的助教,又再次接触了51单片机。发现初学者还看不太原理图&#xff0c;不能理解单片机 led灯&#xff0c;蜂鸣器&#xff0c;数码管是怎么操作的。现在结合原理图讲解一下怎么操作这些外设模块&#xff01;我们就以一些初始化代码进行讲解。 注&#xff1a;这…

51单片机电路原理图_51单片机入门(第1篇):纯干货,单片机最小系统

当我们了解了什么是单片机,以及单片机有什么用之后,是否要考虑我们怎么去学习单片机呢?学习单片机其实很简单,需要的起步知识并不需要多少,接下来跟随我的步伐,一步一步的去了解单片机。本文将讲解单片机最小系统和仿真软件以及编程软件的选择。 0. 51单片机最小系统 先来…

理解51单片机最小系统的工作原理

51单片机最小应用系统 概述 要想使用单片机&#xff0c;第一个要搭建的电路就是单片机的最小系统&#xff0c;有了这个最小系统单片机就可以去正常的工作&#xff0c;即使没有其他的外围电路&#xff08;显示器啥的&#xff09;&#xff0c;也可以对单片机进行程序的编写&…

51单片机原理与设计方案(包含原理图与PCB)

一、单片机简介 单片机&#xff1a;在一片集成电路芯片上集成微处理器&#xff08;CPU&#xff09;、存储器&#xff08;ROM和RAM&#xff09;、I/O接口电路&#xff0c;从而构成了单芯片微型计算机&#xff0c;即单片机&#xff08;single chip Microcomputer&#xff09;也叫…

如何获得海量的RoboCode代码

原文地址&#xff1a;如何获得海量的RoboCode代码 作者&#xff1a;胡泊1982 很多对人工智能感兴趣的朋友受限于资金和场地的限制&#xff0c;只能转向虚拟平台发展。我们机器人天空网站也曾经做过专门的专题介绍了几种常见的虚拟机器人竞赛平台&#xff08;http://www.robotsk…

Robocode 参数大揭密

Robocode 参数大揭密 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 &#xff0d; 下载免费软件&#xff0c;快速启动开发 级别: 初级 天翼.李Skyala.Li, 2002 年 12 月 02 日 下面天翼.李(Skyala.Li)就和大家一起来看看Robocode中重要的参数并分析分析…

在IDEA上部署Robocode

Robocode的下载和安装 下载网址&#xff1a;https://robocode.sourceforge.io/ 下载Robocode 解压&#xff0c;点击运行压缩包中的jar包完成安装&#xff0c;安装完成后得到肉搏code的文件夹 在Idea上部署robocode 打开IDEA&#xff0c;新建Java项目&#xff0c;注意项目的…

教你玩Robocode(4)——规则系统

理解Robocode的规则系统&#xff0c;你才能写出更好的坦克。许多规则在Robotcode的Roles类中进行了描述。为了便于大家理解&#xff0c;本文对各种规则参数进行详细叙述。 时间 robocode的时间单位为”轮”(turn)。因此&#xff0c;在描述移动速度时&#xff0c;单位为”像素每…

RoboCode的Intellij环境搭建

2019独角兽企业重金招聘Python工程师标准>>> RoboCode自带的源码编辑器十分不便&#xff0c;本次参考youtube上的教程搭建Intellij的roboCode开发环境&#xff0c;最终实现能够编写、编译、运行、调试机器人。 创建项目 首先&#xff0c;用Intellij IDEA新建一个pro…

利用Jython开发Robocode机器人

&#xff08;转载请注明来源于 金庆的专栏&#xff09;先用Python写个简单的机器人&#xff1a; from robocode import * class SampleBlaze(Robot): def run(self): while 1 : self.ahead( 100 ) self.back( 100 ) 编译为jar包&#xff0c;注意…

Robocode Rumble: 冠军的技巧

Robocode Rumble: 冠军的技巧 Rumble 冠军揭示胜利的机器人背后的策略 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 &#xff0d; 下载免费软件&#xff0c;快速启动开发 级别: 初级 Dana Triplett Barrow, 自由技术撰稿人 2002 年 12 月 03 日 Roboc…