一、前言

  终于完成windows通用应用“51单片机汇编”,半年前开始玩WindowsPhone开发的第一个真正意义上的App(还很多缺点=_=)。开发从1月中旬考完试到今天,期间实习了半个月,玩了几天,算起来基本弄了3个多星期吧。不多说,总结总结。

二、开发数据准备

  应用中主要的数据是单片机的汇编指令,我主要用XML文件来储存数据,没有使用SQLLite数据库,数据格式如下图:

xml文件的数据是我手输入的,所以这是比较烦的。(可能有更简洁的办法获取数据)。

  而xml文件每个每个节点对应实例,如Code字节下的实例C#代码如下:

 public Code(String uniqueId, String title, String subtitle, String imagepath, String insertTime, String description, String exmaple, String comment,string collectFlag)
{
this.UniqueId = uniqueId;
this.Title = title;
this.Subtitle = subtitle;
this.ImagePath = imagepath;
this.InsertTime = insertTime;
this.Description = description;
this.Example = exmaple;
this.Comment = comment;
this.CollectFlag = collectFlag;
} public Code()
{
// TODO: Complete member initialization
}
public string UniqueId { get; set; }
public string Title { get; set; }
public string Subtitle { get; set; }
public string ImagePath { get; set; } public string InsertTime { get; set; }
public string Description { get; set; }
public string Example { get; set; }
public string Comment { get; set; }
public string CollectFlag { get; set; }
public override string ToString()
{
return this.Title;
}
}

  从xml文件取出数据则利用Linq to Xml,部分C#代码如下:

 public static async Task<Code> GetCodeAsync(string uniqueId)
{
//await _sampleDataSource.GetSampleDataAsync();
//var matches = _sampleDataSource.Groups.SelectMany(group => group.Items).SelectMany(item=>item.Codes).Where((code)=>code.UniqueId.Equals(uniqueId));
//if (matches.Count() == 1) return matches.First();
//return null;
//Uri dataUri = new Uri("ms-appx:///DataModel/SampleData.xml");
//StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
StorageFolder localfolder = ApplicationData.Current.LocalFolder;
StorageFile XMLfile = await localfolder.CreateFileAsync(FILENAME, CreationCollisionOption.OpenIfExists);
string xmlText = await FileIO.ReadTextAsync(XMLfile);
XDocument xmlObject;
xmlObject = XDocument.Parse(xmlText);
var data = (from query in xmlObject.Descendants("Code")
where query.Element("UniqueId").Value == uniqueId
select new Code((string)query.Element("UniqueId"),
(string)query.Element("Title"),
(string)query.Element("Subtitle"),
(string)query.Element("ImagePath"),
(string)query.Element("StoreFlag"),
(string)query.Element("Description"),
(string)query.Element("Example"),
(string)query.Element("Comment"),
XmlDataService.CheckHasAttributes(query))).FirstOrDefault();
return data;
}

PS:原本在程序中,我是直接从 利用Uri:ms-appx:///DataModel/SampleData.xml获取xml文件,同时后续操作对文件进行数据的改写,这种办法在WindowsPhone8.1完全可行,但在Windows8.1中,该文件是只读的,不能这样操作,否则会出现ACCESSDENY错误。我只能在程序第一次启动时,把SampleData.xml文件复制到LocalFolder里了,然后App以后对数据进行读写,都是对复制的文件进行读写(相比读取Installation里的文件,读取LocalFolder的文件,Windows应用没有发现什么不同,但在WinodwsPhone中,读取数据的操作相对慢点,在我的Lumia620 内存512M,感觉比较卡,不知道有什么办法解决)。负责文件操作主要是在App.xaml.cs,C#代码如下:

