一、前言
终于完成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单片机汇编”总结的更多相关文章
-
Windows 通用应用尝试开发 “51单片机汇编”第二次更新总结
一.前言 昨天更新了10天前上架到windows8.1平台和windowsphone平台的通用应用“51单片机汇编”,总要是添加了动态磁贴以及ListView的Groupstyle应用.下面主要主要复 ...
-
codeblocks+SDCC开发51单片机
说到51,大部分人都是用的是KEIL开发环境,但是KEIL是商业软件,我们一般人都用的是破解版的,如果用于商业就会收到法律诉讼.然而有一款很好的编译器专为51内核而存在.SDCC最大的有点就是开源免费 ...
-
单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境
在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...
-
[学习笔记]15个QA让你快速入门51单片机开发
一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ 22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...
-
ESP8266 AT指令开发(基于STC89C52单片机): 测试下诱人的程序(51单片机,8266,MQTT远程通信控制)
前言 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, 简而言之: 51单片机+ESP8266用AT指令实现实现MQTT,(连接的本 ...
-
4-51单片机WIFI学习(开发板51单片机自动冷启动下载原理)
上一篇链接 http://www.cnblogs.com/yangfengwu/p/8743936.html 这一篇说一下自己板子的51单片机自动冷启动下载原理,我挥舞着键盘和鼠标,发誓要把世界写个明 ...
-
2-物联网开发标配方案(51单片机程序介绍+WIFI程序介绍)
上一节 https://www.cnblogs.com/yangfengwu/p/9944438.html 购买云服务器安装MQTT就不用说了,以前写过文章介绍 https://www.cnblog ...
-
2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)
前言:了解就行,不必深究 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8720148.html 源码链接:https://pan.baidu.com/s/1wT ...
-
Linux下开发STM32单片机
一开始学习51单片机就是用的MDK这个IDE软件,IDE软件虽然看起来直观好像更加容易入门(因为有界面看起来很形象),但是实际上IDE却是向我们这些入门人员隐藏了背后真实存在的过程,让我们以为编译就是 ...
随机推荐
-
.Net Core 之 Ubuntu 14.04 部署过程
No.1 准备应用程序 1. 创建.Net Core Web项目 2. 使用VS2015发布 No.2 安装.Net Core for Ubuntu Ubuntu的安装就不介绍了,百度搜索一大堆.本人 ...
-
基于angularJS和requireJS的前端架构
1.概要描述 1.1.angularJS描述:angularJS是可以用来构建WEB应用的,WEB应用中的一种端对端的完整解决方案.通过开发者呈现一个更高层次的抽象来简化应用的开发.最适合的就是用它来 ...
-
tomcat之 Tomcat 7.0.78 单机多实例配置
前言:JDK(JavaDevelopment Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛的javaSDK. JDK是整个Java ...
-
机器学习技法:06 Support Vector Regression
Roadmap Kernel Ridge Regression Support Vector Regression Primal Support Vector Regression Dual Summ ...
-
centos 挂载ntfs格式的移动硬盘
经查找资料发现,linux也是可以支持ntfs格式分区的,只是需要安装ntfs-3g插件. CentOS挂载ntfs移动硬盘的具体步骤: 1 安装fuse. 下载fuse-2.9.3.tar.gz ...
-
Vasya and a Tree CodeForces - 1076E(线段树+dfs)
I - Vasya and a Tree CodeForces - 1076E 其实参考完别人的思路,写完程序交上去,还是没理解啥意思..昨晚再仔细想了想.终于弄明白了(有可能不对 题意是有一棵树n个 ...
-
磁盘异步I / O在Windows上显示为同步
概要 Microsoft Windows上的文件I / O可以是同步或异步的.I / O的默认行为是同步的,其中调用I / O函数并在I / O完成时返回.异步I / O允许I / O函数立即将执行返 ...
-
VS2013简单的单元测试
安装过程本人在此就不做多余的说明,如果一个程序员连一个软件都无法安装那我也醉了,其次就是希望我们不要为了完成作业而去用VS,下面我具体说一下单元测试. 第一步,文件→新建一个项目,具体操作如下图 打开 ...
-
bzoj1627 / P2873 [USACO07DEC]泥水坑Mud Puddles
P2873 [USACO07DEC]泥水坑Mud Puddles bfs入门. 对于坐标为负的情况,我们可以给数组下标加上$abs(min(minx,miny))$转正(根据题意判断) #includ ...
-
解决oracle11g无法导出空表问题
11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segmen ...