using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using Microsoft.SPOT.Emulator;
using Microsoft.SPOT.Hardware;
using System.Drawing.Drawing2D;
namespace Microsoft.SPOT.Emulator.Sample
{
/// <summary>
/// This is the UI for the LCD sample
/// </summary>
public partial class SampleEmulatorForm : Form
{
Emulator _emulator;
//叶帆添加
Gpio.GpioPort[] _port=new Microsoft.SPOT.Emulator.Gpio.GpioPort[5];
delegate void PortWriteDelegate(bool fState);
int intIndex = 0;
bool[] _pressed = new bool[] {false,false,false,false,false };
public SampleEmulatorForm(Emulator emulator)
{
_emulator = emulator;
// Initializing the component on the UI form
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
//Give the buttonCollection focus to allow it to handle keyboard events
//this.buttonCollection.Select();
base.OnLoad(e);
}
public void OnInitializeComponent()
{
//initialize the lcd control with the lcd emulator component
this.lcdDisplay.LcdDisplay = _emulator.LcdDisplay;
//叶帆添加
_port[0] = _emulator.FindComponentById("Pin_Select") as Gpio.GpioPort;
_port[1] = _emulator.FindComponentById("Pin_Up") as Gpio.GpioPort;
_port[2] = _emulator.FindComponentById("Pin_Left") as Gpio.GpioPort;
_port[3] = _emulator.FindComponentById("Pin_Down") as Gpio.GpioPort;
_port[4] = _emulator.FindComponentById("Pin_Right") as Gpio.GpioPort;
}
//按下叶帆添加
private void picKey_MouseDown(object sender, MouseEventArgs e)
{
//OK
Rectangle rect = new Rectangle(31, 40, 70, 50);
intIndex = 0;
if (rect.Contains(e.X, e.Y))
{
intIndex = 0;
}
//UP
GraphicsPath path = new GraphicsPath();
path.AddPolygon(new Point[] {new Point(0,0),new Point(129,0),new Point(100,40),new Point(30,40) });
if (path.IsVisible(e.X, e.Y))
{
intIndex = 1;
}
//LEFT
path.Reset();
path.AddPolygon(new Point[] { new Point(0, 0), new Point(0, 130), new Point(31, 90), new Point(31, 40) });
if (path.IsVisible(e.X, e.Y))
{
intIndex = 2;
}
//DOWN
path.Reset();
path.AddPolygon(new Point[] { new Point(0, 130), new Point(129, 130), new Point(100, 90), new Point(30, 90) });
if (path.IsVisible(e.X, e.Y))
{
intIndex = 3;
}
//RIGHT
path.Reset();
path.AddPolygon(new Point[] { new Point(129, 0), new Point(129, 130), new Point(100, 90), new Point(100, 40) });
if (path.IsVisible(e.X, e.Y))
{
intIndex = 4;
}
picKey.BackgroundImage = imgKey.Images[intIndex+1];
OnButtonStateChanged(intIndex, true);
}
//弹起叶帆添加
private void picKey_MouseUp(object sender, MouseEventArgs e)
{
picKey.BackgroundImage = imgKey.Images[0];
OnButtonStateChanged(intIndex, false);
}
//按下(无法捕捉方向键)
private void SampleEmulatorForm_KeyDown(object sender, KeyEventArgs e)
{
}
//抬起
private void SampleEmulatorForm_KeyUp(object sender, KeyEventArgs e)
{
picKey.BackgroundImage = imgKey.Images[0];
OnButtonStateChanged(intIndex, false);
}
//捕捉方向键
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData)
{
case Keys.Enter:
intIndex = 0;
break;
case Keys.Up:
intIndex = 1;
break;
case Keys.Left:
intIndex = 2;
break;
case Keys.Down:
intIndex = 3;
break;
case Keys.Right:
intIndex = 4;
break;
}
picKey.BackgroundImage = imgKey.Images[intIndex + 1];
OnButtonStateChanged(intIndex, true);
return base.ProcessDialogKey(keyData);
}
//按键状态改变
private void OnButtonStateChanged(int index,bool pressed)
{
if (_port[index] != null)
{
if (_pressed[index] != pressed)
{
_pressed[index] = pressed;
bool val = false;
switch (_port[index].Resistor)
{
case Microsoft.SPOT.Emulator.Gpio.GpioResistorMode.Disabled:
case Microsoft.SPOT.Emulator.Gpio.GpioResistorMode.PullUp:
val = pressed;
break;
case Microsoft.SPOT.Emulator.Gpio.GpioResistorMode.PullDown:
val = !pressed;
break;
}
//Marshal to MicroFramework thread.
//No need to wait for a response. Just post the message
_port[index].BeginInvoke(new PortWriteDelegate(_port[index].Write), !val);
}
}
}
}
}
在下面的网站上,我们还可以下载最新的.Net Micro Framework示例程序,其中“NewPresentation”程序比“Presentation”已高了一个层次,如下图:
(图:MF071030002.jpg)
此外这个温度显示的示例程序也不错,我们可以用上下按钮修改温度值,如下图。
(图:MF071030003.jpg)
新示例下载链接: http://msdn2.microsoft.com/en-us/embedded/bb267253.aspx
不过总体来说,示例程序还是很简陋的,有时间我自己做一个最炫的(当然网友有做得更好的,别忘了与我分享)。
附录:经典.Net Micro Framework应用欣赏
(图:MF071030005.jpg)
我做的模拟器外壳,就是从上图“偷”来的J,不过按钮单击效果倒是费了我不少周折。
想想看,用.Net Micro Framework开发MP3/MP4,电子词典该是多么容易和简单,并且效果一定很炫。(上网查了查 Digi核心小模块要$199,几千两银子呢,介入的厂商越多,相信硬件平台一定会越来越便宜的)。
下面是我开发的模拟器下载地址,有兴趣的朋友可以试一试
http://download.csdn.net/source/274337
相关推荐
在开发过程中,使用MicroFrameworkSDK.MSI这个安装文件,开发者可以在自己的机器上安装.NET Micro Framework 4.0 SDK,从而开始创建、构建和调试针对小型设备的应用程序。安装后,开发者可以在Visual Studio环境中...
这是我自己改造的.Net Micro Framework模拟器,比windows自带的漂亮多了。 覆盖该目录下的同名文件(路径以实际开发包安装位置为准)即可。 C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Tools 支持...
5. **MicroFrameworkSDK.MSI**:这是一个Windows Installer包,包含了.NET Micro Framework SDK的主要组件,如编译器、类库、文档等,用于开发者在本地环境中建立和管理项目。 6. **Micro Framework SDK Release ...
注:比上一个模拟器多了支持方向键控制 这是我自己改造的.Net Micro Framework模拟器,比windows自带的漂亮多了。 覆盖该目录下的同名文件(路径以实际开发包安装位置为准)即可。 C:\Program Files\...
1. **安装和配置.NET Micro Framework模拟器**:了解如何下载和安装模拟器,以及设置开发环境。 2. **创建第一个NETMF项目**:通过一个简单的示例,学习如何使用Visual Studio或其他集成开发环境(IDE)创建.NET ...
### GHI .NET Micro Framework 培训教材知识点解析 #### 一、关于教材与目标受众 本教材《GHI .NET Micro Framework培训教材》专为初学者设计,旨在介绍.NET Micro Framework及其在嵌入式系统开发中的应用。教材...
### GHI .NET MICRO FRAMEWORK入门教程 #### 关于本书 本书主要介绍如何利用Microsoft .NET Micro Framework(简称.NETMF)进行嵌入式系统的开发。.NET Micro Framework将.NET平台的强大功能与Visual Studio的高效...
.NET Micro Framework(简称.NET MF)是由微软开发的一个嵌入式操作系统平台,主要针对资源有限的设备,如物联网(IoT)设备、智能家居组件和小型工业控制器。标题中的".Net MF 模拟器"指的是一个用于模拟.NET MF环境...
.NET Micro Framework 是微软为小型设备开发的一种框架,它允许开发者使用.NET语言编写应用程序,并在Windows CE 上运行。这个框架简化了开发过程,提高了代码的可移植性。 **文件名解析** 在提供的文件名列表中,...
源程序是 http://bansky.net/blog/2008/03/jpeg-camera-and-micro-framework/<br>原作者是在 Tahoe development board 实现的,这个不需要使用硬件,直接就可以通过模拟器抓取图像
通过.NET Micro Framework,我们可以实现各种功能,比如在本案例中提到的测量环境条件、GPS定位以及设置报警。 一、环境监测 1. 温度测量:通常使用数字温度传感器,如DS18B20,它能够提供精确的温度读数,并通过I...
10. **实时操作系统(RTOS)**:虽然.NET Micro Framework自带一个简单的调度器,但某些高级嵌入式应用可能需要更强大的RTOS。了解如何集成RTOS和C#编程,以实现多任务并行处理。 通过本教程的学习,开发者可以掌握...
6. **C#与BREW MP**:虽然BREW MP主要与C++关联,但通过.NET Micro Framework或其他跨平台工具,如Xamarin,理论上可能将C#代码编译成可以在BREW MP环境下运行的形式。但这通常需要额外的工作,并且可能不被广泛支持...
在嵌入式领域,虽然C#不是首选语言,但通过.NET Micro Framework或开源的.NET nanoFramework,可以在某些微控制器上运行C#代码。因此,这个项目可能是在微控制器或嵌入式设备上使用C#来编写驱动程序的。 压缩包内的...
然而,随着.NET Micro Framework的发展,C#在嵌入式领域的应用也日益增加。 1. **VGA(Video Graphics Array)初始化**:VGA是早期的一种标准图形适配器,尽管现在已经被更高级的显示技术取代,但在许多嵌入式系统...
**多平台兼容性**:由于OpenNETCF库是为.NET Compact Framework设计的,因此它能在各种小型设备上运行,如Windows CE、Windows Mobile,甚至是.NET Micro Framework设备。 **错误处理和调试**:库内包含丰富的错误...
在安装的过程中有两个选项——Microchip MPLAB Plugin 和 NetDuino VBB Emulator with .NET Micro Framework for Visual Studio,如果只是普通的模拟仿真的话,可以取消选择此插件。 需要注意的是,VBB 采用了 ...