public App()
{
this.InitializeComponent(); if ((string)localsetting.Values["IsHubFirstOpen"] != "true")
{
localsetting.Values["IsHubFirstOpen"] = "true";
LoadXmlFile();
}
this.Suspending += this.OnSuspending;
}
....
public static async void LoadXmlFile()
{
string FILENAME = "CodeCopyFile.XML";
StorageFolder localfolder = ApplicationData.Current.LocalFolder;
var dataUri = new Uri("ms-appx:///DataModel/SampleData.xml");
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
await file.CopyAsync(localfolder, FILENAME, NameCollisionOption.ReplaceExisting);
}

二、对Xml文件数据进行改写

  这个App需要对用户的数据进行存储,我直接把用户自己的数据写到原文件中,比如App:

在Windows8.1中:

在WindowsPhone8.1中:

在两种平台都需要把用户自己的笔记保存下来。这里主要是对xml文件进行改写,十分简单,记录笔记方法C#代码如下:

public static async Task<bool> WriteComment(string uniqueId, string comment)
{
StorageFolder localfolder = ApplicationData.Current.LocalFolder;
StorageFile XMLfile = await localfolder.CreateFileAsync(FILENAME, CreationCollisionOption.OpenIfExists);
using (Stream stream = await XMLfile.OpenStreamForReadAsync())
{
XDocument xmlObject = XDocument.Load(stream);
foreach (var codeValue in xmlObject.Descendants("Code").ToArray())
{
if ((string)codeValue.Element("UniqueId") == uniqueId)
{
using (Stream newstream = await XMLfile.OpenStreamForWriteAsync())//这里需要注意,在修改编辑已存在的xml文件时需要设置Length=0,position=0,重新写。
{
DateTime time = DateTime.Now;
var insertTime = string.Format("修改时间:{0}年{1}月{2}日 {3}:{4}", time.Year, time.Month, time.Day, time.TimeOfDay.Hours, time.TimeOfDay.Minutes);
codeValue.SetElementValue("Comment", comment);
codeValue.SetElementValue("StoreFlag", insertTime);//修改时间
newstream.SetLength();
xmlObject.Save(newstream);
// await newstream.FlushAsync();
}
return true;
}
}
} return false;
}

三、UI

  本应用后台核心代码基本是对数据进行读写,这部分代码写好后,我就进行两个平台的UI设计了,说实话比较喜欢UI设计,挺好玩的。因为最开始学的就是WindowsPhone,WindowsPhone平台上的UI设计比较熟悉,比较快弄好,但是弄好后,一些界面在不同分辨率的模拟器手机会有点不同呈现,还需要之后的修改,比较喜欢自己设计的这个页面:

感觉挺好的。

  至于Windows8.1,之前没有学过开发windowsApp,比较费力,而且该应用在Windows上体验应该比较差吧,若屏幕纵向,完全不能看的节奏。在设计在Windows的App的 UI时,很多参考了@MS-UAP  http://www.cnblogs.com/ms-uap/  上面博客园的通用应用设计,比如TopBar基本是用MS-UAP的。

四、后续

  后续的话,代码整理整理。还有设计方面,在应用上小细节加一些WPF动画,感觉挺炫的;应用功能方面,还可以增加单片机定时器、串口速率等计算工具...弄完了,爽!!最后祝大家羊年快乐,心愿成真,身体健康。祝自己在大三下学期找个好实习,大四找个好工作,万事如意!!!

大家感兴趣的可以,下载看看,初次开发,多多建议!

51单片机汇编 Windows Store 链接 :http://apps.microsoft.com/windows/app/51/b8ffef35-7fa7-45d5-9cd5-f2672bf9a8fe

51单片机汇编 WindowsPhone Store 链接:http://www.windowsphone.com/s?appid=3519c5ac-f013-4663-8eb9-fd536fdd8c8f

51单片机汇编 代码:http://pan.baidu.com/s/1sjpyXat   密码:7e6l

