`
lovecontry
  • 浏览: 1095046 次
文章分类
社区版块
存档分类
最新评论

.Net Micro Framework研究—Windows桌面

 
阅读更多

今天是2007年最后一天,还有几个小时就迎来充满期待的2008年了。元旦放假至今不到48个小时的时间里,我至少有30多个小时坐在电脑前研究MF相关技术,在缺少必要的硬件的情况下,利用现有的资料,扩充了现有的模拟器功能。也希望像我这样的穷人们,借助模拟器,能体验一下以前只有拥有硬件才能调试的功能。

以前为了介绍MF图形方面的功能,我做了一个“北京2008奥运场馆查询”程序,现在看来那个程序,已经不足以展示MF整体功能的强大。既然Windows 2000 /XP/vista,Windows CE(Windows Mobile)程序都有Windows桌面和开始菜单,那么我们的.Net Micro Framework也应该有一个。岂能光说不练,下面就是我们MF Windows的桌面和开始菜单。
看了这个截图,也许有的网友会认为,这有什么难,这不是从windows mobile系统上做了一个截图嘛。实话实说,这样认为还真是想简单了,除了windows图标和小喇叭外,其它部分全部用代码实现,光字体就用了两种不同大小的字库,此外时钟也不仅仅做个样子,也是能正常刷新显示的。开始菜单我们也有,不仅能选择,还能执行对应的功能,不要急,下面我们一一说起。
在上几篇blog上我说了,我做的模拟器又扩展了两个键(菜单键和返回键),别说,这个程序在微软的模拟器上运行起来还真有问题,因为它不支持菜单键,无法弹出菜单来。
菜单上项目也不仅仅是摆设,和模拟器新增的功能结合在一起,做了一个功能测试大荟萃。让我们先看看GPIO测试的功能在“windows桌面”是怎样的?
菜单上选中“GPIO测试”项,按一下键盘上的回车或者单击模拟器上的“OK”键,就进入上图界面。单击模拟右下角的“>>>”项,展开模拟器上的GPIO测试面板。
单击模拟上的I输入开关,桌面上显示的输入信息也同步发生了变化,Q输出是有用户程序控制的,灯会一一亮起或关灭,桌面上的显示也和模拟器像对应(插一句,千万不要以为上面模拟器和模拟LCD中的程序为同一个,两者彼此独立,用户程序通过正常的指令和模拟器交互(当然同样的代码对实际硬件也一样))。
下面我们再看看“AD测试”功能。
通过开始菜单,我们进入“AD测试”模块,相应的,我们单击“<<<”旁边的“GPIO”字符,弹出选择菜单,我们单击“AD”,模拟器呈现AD模拟数据操作面板。
移动滑块,我们发现桌面中的数据同步发生了改变,不好意思,模拟出部分被弹出菜单给挡住了,我们再来一张截图。
QW0是由用户程序控制的,看的出来,模拟器忠实的获取了该数据并显示了出来。说到这里我还得多说几句,其实模拟器的部分程序更像运行在实际硬件系统中的IO驱动程序,spi读写指令操作的是字节数组,所以上传的数据是否浮点型、是否整形等等,全都需要约定,这也决定了不同的厂家对同样的物理信号进行采集,传到MF系统中的数据有可能不同,不过通过特定的换算,最终的结果一定是差不多的。
下面说一下I2C总线,I2C我的理解和串口通信、CAN口通信差不多,都是两个相对独立的设备进行数据交互,I2C和CAN通信一样,需要设置设备地址,此外还需设置一下时钟主频。下图是测试程序界面。
前三个数据是用户程序进行修改的,由于有时间差,二者数据刷新时刻不同,所以不一致,后五个数据是模拟输入的,可以看出桌面上的显示已经可以同步更新了。用这种方式模拟I2C,我也觉得有些不妥,以后有更好的方案我再修改。
细心的用户一定会发现MF“Windows 桌面”右上角的时间在不断的变化,第一幅图是2007年12月31日21:39:23,最后一幅图的时间是22:27:33,也就是说,写这篇文章大概花了我50分钟,这是我在word写这篇文章的用时,接着再花一些时间写到我blog上,我想所有的一切完毕后,我想大概就可以聆听2008年的第一声钟声了。
祝大家新年快乐!!!
附:部分核心代码
public override void OnRender(DrawingContext dc)
{
//绘制背景
dc.DrawRectangle(new SolidColorBrush(ColorUtility.ColorFromRGB(41,113,189)),null , 0, 0, Width, Height);
//菜单条
LinearGradientBrush lgb = new LinearGradientBrush(ColorUtility.ColorFromRGB(51,160,241), ColorUtility.ColorFromRGB(16,75,161), 0, 0, Width, 0);
dc.DrawRectangle(lgb, null, 0, 0, Width, 26);
//开始菜单
dc.DrawImage(Resources.GetBitmap(Resources.BitmapResources.Win), 0, 0);
//分割线
dc.DrawLine(new Pen(Color.White), 26, 0, 26, 25);
//显示“开始”
dc.DrawText("开始", YFFont, Color.White, 29, 7);
//显示小喇叭
dc.DrawImage(Resources.GetBitmap(Resources.BitmapResources.Sound), 320 - 75, 6);
//状态区
dc.DrawRectangle(new SolidColorBrush(ColorUtility.ColorFromRGB(189, 235, 255)), new Pen(Color.Black), 0, Height-26, Width, 26);
//标识
dc.DrawText("叶帆工作室荣誉出品", YFFont, Colors.Gray, 200, 220);
switch (txtState.TextContent)
{
case "GPIO测试":
string strPace = " ";
dc.DrawText("输入: I0I1I2I3I4I5I6I7", YFFont, Colors.Black , 40, 50);
dc.DrawText((input[0].Read() ? "1" : "0") + strPace + (input[1].Read() ? "1" : "0") + strPace + (input[2].Read() ? "1" : "0") + strPace + (input[3].Read() ? "1" : "0") + strPace + (input[4].Read() ? "1" : "0") + strPace + (input[5].Read() ? "1" : "0") + strPace + (input[6].Read() ? "1" : "0") + strPace + (input[7].Read() ? "1" : "0"), YFFont, ColorUtility.ColorFromRGB(255, 255, 0), 78, 75);
dc.DrawText("输出: Q0Q1Q2Q3Q4Q5Q6Q7", YFFont, Colors.Black, 40, 100);
dc.DrawText((output[0].Read() ? "1" : "0") + strPace + (output[1].Read() ? "1" : "0") + strPace + (output[2].Read() ? "1" : "0") + strPace + (output[3].Read() ? "1" : "0") + strPace + (output[4].Read() ? "1" : "0") + strPace + (output[5].Read() ? "1" : "0") + strPace + (output[6].Read() ? "1" : "0") + strPace + (output[7].Read() ? "1" : "0"), YFFont, ColorUtility.ColorFromRGB(255, 255, 0), 78, 125);
break;
case "AD测试":
dc.DrawText("AD: AW0=" + ReadWriteAD((Int16)QAW).ToString() + " QW0=" + QAW.ToString(), YFFont, Colors.White, 60, 100);
break;
case "I2C测试":
//I2C读写
byte[] bytRData = new byte[8];
byte[] bytWData = new byte[3];
bytWData[0] = (byte)IntI2CNum;
bytWData[1] = (byte)(IntI2CNum * 2);
bytWData[2] = (byte)(IntI2CNum * 3);
I2CDevice.I2CTransaction[] i2c = new I2CDevice.I2CTransaction[2];
i2c[0] = I2CBus.CreateReadTransaction(bytRData);
i2c[1] = I2CBus.CreateWriteTransaction(bytWData);
I2CBus.Execute(i2c, 100); //执行
string strPace1 = "";
dc.DrawText("I2C(字节0-7):", YFFont, Colors.Black, 50, 80);
string strInfo = bytRData[0].ToString() + strPace1 + bytRData[1].ToString() + strPace1 + bytRData[2].ToString() + strPace1 + bytRData[3].ToString() + strPace1 + bytRData[4].ToString() + strPace1 + bytRData[5].ToString() + strPace1 + bytRData[6].ToString() + strPace1 + bytRData[7].ToString();
dc.DrawText(strInfo, YFFont, ColorUtility.ColorFromRGB(255, 255, 0), 50, 105);
break;
default:
//.Net Micro Framework
dc.DrawRectangle(new SolidColorBrush(Color.White), new Pen(Color.White), 55, 90, Width - 110, 50);
dc.DrawText(".Net Micro Framework", Resources.GetFont(Resources.FontResources.MF), Colors.Black, 60, 105);
break;
}
//菜单显示
if (bShowMenu)
{
menu.DrawMenu(dc);
}
}
//按键信息
protected override void OnButtonDown(ButtonEventArgs e)
{
switch (e.Button)
{
//按下确定键
case Button.Select:
if (bShowMenu)
{
txtState.TextContent = menu.Text;
bShowMenu = false;
this.UpdateLayout();
}
break;
//按下左键
case Button.Left:
break;
//按下右键
case Button.Right:
break;
//按向上
case Button.Up:
if (bShowMenu)
{
menu.SelectIndex--;
this.UpdateLayout();
}
break;
//按向下
case Button.Down:
if (bShowMenu)
{
menu.SelectIndex++;
this.UpdateLayout();
}
break;
//按下菜单
case Button.Menu:
bShowMenu = !bShowMenu;
if (bShowMenu) menu.SelectIndex = 0;
this.UpdateLayout();
break;
//按下返回键
case Button.Back:
txtState.TextContent = "就绪";
break;
}
}

------------------------------------

附记:本来打算这篇文章作为2007年底最后一篇文章,没有想到从22点半到零点,竟然无法上传成功,只好作为2008年第一篇文章了,这也不错。

分享到:
评论

相关推荐

    .net micro framework file

    .NET Micro Framework(简称.NET MF)是微软开发的一个轻量级.NET框架,主要针对嵌入式设备和物联网(IoT)应用。它提供了基础的.NET编程模型,使得开发者能够使用C#、VB.NET或其他.NET语言来编写高效能的嵌入式程序。...

    .NET Micro Framework Key文件部署说明

    它为开发人员提供了类似于桌面版.NET Framework的功能,但针对资源有限的微控制器进行了优化。在使用.NET Micro Framework进行开发时,为了确保软件的安全性和合法性,开发者需要对开发板进行注册并获取相应的Key...

    微软.NET Micro Framework首次在ADI公司的Blackfin处理器上亮相.pdf

    .NET Micro Framework是微软开发的一个轻量级的.NET运行环境,特别设计用于资源有限的嵌入式设备。这个框架首次被引入到ADI(Analog Devices, Inc.)公司的Blackfin处理器上,为开发者提供了一种新的、高效的方式来...

    DSP中的ADI公司Blackfin处理器支持微软.NET Micro Framework

    标题中的核心知识点是ADI公司的Blackfin处理器现在支持微软的.NET Micro Framework。这是一项重要的技术进步,使得嵌入式系统开发人员能够利用Blackfin处理器的强大性能和.NET Micro Framework的易用性来开发更复杂...

    Microsoft.NET Framework 3.5

    - 面向小型嵌入式系统的 .NET MicroFramework(例如 SPOT 手表); - Silverlight 1.1,用于跨平台、跨浏览器的富互联网应用开发。 #### 二、核心组件 .NET Framework 3.5 包含了大量的类库和功能模块,以下是一些...

    s3c2416_keil_startcode.rar_keil_s3c2416_s3c2416 c#

    首先,我们要明确C#通常用于Windows桌面应用程序和服务器端开发,但在嵌入式领域,由于资源限制,通常使用C或C++。然而,随着.NET Micro Framework的发展,C#也逐渐被引入到了嵌入式开发中,尤其是在具有较强处理...

    .NET Framework 是什么?.docx

    PC 上运行的桌面软件和企业级软件,但可能基于下面两个原因,Microsoft 推出了在移动设备上运行的 .NET Compact Framework(.NET CF):Java 早就有了在移动设备上运行的 J2ME(Java Micro Edition),是 J2SE(Java...

    聊天源码,一个C#写的聊天源码非常不错的版本

    C#是微软公司推出的一种面向对象的编程语言,广泛应用于Windows桌面应用、游戏开发以及服务器端编程。这个聊天源码提供了完整的聊天功能实现,可能是为了教学、研究或者二次开发目的而提供的。 描述中提到,这个...

    IOSharp-netmf-Linux:将嵌入式设备的 MicroFramework 移植到能够运行 C# 代码的 Linux 设备

    .NET Micro Framework 是一个开源平台,可将 .NET 的强大功能和多功能性扩展到小型嵌入式应用程序领域。 桌面程序员可以利用他们现有的 .NET 知识库将复杂的嵌入式概念按时(并在预算内)推向市场。 嵌入式开发人员...

    C#windows.net嵌入式系统开发

    10. **实时操作系统(RTOS)**:虽然.NET Micro Framework自带一个简单的调度器,但某些高级嵌入式应用可能需要更强大的RTOS。了解如何集成RTOS和C#编程,以实现多任务并行处理。 通过本教程的学习,开发者可以掌握...

    Microsoft.NET精髓(PDG)

    .NET Micro Framework是.NET的一个轻量级版本,主要用于嵌入式系统和物联网设备,它提供了在资源有限的硬件上运行.NET应用程序的能力。 随着技术的发展,微软推出了.NET Core,这是一个跨平台、高性能的开放源代码...

    NET 3.5 Namespaces Poster LORES

    包括桌面和服务器上的完整.NET Framework、移动设备上的.NET Compact Framework、SQL Server上的.NET Framework、小型嵌入式系统(如SPOT手表)上的.NET MicroFramework以及跨平台、跨浏览器的Silverlight版本1.1...

    嵌入式系统/ARM技术中的嵌入版.Net源码被微软开放 已免除相关授权费

    .NET Micro Framework是微软针对嵌入式设备开发的一种轻量级框架,主要应用于各种小型设备,如停车计时器、卫星导航设备和智能遥控器等。它的开放源码政策改变了以往的授权模式,使得开发者能够免费获取和使用大部分...

    第三节:基于C#使用开发板避障模块实验.zip

    C#通常被用于桌面应用和游戏开发,但通过.NET Micro Framework或Windows IoT Core,它也可以在微控制器上运行,实现物联网(IoT)项目。 首先,我们需要理解“避障模块”的基本原理。避障模块通常包含传感器,如...

    MINI2440 WINCE6 LED测试程序

    而在嵌入式领域,C#通过.NET Micro Framework提供了对资源有限的设备的支持,使得开发人员能够在MINI2440这样的硬件平台上进行高效编程。 接下来,我们关注MINI2440开发板的GPIO(General-Purpose Input/Output)...

    飞思卡尔宣布推出面向Windows Vista SideShow应用的i.MXS开发工具包

    i.MXS开发工具包不仅支持Windows Vista SideShow应用,同时也支持Microsoft的.NET Micro Framework,这是一个用于构建小型嵌入式设备应用程序的框架。这意味着开发人员可以利用这个工具包创建手表、电视、桌面电话等...

    InTheHand.Net.Personal.zip

    该库适用于Windows桌面应用程序、Windows Phone以及.NET Micro Framework等多种平台。 在使用`InTheHand.Net.Personal.dll`之前,需要确保你的项目引用了这个库。在Visual Studio中,可以通过右键点击项目,选择...

    温度蜂鸣器_C#_

    C#虽然通常用于开发Windows桌面应用或Web应用,但通过.NET Micro Framework或者开源项目如MBED,C#也可以用于嵌入式系统开发。 首先,我们需要理解DS18B20的工作原理。该传感器能够测量摄氏度范围内的温度,并将其...

    基于C# STM32 ISP源码

    这里提到的C# STM32 ISP源码,可能是一个使用.NET Micro Framework的项目,该框架提供了一种在资源受限的嵌入式设备上运行C#代码的方式。开发者可以利用C#的高级特性,如强类型、垃圾回收和丰富的类库,来编写ISP...

    .net开发人员手册

    1. Windows Forms:这是.NET Framework早期的主要UI框架,用于创建桌面应用程序。书中会讲解如何使用控件库、事件处理、布局管理等构建Windows Forms应用。 2. WPF(Windows Presentation Foundation):这是一个更...

Global site tag (gtag.js) - Google Analytics