3X3按键、交通灯和电风扇


一个星期前,带我们学习的师兄要回家几天,于是就布置下几个小项目给我们做,练练手。说是项目也不大对的吧,只是实现一些很简单的功能,没有实用价值。第一个是实现3*3按键的检测功能,也就是有9个按键,当其中的某个被按下时,你要检测并确定是哪个被按下。第二个是用LED模拟交通灯,嗯,也就是十字路口的那种红绿灯。第三个是实现对直流电机的控制。

      学嵌入式也有大半年了,但都是在学基础知识,单片机也只学了msp430一种。所以也没有接触过真正的项目开发。这次师兄布置下这几个“小项目”,显然使得我们实验室里几个“小学徒”很兴奋。是啊,学了那么久终于可以自己动手做些东西出来了!就像一年多以前,写下第一个完全自己设计的程序并debug通过那样,会很有成就感。

      师兄离开后,一开始大家什么都不知道,所以没有交流,都是自己在查找资料、设计自己的方案。我是先做3*3按键检测的。一开始我并没有去查资料,因为我大概知道其原理就是通过横线和竖线的扫描来定位按键的。于是我就自己在那儿苦思冥想,终于弄出来一个使用9条线(当然不是每个键一条线)的方案。然后我就找了面包板、按键,把硬件给搭建起来,接着写好程序,然后开始调试。结果,完全行不通!因为后来才发现我的所有的横线跟竖线都是短路了的。所以,辛苦了一整天,都白费了。这让我明白,不要对自己设计的方案太过于自信,特别是那种具有开拓性、创造性的方案,在把它实现之前,一定要在图纸上反复推敲、检查。后来就乖乖地上网查资料了。最后采用了比较普遍的一种检测方式:6根线,竖线产生中断,然后马上检测横线,用一根竖线和一根横线定位一个按键。

      交通灯的实现就比较简单了。只需把LED的一端连接一个电阻后再连上电源,另一端连接单片机的I/O,通过I/O输出高低电平来控制LED的亮灭。关键是程序设计。在写程序之前我做了比较详细的分析。那些三岔路、五岔路之类的特殊情况我就没有考虑了。我考虑的是常规的十字路口的交通灯,主要是控制直走的禁与通和左转的禁与通,因为右转是不受其它的干扰的,不考虑。分析完后,写起程序来也很顺利。

      直流电动机的控制。我之前对这个是一无所知的,所以就上网查了很多资料,还上CSDN论坛发了几个求助帖。在论坛上也得到一些人的帮助。最后确定使用三极管搭建H桥进行控制。通过控制H桥的4个开关可以改变流过电机电流的方向,从而控制电机的转向。确定方向后,通过对H桥中的一个开关输送PWM控制其开与关,就可以控制电机的转速。这个项目的实现,我在三极管的使用上耗费了比较多的时间,因为一开始并不知道三极管的原理,不知道怎么样才能使其成为一个可以由程序控制的开关。这回我就学精了,在完全明白三极管的使用之前决不着手搭建硬件。

      这三个项目的硬件我都是焊在了一个大概10cm乘13cm的面包板上的,所以布线、元件显得很拥挤。师兄回来时看了一下我的作品就说,哇,这有点浮夸了。呵呵,其实我是故意这么做的,一来可以锻炼自己的焊接技术,二来那样子看上去让人感到充实。

      这次的收获。首先感触最大的是结构化编程。我先前已在很多的书上看到过说结构化编程很重要的了,可是直到自己亲身体验才真正地明白为什么重要。一开始的时候我是一个项目写一个程序的,结构很简单,爱怎么写就怎么写,自己也不会乱。但是,当我尝试把3个项目的程序整合在一起实现按键自检、按键控制交通灯、按键控制电机转速和方向时,代码量接近一千行,我开始乱了!因为我原先写好的那些程序并不是按结构化的原则写的。通常一个函数实现了几个功能,而且没有标准的接口设计,导致无法进行调用。没有办法,只能从头一个一个函数地重新设计。第二个收获就是关于元件以及走线的布局问题,这个一定要在动手焊接之前确定下来,不能边焊接边想着怎么布局,因为一旦出现错误,硬件的东西是很难更改的。第三个收获,动手之前什么都不懂,不要紧的。你可以问人,可以上网查资料,可以自己思考、探索。慢慢地你就能把问题解决了。

你可能感兴趣的:(编程,嵌入式,交通)