Windows 通用应用尝试开发 “51单片机汇编”总结的更多相关文章

  1. Windows 通用应用尝试开发 “51单片机汇编”第二次更新总结

    一.前言 昨天更新了10天前上架到windows8.1平台和windowsphone平台的通用应用“51单片机汇编”,总要是添加了动态磁贴以及ListView的Groupstyle应用.下面主要主要复 ...

  2. codeblocks+SDCC开发51单片机

    说到51,大部分人都是用的是KEIL开发环境,但是KEIL是商业软件,我们一般人都用的是破解版的,如果用于商业就会收到法律诉讼.然而有一款很好的编译器专为51内核而存在.SDCC最大的有点就是开源免费 ...

  3. 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境

    在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...

  4. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

  5. ESP8266 AT指令开发(基于STC89C52单片机): 测试下诱人的程序(51单片机,8266,MQTT远程通信控制)

    前言 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, 简而言之: 51单片机+ESP8266用AT指令实现实现MQTT,(连接的本 ...

  6. 4-51单片机WIFI学习(开发板51单片机自动冷启动下载原理)

    上一篇链接 http://www.cnblogs.com/yangfengwu/p/8743936.html 这一篇说一下自己板子的51单片机自动冷启动下载原理,我挥舞着键盘和鼠标,发誓要把世界写个明 ...

  7. 2-物联网开发标配方案(51单片机程序介绍+WIFI程序介绍)

    上一节  https://www.cnblogs.com/yangfengwu/p/9944438.html 购买云服务器安装MQTT就不用说了,以前写过文章介绍 https://www.cnblog ...

  8. 2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)

    前言:了解就行,不必深究 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8720148.html 源码链接:https://pan.baidu.com/s/1wT ...

  9. Linux下开发STM32单片机

    一开始学习51单片机就是用的MDK这个IDE软件,IDE软件虽然看起来直观好像更加容易入门(因为有界面看起来很形象),但是实际上IDE却是向我们这些入门人员隐藏了背后真实存在的过程,让我们以为编译就是 ...

随机推荐

  1. Using GET_APPLICATION_PROPERTY in Oracle D2k Forms

    Using GET_APPLICATION_PROPERTY in Oracle D2k Forms DescriptionReturns information about the current ...

  2. Oracle Forms 10g Tutorial Ebook Download - Oracle Forms Blog

    A step by step tutorial for Oracle Forms 10g development. This guide is helpful for freshers in Orac ...

  3. FAQ

    1.Baudrare and the speed of Byte. 2. Linux FS and Flash store. 3. SW's Coupling. 4. Protocol and Pro ...

  4. mybatis-mysql操作存储过程

    java代码: @RequestMapping(value = "/testProcedure", method = RequestMethod.GET) public @Resp ...

  5. Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写

    最常见的: 静态地址重定向到带参数的动态地址 rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent ...

  6. C# 实现 Excel文件的数据导入

    前台 <asp:FileUpload ID="fuFile" runat="server" /> 后台 public string GetExcel ...

  7. Perl--学习记录(实时更新)

    标量变量(varibale)以美元符号($)开头,这个符号也成为魔符(sigil).Perl通过魔符来区分它是什么类型的变量. Perl里面大部分变量名称习惯使用全小写.而使用全大写的(比如$ARGV ...

  8. ichecked 全选、反选

    //iChecked复选框的全选.反选var checkBox =function (checkParents){ $(checkParents).find('.minimalCheckBox1'). ...

  9. 关于启用 HTTPS 的一些经验分享(一)

    转载: 关于启用 HTTPS 的一些经验分享(一) 随着国内网络环境的持续恶化,各种篡改和劫持层出不穷,越来越多的网站选择了全站 HTTPS.就在今天,免费提供证书服务的 Let's Encrypt ...

  10. LoadRunner脚本参数化设置

    LoadRunner,是一种预测系统行为和性能的负载测试工具,其中VUG(Virtual User Generator)主要用于虚拟用户生成和脚本编辑.为了实现单用户多次迭代执行脚本,VUG提供了强大 ...