OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4198|回复: 3

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

[复制链接]

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2014-10-15 21:42:28 | 显示全部楼层 |阅读模式
      紧接上文,继续来写GPIO口输入输出的输入。跟设置输出一样对按键进行初始化    InputPort key0 = new InputPort(MFPins.CPU.Pins.PE4, true,               ort.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的初始化一看就明白是什么意思,这里的一设置成 ort.ResistorMode.PullUp上拉电阻模式,战舰板的按键都没有外部上拉电阻,这里人吐槽下原子哥,几分钱的电阻都要省几个下来,要是遇到IO没有内部上下拉电阻的MCU,那就坑死了,哈哈。   key0.OnInterrupt += new NativeEventHandler(Program_OnInterrupt);是定义按键中断函数,可以完全自己定义,不像裸机只能是固定的函数。其它的没什么好说,中断那里做了下消抖。按F5调试,依次按key0就可以控制到led1的亮灭。
      用VS敲着代码,感觉VS的代码补齐功能太强了,MDK什么时候能做到这样,对我们来是大好的事情。
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2013-11-12
在线时间
29 小时
发表于 2014-10-15 23:04:00 | 显示全部楼层
VS的自动补全确实用起很爽啊,不过keil5也有这个功能了,但是感觉用起不怎么好啊!
作为C#小白,楼主的代码看起还是有点恼火啊!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-15 23:09:44 | 显示全部楼层
不错,谢谢分享。
MDK4.7以上就都有码补齐功能了啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
 楼主| 发表于 2014-10-16 00:14:04 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我知道是有,不过跟VS有相比起来差得太远了
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 06:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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