如同学习每一门编程语言的Hello World!一样,点灯自然成了单片机入门的HelloWorld。因为单片机上的HelloWorld实在是太难了!
在电子上只有电压电流之类的概念,而对于单片机来说,我们可以认为0代表低电压(低电平、接地),1代表高电压(高电平)。在我们学习的STM32单片机上,高电平其实就是3.3伏!今天我们要点亮的小灯,就是发光二极管,让3.3V和0V分别接在发光二极管的正负(长短)两端,就可以让其发光!
我们采用的单片机有很多针脚(ZET6是144脚,VET6是100脚),一般是PA0~PA15,PB0~PB15这样子命名。理论上,我们可以把任何一个脚设为高电平或者低电平,通过单片机程序。
那么,接线上就有两种了:一是二极管一头接一个针脚Pin,另一头接地GND脚,然后控制Pin高电平,就可以点亮;而是接两个针脚,控制让正脚(长)输出高电平,负脚(短)输出低电平,也可以点亮。
如果用C写这个控制程序,会有点小复杂,因为你需要先设置针脚的工作模式,上拉下拉什么的,然后才可以通过01控制高低电平。我们做C#开发的同学,绝大多数不懂这些。MF在这方面封装得很好,针对指定针脚实例化一个输出端口OutputPort,并指定初始状态true/false,然后就可以读写布尔值了。当然,这个输出端口也可以指定上拉下拉那种模式,但是如果我们不懂,就不用那个构造函数啦。
一般的开发板上都配有LED,就不需要我们自己去接LED啦!如果想做跑马灯什么的,可以自己去淘宝上买,一毛钱一个,10块钱可以买一百个了,不过记得买杜邦线,哈哈!
我们来看代码:
// 红牛二 //var pins = new Cpu.Pin[] { Pins.PF6, Pins.PF7, Pins.PF8, Pins.PF9, Pins.PF10 }; // 阿波罗一号 //var pins = new Cpu.Pin[] { Pins.PE11, Pins.PE12, Pins.PE13, Pins.PE14, Pins.PE15 }; // 探索者一号 //var pins = new Cpu.Pin[] { Pins.PB11 }; // 探索者二号 //var pins = new Cpu.Pin[] { Pins.PC6, Pins.PC7 }; // 雅典娜二号 var pins = new Cpu.Pin[] { Pins.PF8, Pins.PF9 }; // 雅典娜三号 //var pins = new Cpu.Pin[] { Pins.PF8, Pins.PF9 }; var leds = new OutputPort[pins.Length]; for (int i = 0; i < pins.Length; i++) { leds[i] = new OutputPort(pins[i], i % 2 == 0); } //var led4 = new Led4(); for (int i = 0; i < 20000; i++) { for (int j = 0; j < leds.Length; j++) { leds[j].Write(!leds[j].Read()); } //led4.Display(i); //led4.Value = i; Thread.Sleep(50); }
这个程序很简单,首先是实例化一个小灯所在的针脚数组,然后再创建输出端口数组,创建的时候,隔个的设置不同的初始化状态,造成小灯分开来亮的效果。
每一次大循环,都包含一次小循环,而小循环所做的,就是读出来针脚现在的值,取反后写入。大循环需要暂停一会,要不太快了也看不清楚呀,呵呵!
然后,小灯就闪动起来了!
到这里,也许很多人会问,点亮小灯,顶多只能做跑马灯之类的玩具而已。其实这个跟用C语言电灯一样,我们只需要稍稍改变,针脚出来接的不是小灯,而是一个继电器,那么就可以控制220v的强电了啦!剩下的就看自己要做什么了!
本文可能非常简单,但作为单片机的MF入门来说,并非每个人都可以做得到!
MF是微软的开源嵌入式系统框架,经过了很多年的发现,在国内一直很冷淡,可能是因为开发板极为昂贵并且移植困难吧!我们新生命团队经过不懈努力,总算找到了相对比较便宜的MF开发板(淘宝200元左右),还有可以跑MF的核心板(淘宝最低售价只需要46元);并且我们掌握了一些基础的移植技术,可以把 MF移植到比较热门和高性价比的多款板子上去。我们欢迎更多志趣相投的朋友一起来研究MF!
.Net Micro Framework,让我们尽可能的在不懂单片机的情况下做一些简单的单片机控制系统!
End