作者:李剀
出处:https://www.cnblogs.com/kevin-nancy/
或者
https://blog.csdn.net/Kevin_8_Lee/article/details/91351632
欢迎转载,但也请保留上面这段声明。谢谢!(上面两个都是我的博客,只是在不同平台)

首先说一下背景吧 :

最近在帮别人做一些小东西,是用51做的,主要给他们提供单片机课设的思路。 且由于时间问题,我也没有将程序进行优化,只是拿来分享一下,大家可以参考。 有思路之后可以稍微花点时间去优化一下代码,是代码更简洁。

马丁·福勒 的一句名言与君共勉:

任何一个傻瓜都会写能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码。—Martin Fowler

ok, 废话不多说,下面是设计要求及制作过程,proteus仿真以及代码流程的介绍

1) 题目及设计要求

题目: 交通灯控制器
要求:
1、红灯和绿灯相互转换时经过黄灯,黄灯闪烁三次(6秒);

2、主干道方向通行30秒,辅干道方向通行20秒,单独左转信号15秒;先直行信号,后左转信号。

3、设手动、自动、特殊情况三种方式。

4、特殊情况时所有路口红灯都亮,给120、110等通行。

5、自动时显示各种状态倒计时。

2) C51编程以及电路仿真软件

编程
51单片机的C语言编程一般都是keil3或者keil4,我一直以来用的keil3,这次使用的keil4,其实都一样的。

(**注:**关于keil3/4/5的资料和安装破解教程,在我的另一篇博客讲过了,可以参考一下 点击蓝字–>> keil3/4/5安装及破解(附百度云资源))


keil4打开的界面如下:

( PS:: 不过这次做这些东西的过程中,keil4经常自己卡死,害得我只能任务管理器关闭它,超级烦,不知道什么原因,有了解的可以评论一下告诉我,感激不尽 …但是老版本的keil3却很稳定)

仿真:
proteus仿真软件

我用的7版本的

proteus打开界面如下:

这个界面里面的电路图与这个交通灯无关,是我以前做的一个,只是给大家演示

3)解决思路

硬件部分:

交通灯显示部分分为6个部分
  • [ 1] 首先:主干道通行30秒 其中单独左转15秒 黄灯6秒
1)主干道--------绿灯 辅干道--------红灯 0-15s // 单独直行
2)主干道--------蓝灯 辅干道--------红灯 15-24s // 单独左转
3)主干道--------黄灯 辅干道--------红灯 24-30s // 黄灯减速

  • [ 2] 辅干道通行20秒 单独左转15秒 黄灯6秒
4)主干道--------红灯 辅干道--------绿灯 0-5s
5)主干道--------红灯 辅干道--------蓝灯 5-14s
6)主干道--------红灯 辅干道--------黄灯 14-20s

模拟交通的灯的几个led灯的显示在程序中就是按照上面的流程显示的,由 1)—>2)—>…—>6)—>1)->… 一直循环

仿真电路图各个部分展示:
(1)单片机 & 复位电路 & 晶振

(2)交通灯部分


上图标注了每个灯对应的引脚 以及每个灯的颜色

分别在上面和右面放置了一排 用来表示道路的方向

D1-D4指示的是主干道 D5-D8指示的是辅干道

(3)数码管显示部分

这部分是和交通灯部分一起的 为了方便看到我写的标注,我把交通灯抹去了,抹去的部分就是上面交通灯的部分

(该芯片使用方法这里不多说,网上很多资料。。。本质就是一个锁存器)

软件部分

首先代码流程图如下,对这个画图软件不是很熟,画的很垃圾,不过大致能体现出来

4)部分代码展示及解释

