MF干活——C#点灯神话

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

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

   如同学习每一门编程语言的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 [] { Pins.PF6, Pins.PF7, Pins.PF8, Pins.PF9, Pins.PF10 }; // 阿波罗一号 //var pins = new [] { Pins.PE11, Pins.PE12, Pins.PE13, Pins.PE14, Pins.PE15 }; // 探索者一号 //var pins = new [] { Pins.PB11 }; // 探索者二号 //var pins = new [] { Pins.PC6, Pins.PC7 }; // 雅典娜二号 var pins = new Cpu.Pin[] { Pins.PF8, Pins

.PF9 };
// 雅典娜三号 //var pins = new [] { 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入门来说,并非每个人都可以做得到!

资源下载