MF干活——C#点灯神话

[来源] 达内    [编辑] 达内   [时间]2012-09-07

如同学习每一门编程语言的Hello World!一样,点灯自然成了单片机入门的HelloWorld。因为单片机上的HelloWorld实在是太难了!

   如同学习每一门编程语言的Hello World!一样,点灯自然成了单片机入门的HelloWorld。因为单片机上的HelloWorld实在是太难了!
& nbsp;   在电子上只有电压电流之类的概念,而对于单片机来说,我们可以认为0代表低电压(低电平、接地),1代表高电压(高电平)。在我们学习的STM32单片机上,高电平其实就是3.3伏!今天我们要点亮的小灯,就是发光二极管,让3.3V和0V分别接在发光二极管的正负(长短)两端,就可以让其发光!
    我们采用的单片机有很多针脚(ZET6是144脚,VET6是100脚),一般是PA0~PA15,PB0~PB15这样子命名。理论上,我们可以把任何一个脚设为高电平或者低电平,通过单片机程序。
    那么,接线上就有两种了:一是二极管一头接一个针脚Pin,另一头接地GND脚,然后控制Pin高电平,就可以点亮;而是接两个针脚,控制让正脚(长)输出高电平,负脚(短)输出低电平,也可以点亮。
& nbsp;   如果用C写这个控制程序,会有点小复杂,因为你需要先设置针脚的工作模式,上拉下拉什么的,然后才可以通过01控制高低电平。我们做C#开发的同学,绝大多数不懂这些。MF在这方面封装得很好,针对指定针脚实例化一个输出端口OutputPort,并指定初始状态true/false,然后就可以读写布尔值了。当然,这个输出端口也可以指定上拉下拉那种模式,但是如果我们不懂,就不用那个构造函数啦。
    一般的开发板上都配有LED,就不需要我们自己去接LED啦!如果想做跑马灯什么的,可以自己去淘宝上买,一毛钱一个,10块钱可以买一百个了,不过记得买杜邦线,哈哈!
    我们来看代码:

< pre style="margin: 0px 40px 0px 20px; white-space: pre-wrap; word-wrap: break-word; font-size: 12px; background-color: rgb(251, 237, 187); border: 1px solid rgb(192, 192, 192); padding: 5px; font-family: Verdana, Helvetica, 微软雅黑, Arial, 宋体, sans-serif; color: rgb(0, 0, 0); font-style: no rmal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial; background-repeat: initial initial; " class="code"> // 红牛二 //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); } < pre style="margin: 0px 0px 0px 22px; white-space: pre-wrap; word-wrap: break-word; font-size: 12px; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); ">   < p style="margin: 5px auto; text-indent: 0px; color: rgb(0, 0, 0); font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: -webkit-auto; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); "> 

< p style="margin: 5px auto; text-indent: 0px; color: rgb(0, 0, 0); font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: -webkit-auto; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); ">     这个程序很简单,首先是实例化一个小灯所在的针脚数组,然后再创建输出端口数组,创建的时候,隔个的设置不同的初始化状态,造成小灯分开来亮的效果。
    每一次大循环,都包含一次小循环,而小循环所做的,就是读出来针脚现在的值,取反后写入。大循环需要暂停一会,要不太快了也看不清楚呀,呵呵!
    然后,小灯就闪动起来了!
& nbsp;   到这里,也许很多人会问,点亮小灯,顶多只能做跑马灯之类的玩具而已。其实这个跟用C语言电灯一样,我们只需要稍稍改变,针脚出来接的不是小灯,而是一个继电器,那么就可以控制220v的强电了啦!剩下的就看自己要做什么了!
    本文可能非常简单,但作为单片机的MF入门来说,并非每个人都可以做得到!

资源下载