# include <reg52.h>
# define uchar unsigned char
# define uint  unsigned intsbit wela = P2^7;       // 数码管位选
sbit dula = P2^6;      // 数码管段选
// 按键位定义
sbit    key_auto    = P3^0;    // 自动
sbit    key_step    = P3^1;    // 手动
sbit    key_emerg   = P3^2;    // 紧急情况 110/120通过
// 四位八段共阴极数码管数字显示编码
uchar code table[]={
//"0" "1"  "2"  "3"
0x3f,0x06,0x5b,0x4f,
//"4" "5"  "6"  "7"
0x66,0x6d,0x7d,0x07,
//"8" "9"  "A"  "B"
0x7f,0x6f,0x77,0x7c,
//"C" "D"  "E"  "F"
0x39,0x5e,0x79,0x71
};
// 交通灯编码  自动模式时,交通灯亮灯顺序 我编成了一个数组,方便使用uchar code light[]={
// 主G辅R      主G辅R    主Y辅R0xdb,       0xde,     0xd7,
// 主R辅G      主R辅B    主R辅R0xbd,       0xed,     0x7d,
};
// 定时器0中断服务函数  用于计算时间过了几秒
void timer0() interrupt 1
{TH0=0x4c;     // 定时器装初值 50ms(11.05926MHz  TH0=0x4c TL0=0x00) TL0=0x00;     // (12MHz 的初值是 TH0=0x3c TL0=0xb0)cnt++;if(cnt == 20){cnt = 0;sec++;      // 记录1秒}
}
// 按键扫描函数
void key_scan()
{//判断那个按键盘下/********************** 自动模式 *********************////如果是自动模式,就让交通灯正常运行  并显示倒计时// Display_C_time(15-sec); // 主干道倒计时显示// Display_R_time(30-sec);  // 辅干道倒计时显示// P1 = light[0];           // 交通灯编码显示// 具体代码省略、、、、、、、、、、/********************** 手动模式 *********************///手动模式就让交通等步进变换if(key_step == 0){delay_ms(5);if(key_step == 0){if(light_num == 6){light_num = 0;}P1 = light[light_num];light_num++;while(!key_step);  // 松手检测}}/********************** 紧急模式 *********************/// 紧急模式  用于120/110紧急通行// 让主干道和辅干道都是红灯即可// 具体代码省略、、、、、、、、、、、}

// 最后在主函数里面初始化,然后循环扫描按键

void main()
{system_Init();         // 系统初始化  里面是对定时器中断以及数码管进行初始化while(1){key_scan();}
}

5)整体效果演示

因为这个是帮别人设计的,所以完整源码和仿真工程文件不贴出。 如果需要完整的仿真以及源码,请私聊我或者评论留下联系方式


2019/06/20 修改
上面所使用的数码管是共阴极数码管,我标记错了,抱歉!

今天所有的懒惰都会换来明天的卑微 加油吧!!!

