原创 Microsoft .NET Micro Framework移植开发笔记3之按键及中断

2014-10-15 21:56 1110 13 13 分类: MCU/ 嵌入式 文集: .NET Micro Framework USB移植

    紧接上文,继续来写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什么时候能做到这样,对我们来是大好的事情。

mf
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条