紧接上文,继续来写GPIO口输入输出的输入。跟设置输出一样对按键进行初始化 InputPort key0 = new InputPort(MFPins.CPU.Pins.PE4, true, Port.ResistorMode.PullUp);初始化的参数的含义是可以直接查InputPort的定义,在VS中转到InputPort的定义如下:
public InputPort(Cpu.Pin portId, bool glitchFilter, Port.ResistorMode resistor);
protected InputPort(Cpu.Pin portId, bool initialState, bool glitchFilter, Port.ResistorMode resistor);
protected InputPort(Cpu.Pin portId, bool glitchFilter, Port.ResistorMode resistor, Port.InterruptMode interruptMode);
这一看就明白,其实glitchFilter是消抖滤波,我在用的时候,实际没什么效果。把原来led1的代码改成 led1.Write(key0.Read());这样led1的电平就根据key0的电平来输出, 按F5调试,就可以实现按下按键led0就被点亮。
学嵌入式到这里都想按键要用中断来实现按钮,用C#来实现是极简单的事情。同样也是先初始化,把key0改成中断模式。这里直接贴代码:
using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using System.Threading;
using MFPins;
namespace LED
{
public class Program
{
static InterruptPort key0 = new InterruptPort(MFPins.CPU.Pins.PE4, true, Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeLow);
static OutputPort led1 = new OutputPort(MFPins.CPU.Pins.PE5, true);
public static void Main()
{
OutputPort led0 = new OutputPort(MFPins.CPU.Pins.PB5, true);
OutputPort led1 = new OutputPort(MFPins.CPU.Pins.PE5, true);
key0.OnInterrupt += new NativeEventHandler(Program_OnInterrupt);
while (true)
{
led0.Write(!led0.Read());
Thread.Sleep(500);
// led1.Write(key0.Read());
}
}
static void Program_OnInterrupt(uint data1, uint data2, DateTime time)
{
Thread.Sleep(20);
if (!key0.Read())
{
led1.Write(!led1.Read());
}
}
}
}
InterruptPort key0的初始化一看就明白是什么意思,这里的一设置成 Port.ResistorMode.PullUp上拉电阻模式,战舰板的按键都没有外部上拉电阻,这里人吐槽下原子哥,几分钱的电阻都要省几个下来,要是遇到IO没有内部上下拉电阻的MCU,那就坑死了,哈哈。 key0.OnInterrupt += new NativeEventHandler(Program_OnInterrupt);是定义按键中断函数,可以完全自己定义,不像裸机只能是固定的函数。其它的没什么好说,中断那里做了下消抖。按F5调试,依次按key0就可以控制到led1的亮灭。
用VS敲着代码,感觉VS的代码补齐功能太强了,MDK什么时候能做到这样,对我们来是大好的事情。
文章评论(0条评论)
登录后参与讨论