热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

51单片机十字路口交通灯课程设计

原理图六车道十字路口交通控制原理图,图中有四个不同颜色的箭头,代表四个不同的状态。需要使用51单片机实现交通灯及人行道灯。开发工具Protues7Keil4设计图设计图分析使用元

原理图

在这里插入图片描述

六车道十字路口交通控制原理图,图中有四个不同颜色的箭头,代表四个不同的状态。需要使用51单片机实现交通灯及人行道灯。


开发工具



  • Protues7

  • Keil4


设计图

在这里插入图片描述


设计图分析


使用元件







































名称数量
AT89C511
RESPACK-81
74HC5738
NOT8
AND_34
TRAFFIC LIGHTS20
7SEG-MPX4-CC4

设计思想



  1. 每个路口有三个红绿灯模块,分别代表左转,直行,右转,高电平时亮灯,低电平熄灭

  2. 对于的红绿灯模块下的数码管显示倒计时,当对应的红绿灯要变灯时显示倒计时提醒驾驶员注意

  3. 单片机引脚直接控制红绿灯和数码管,人行道灯采用逻辑门控制,当面前的路口都是红灯时才为绿灯

  4. 全部路口的时间是一样的,到时间就切换到下一个状态


代码

#include
#define uchar unsigned char
#define RR 0x24 //一红一红
#define RG 0x0c //一红一绿
#define GR 0x21 //一绿一红
#define GG 0x09 //一绿一绿
#define LOCK(num) A##num = 1; A##num = 0 //LOCK(8)意为 A8 = 1; A8 = 1; 锁存器一开一关
#define START 127
#define GAP 30
sbit A8 = P1^0;
sbit A9 = P1^1;
sbit A10 = P1^2;
sbit A11 = P1^3;
sbit A12 = P1^4;
sbit A13 = P1^5;
sbit A14 = P1^6;
sbit A15 = P1^7;
uchar mtable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f};
char sec = START, cnt = 0;
void delay(unsigned int ms);
void status1();
void status2();
void status3();
void status4();
void inittimer();
void main(){
inittimer(); //打开定时器
while(1){
status1();
status2();
status3();
status4();
}
}
void inittimer() {
TMOD = 0X01;
TL0 = 0xb0;
TH0 = 0x3c;
ET0 = 1; EA = 1;
TR0 = 1;
}
void status1(){
while( START-GAP while( START-GAP+2 <= sec && sec <= START-GAP/2 ){
P0 = mtable[sec-(START-GAP+1)];
P3 = ~(0x31); LOCK(14);
P3 = ~(0x07); LOCK(15);
delay(100);
P3 = 0xff; LOCK(14); LOCK(15);
}
//点灯顺序为西路口开始逆时针选装
P2 = RR; LOCK(8);
P2 = RG; LOCK(9);
P2 = RR; LOCK(10);
P2 = ( sec <= START-GAP+2 ) ? 0x22 : GR; LOCK(11);
P2 = RR; LOCK(12);
P2 = ( sec <= START-GAP+2 ) ? 0x12 : GG; LOCK(13);
}
}
void status2(){
while( START-2*GAP while( START-2*GAP+2 <= sec && sec <= (START-GAP)-GAP/2 ){
P0 = mtable[sec-(START-2*GAP+1)];
P3 = ~(0x08); LOCK(14);
P3 = ~(0x3e); LOCK(15);
delay(100);
P3 = 0xff; LOCK(14); LOCK(15);
}
P2 = GR; LOCK(8);
P2 = ( sec <= START-2*GAP+2 ) ? 0x14 : RG; LOCK(9);
P2 = RR; LOCK(10);
P2 = ( sec <= START-2*GAP+2 ) ? 0x14 : RG; LOCK(11);
P2 = ( sec <= START-2*GAP+2 ) ? 0x22 : GR; LOCK(12);
P2 = RR; LOCK(13);
}
}
void status3(){
while( START-3*GAP while( START-3*GAP+2 <= sec && sec <= (START-2*GAP)-GAP/2 ){
P0 = mtable[sec-(START-3*GAP+1)];
P3 = ~(0x07); LOCK(14);
P3 = ~(0x31); LOCK(15);
delay(100);
P3 = 0xff; LOCK(14); LOCK(15);
}
P2 = ( sec <= START-3*GAP+2 ) ? 0x22 : GR; LOCK(8);
P2 = RR; LOCK(9);
P2 = ( sec <= START-3*GAP+2 ) ? 0x12 : GG; LOCK(10);
P2 = RR; LOCK(11);
P2 = RG; LOCK(12);
P2 = RR; LOCK(13);
}
}
void status4(){
while( START-4*GAP while( START-4*GAP+2 <= sec && sec <= (START-3*GAP)-GAP/2 ){
P0 = mtable[sec-(START-4*GAP+1)];
P3 = ~(0x3e); LOCK(14);
P3 = ~(0x08); LOCK(15);
delay(100);
P3 = 0xff; LOCK(14); LOCK(15);
}
P2 = ( sec <= START-4*GAP+2 ) ? 0x14 : RG; LOCK(8);
P2 = ( sec <= START-4*GAP+2 ) ? 0x22 : GR; LOCK(9);
P2 = RR; LOCK(10);
P2 = GR; LOCK(11);
P2 = ( sec <= START-4*GAP+2 ) ? 0x14 : RG; LOCK(12);
P2 = RR; LOCK(13);
}
}
void delay(unsigned int ms) {
unsigned int i,j;
for(i=0;i for(j=0;j<150;j++);
}
void time_ler() interrupt 1 {
TL0=0xb0; TH0=0x3c;
cnt++;
if( cnt == 20 ){
cnt = 0;
sec--;
if( sec == START-4*GAP ){ //倒计时结束重置sec 回到status1
sec = START;
}
}
}

资源

DSN文件

https://share.weiyun.com/ggUgDg9T



推荐阅读
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了重温Linux内核:互斥和同步相关的知识,希望对你有一定的参考价值。文章目录 ... [详细]
  • A题这题贼水,直接暴力就可以了。用个bool数组记录一下,如果某一天,当前剩下的最大的出现了的话,就输出一段。1#include<stdio.h>2intn;3boolvi ... [详细]
  • Python Selenium WebDriver 浏览器驱动详解与实践
    本文详细介绍了如何使用Python结合Selenium和unittest构建自动化测试框架,重点解析了WebDriver浏览器驱动的配置与使用方法,涵盖Chrome、Firefox、IE/Edge等主流浏览器。 ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • Day4今天继续复习搞基础课,加油!树形DP每一个节点都分为选和不选两种状态,选为f[i,1],不选为f[i,0]&# ... [详细]
  • 本文详细探讨了select和epoll两种I/O多路复用技术的内部实现原理,分析了它们在处理大量文件描述符时的性能差异,并通过具体示例代码展示了select的工作流程。 ... [详细]
  • 在学习了Splay树的基本查找功能后,可能会觉得它与普通的二叉查找树没有太大的区别,仅仅是通过splay操作减少了时间开销。然而,Splay树之所以被誉为“序列之王”,主要在于其强大的区间操作能力。 ... [详细]
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
author-avatar
书友73277355
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有