.net micro framework的入门例程-点灯神话-6.使用定时器代替延时函数闪烁LED

来源:互联网 发布:windows设置ntp客户端 编辑:程序博客网 时间:2024/05/22 10:38

可以学学怎么使用定时器


using System;

using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;


using GHIElectronics.Gadgeteer;
namespace my_LED
{
    public class my_led
    {
        static OutputPort lampOutport = new OutputPort((Cpu.Pin)GHI.Hardware.G120.Pin.P1_15,false);
        static InterruptPort switchInterrupt = new InterruptPort(
                                    (Cpu.Pin)GHI.Hardware.G120.Pin.P2_10,
                                    false,
                                    Port.ResistorMode.PullUp,
                                    Port.InterruptMode.InterruptEdgeBoth);
       
        public static void Main()
        {
            
            switchInterrupt.OnInterrupt += new NativeEventHandler(switchInterrupt_OnInterrupt);

            System.Threading.Timer timer = new System.Threading.Timer(
                                            new TimerCallback(flashTick),
                                            null,
                                            5000,
                                            5000);
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
        }

        static void switchInterrupt_OnInterrupt(uint data1, uint data2, DateTime time)
        {
            Monitor.Enter(switchInterrupt);
            switch (data2)
            {
                case 0: lampOutport.Write(true); break;
                case 1: lampOutport.Write(false); break;
                default: break;
            }
            Monitor.Exit(switchInterrupt);
            //throw new NotImplementedException();
        }

        private static void flashTick(object o)
        {
            if (!switchInterrupt.Read())
            {
                return;
            }
            lampOutport.Write(true);
            System.Threading.Thread.Sleep(100);
                
            System.Threading.Monitor.Enter(switchInterrupt);
            if (switchInterrupt.Read())
            {
                lampOutport.Write(false);
            }
            System.Threading.Monitor.Exit(switchInterrupt);               
        }

    }
}

0 0
原创粉丝点击