51单片机电子制作DIY-----交通灯控制器相关推荐

  1. c51倒计时程序汇编语言,51单片机汇编程序:倒计时交通灯

    一个51单片机汇编语言的程序,要求就是红灯25秒,绿灯20秒,黄灯闪烁5秒. 很简单的要求,用下图电路即可实现: 全部程序如下: ;倒计时交通灯 ;四位共阳数码管 ;P0 接段码 ;P2.0123 接 ...

  2. 单片机交通灯数码管c语言程序,51单片机C语言实现交通灯(红绿灯)源程序.doc

    51单片机用C语言实现交通灯(红绿灯)源程序 2009-10-29 23:00 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: /*1.程序目的:使用定 ...

  3. 51单片机的仿真实验——交通灯(十字路口演示)

    学习目标: 1.了解交通灯的基本工作原理: 2.用multisim模拟实现交通灯控制: 3.用Keil C51编程实现上述功能: 4.用Keil与multisim联调 学习内容: 通过AT89C51实 ...

  4. 基于51单片机六车道智能交通灯设计(仿真+源程序+PCB+论文)

    资料编号:204 功能介绍:(全套毕设资料齐全) 本设计的交通灯以十字路口为模型,在实现基本的功能前提下增加了时间及温度的液晶显示.从而还增加了路口高峰期的智能化人工管理机制. 实际生活中交通信号灯的 ...

  5. 基于51单片机实现LED模拟交通灯(Proteus仿真)

    wechat:[嵌入式工程师成长日记] 具体功能实现 南北红灯亮,东西绿灯亮:南北绿灯亮,东西红灯亮:在红绿灯转换过程中,黄灯闪烁5次. 使用器件: 若干电阻.4只LED红灯.4只LED绿灯.4只LE ...

  6. 51单片机 普中V2 交通灯 根据实物仿真

    适合普中V2 板子 /* D7 D8舍弃不用 1111 1111 1110 1110 1110 1011 1111 0101 1101 1101 0~25秒 D5亮 D1亮 D3不亮 0xee 25~ ...

  7. 51单片机之点亮一个灯

    51单片机之点亮#一个灯#流水灯#交通灯 接下来的学习将主要转为使用keil编程,并使用proteus进行仿真,推荐有条件的同学可以购买一个板子进行实物的练习    发光二极管常用来指示系统工作状态, ...

  8. 51单片机50个实例代码_【附代码】51单片机电子密码锁教程

    简介 大家好,这篇文章的内容是关于如何用51单片机来制作一个电子密码锁的教程,通过这篇教程可以让刚入门的朋友了解矩阵键盘.LCD1602的使用方法,以及密码输入和修改的程序介绍,我会对每个部分进行详细 ...

  9. 交通灯控制器的verilog实现

    用状态机实现交通灯控制器,仿真通过,有代码以及testbench. 要求: 方向1是主干道,绿灯时间较长,交通灯状态循环为: 绿:40 黄:5 左:15 黄:5 红:55 方向2不是主干道,绿灯时间较 ...

  10. 基于51单片机的wifi智能led灯的毕业设计

    基于51单片机的wifi智能led灯的毕业设计 摘要 系统基于STC89C52RC单片机设计,拥有自动与手动两种模式,自动模式下可以过热释红外传感器检测是否有人,采用光敏电阻构成的电路检测环境光的强度 ...

最新文章

  1. (深入理解)matplotlib绘图原理(figure,axes,axis,canvas的区别)
  2. 全局稳定性收敛平衡点为0吗_「模型解读」GoogLeNet中的inception结构,你看懂了吗...
  3. JSP中 JSTL和EL标签的使用
  4. 深入浅出面向对象和原型【番外篇——重新认识new】
  5. python下selenium测试报告整合
  6. 模块化操作(es5写法)
  7. pyecharts geo_pyechartstableau可视化分析案例+分析思路
  8. QT使用Q_OBJECT链接不通过的一种情况
  9. NetCore基于EasyNetQ的高级API使用RabbitMq
  10. 可应用于实际的14个NLP突破性研究成果(一)
  11. 【MySQL】MySQL drop,truncate,delete 区别
  12. 自己动手系列——实现一个简单的ArrayList
  13. 物理搬砖问题_人物专访|从“搬砖烧炉工”到MIT物理PhD, 很普通、很坚持、很热爱...
  14. wordpress本地网站怎么搬到服务器,如何把wordpress从本地服务器迁徙到网站主机上...
  15. 服务器装凤凰系统,凤凰系统装在云服务器
  16. 计算机网络第三章课后答案第七版(谢希仁著)
  17. Linux重新挂载磁盘,如何把磁盘挂载到已有目录上面
  18. SWUSTOJ #77 计算员工周工资
  19. Day02:基本IO操作
  20. 视频剪辑软件哪个比较好用?这几款常用的视频剪辑软件你要知道

热门文章

  1. Java项目前后端文件简体转换繁体
  2. python制作脑图_使用Python将xmind脑图转成excel用例(一)
  3. 【RK2206】4. MQTT示例
  4. 怎么学计算机基本步骤,学习计算机知识的基本步骤是什么?
  5. 红昭愿计算机音乐教程,红昭愿 - 音阙诗听 - 5SING中国原创音乐基地
  6. Fiddler自动回复器伪造回复
  7. 2020年计算机组装行业,组装电脑已成夕阳产业?DIY装机发展的道路在何方?
  8. 远程唤醒、WOL、Magic_Packet【转】
  9. GitHub的Fork 是什么意思
  10. c command语言学例子,语言学资料(一)CHAPTER 4