一、简介

近来学(wan)了下已经好久没碰的51,心血来潮自己DIY了一个交通信号灯模型。没有什么创新之处,就是复(dao)习(gu)复(dao)习(gu)了下51的定时器中断、外部中断以及最小系统电路,熟悉了下74HC595的用法和数码管。因为好久没碰51了导致数码管的顺序记反了懒得再改电路了,于是将错就错就按反着的顺序搞下去了。由于快考试了事情也比较多,基本是隔三差五得做,时间战线拉得比较长。。。当然这些都无关紧要了,主要还是培养下自己分文件模块化编程的习惯嘛,文件分的比较细致,看上去舒服.

因为是完全自己设计的嘛难免很多疏漏之处。当然由于这个电路比较简单方案和其他人雷同了也是正常现象,说明英雄所见略同嘛~。在此开源大家共同学习,希望各路大神能指点迷津,欢迎大家来喷~~~~

废话不多说了。先介绍下功能:

1)为了可拓展性,我将单片机所有的引脚全部引出,后期可拓展或改做它用,每个IO引出两排排针接线更舒服。
2)为了后期如果能做其他实验不产生干扰,外围电路基本全部采用杜邦线接线,不直接接在IO上了。其中595的VCC放置了一个跳线帽作为VCC供电。
3)本人本着尽量少地用飞线地原则,能往正面跳就先跳线,但是到了2位数码管空间不算多了,也做的比较累了,就偷懒全用了飞线。
4)晶振用了12MHz插在了单片机旁。采用12MHz地原因是定时器时间好计算,没用串口不需要很精确地波特率。插在外面没焊死仅仅因为板子空间不够了,而我不像飞线。。。
5)因为东西向的灯是同步的,南北向的灯也是同步的,所以一个方向上的三色交通灯我选择了分别并联的方式,没全部并联是斟酌了下IO的驱动能力和后期的可拓展性还有一定条件下节省IO接口,故总共用了6个IO口控制交通灯,欢迎大家来喷~~~
6)本次模拟仅为理想情况,以一分钟为一周期红绿交替指示。在还剩3秒时黄灯闪烁,当然也是为了简化程序所有的黄灯一起闪。
7)通过外部中断选择工作/休息模式。休息模式下所有LED(包括数码管)同步闪烁,直到将拨盘开关拨回(有延误时间。。。)。

想到的大概就这么多吧,详细功能不介绍了,直接上代码参考。

二、原理图

proteus 8 仿真原理图

三、部分源程序

程序基于Keil 5 C语言编写,部分程序有注释

1.文件结构

所有头文件均放置在USER_Config.h头文件中

文件 功能
main. c 主函数
it.c 中断服务函数
delay.c 延时函数
74HC595.c 595驱动函数
LED.c 交通灯
SEG.c 数码管

2.头文件

USER_Config.h

其他头文件大同小异就不贴了。

3.it.c

4.delay.c

5.595驱动

6.LED.c

7.SEG.c

8.main.c

四、成果展示

五、总结

转自我的第一篇博客,如有不妥的地方请大家多指教

网盘分享:

链接:http://pan.baidu.com/s/1skIP6f7 密码:1eey

发表评论