设为首页收藏本站自媒体平台

研发设计门户网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1166|回复: 0

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

[复制链接]

13

主题

16

帖子

164

积分

版主

Rank: 7Rank: 7Rank: 7

积分
164
发表于 2015-7-14 13:57:36 | 显示全部楼层 |阅读模式

高速电路PCB网,专注于嵌入式方案,信号完整性和电源完整性仿真分析,高速电路PCB设计,各种EDA工具(Cadence\Mentor\\AD\\CAM\ANSYS HFSS)交流学习。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
   紧接上文,继续来写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什么时候能做到这样,对我们来是大好的事情。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

内容正在加载中,请稍候……

QQ|我的微博|小黑屋|手机版|Archiver|YanFa.Tech(gaosupcb Inc.)    

GMT+8, 2024-3-29 07:37 PM , Processed in 0.063924 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表