MATLAB串口操作和GUI编程
|
程序说明 V1.0 2015/2/08 |
MATLAB串口操作和GUI编程 |
|
概述 |
本文介绍了程序AD9512_Serial_GUI的编程思路和功能。该程序设计到MATLAB的图像用户界面编程的基本方法和串口的基本操作。程序目的在于通过串口写控制字对AD9512进行配置(AD9512通过SPI写入寄存器,本程序只是整个控制程序中的一部分)。 |

|
修订历史 |
以下表格展示了本文档的修订过程
[1]. 试验版本表明该版本应用笔记及对应代码没有通过实际验证,同时仿真分析也可能没有进行。试验版对应的版本号为V0.X。 [2]. 写入操作时将 'async' 去掉,基本通过验证,同时由于RS232写入是LSB的顺序,和FPGA端代码不匹配,因此此处更改了serialwrite程序。 |

|
简介 |
本程序基于MATLAB 2014a 编写,本文档中提到的"MATLAB"均指该特定版本MATLAB。 本程序想要实现的功能是:上位机控制AD9512,当然AD9512是和FPGA相连的,而FPGA通过串口和上位机连接。AD9512的控制方法参见其DataSheet,通过SPI配置。从原理上来说,SPI和UART都是全双工的,但是读取过程中也需要写入控制头,此处采用的是半双工方式。 本程序的思路在于将FPGA看作是一个UART转SPI的器件,直接通过上位机配置AD9512。FPGA端的处理暂时不考虑,本MATLAB程序按照需要写入的控制字生成传输程序。以下是本程序涉及到的相关背景知识。 串行通信和RS232 略。(可参考MATLAB帮助 - Data File Management – Serial Port Devices或相关文献) MATLAB的串口操作 串口操作和实际上很简单,大部分从MATLAB的帮助中就可以找到。建立,打开,关闭,删除,写数据,读数据。基本操作就是这些。需要注意的是串口打开后切记要记得关闭。基本操作有 s=serial('COM1'); fopen(s); fwrite(s,100); %写一个字节 fread(s,[1 1],'unit8'); %读一个字节 fclose(s); delete(s); MATLAB的GUI编程 这一个程序还是比较初级的,对于没有接触过MATLAB GUI编程的人来说,参考MATLAB帮助 – MATLAB -GUI Building - GUI Building Basics - Examples and How To-Create a Simple GUIDE GUI,按照其中的例子自己完成一次,并了解其基本原理后,了解这个程序就十分容易了。 |

|
程序设计 |
程序设计流程按以下流程进行:
需求 程序功能分简单,具体来说只需要实现3个功能即可。
界面设计 综合需求考虑需求,界面设计如下
其中,界面最下方准备在后续版本中添加状态输出窗口,以便及时了解程序的运行状态。本程序采用GUI Guide编写图像用户界面,用到了以下组件 statictext:静态文本 button:按钮 buttongroup:按钮组(将这些按钮联系在一起) table:表格 edittext:可编辑文本 panel:面板,把一些控件结合起来 编程中一个相对良好的习惯是给每一控件的"Tag"属性命名(有意义),而不应该使用默认名字。 对于MATLAB的GUI编程,个人观点是(暂时)对于复杂的应用不要采用MATLAB,对于简单的应用可以采用,但是真的很不好用。MATLAB的优势在于其强大的数学计算能力,如果应用不需要这一点(譬如说本应用),那么也不应该使用。 界面控制 此处我想表达的意思在于,当触发某一控件操作后,能够及时改变其他控件的相应状态,防止非法操作的进行。譬如,该程序仅对一个串口进行操作,在正确打开串口后,关闭串口前无法再次执行"打开"操作或是改变串口端口号。 完成这一功能及其简单,只需要采用set命令改变控件状态即可,譬如使得"打开"按钮无法使用(呈"灰色") set(handles.portOpen,'enable','off'); 这些语句大抵都写在Callback函数中。Callback函数大抵是MATLAB GUI编程中最重要的了,如果没记错的话类似java里面的监听。也就是说对某些操作的响应。不同的控件出发callback的过程是不一样的,具体可以参考帮助或是《MATLAB GUI 设计学习手记》。对于界面的几乎所有元素,都可以通过handles访问。 本版程序对部分操作有相应的处理,然而很不完善。这也说明看似简单的东西也需要仔细思索,做起来往往不是那么容易。 功能实现 本程序中有三个函数,包括
将其写出函数而不保留在主程序内的优点暂时看来有两点:其一是主程序过长而且大部分内容是MATLAB自动生成的;其二是对应不同的应用需要修改参数或是输出格式时,只需相应修改这几个函数即可。 串口打开操作较为简单,通过获取可编辑文本框内的端口号打开即可。读写操作类似,以下以写操作为例做简要介绍。 写数据之前需要获取要写的数据,即用户输入表格中的数据。表格在MATLAB中叫做Uitable,里面存放的数据类型是cell array(元胞数组)。(cell是MATLAB的一种数据类型)必须要注意的是,在建立Uitable的时候设置个列的数据类型后,即使不使用set方法改变其类型,Uitable的数据类型也可能会因为你设置的cell的类型的变化而变化。(在建立Uitable的时候,也有相关的警告) 通过使用get方法可以得到表格内的全部数据data,通过data{m,n}可以访问相应位置的内容( data(m,n)访问的是元胞)。本程序中输入格式是字符串,对应应该是两位的16进制字符(程序暂时没有任何的查错能力,任何非法输出会导致程序停止运行)。 serialWrite中的操作就是简单的将16进制的字符串转换为数字,之后通过fwrite函数发送出去。相应的针对AD9512,有每次写入1byte的话,头部应该是0+addr,之后跟寄存器。将cell array中的字符串转换后发送即可,记得最后需要写5A寄存器完成更新的过程。在读取情况下,头部写8+addr就可以等待接收数据了。 |

|
参考 |
MATLAB帮助 MATLAB GUI 设计学习手记 MATLAB编程(第二版)- 菜鸟入门教材 |

|
代码 |
|
MATLAB串口操作和GUI编程的更多相关文章
- 1.JAVA之GUI编程概述
下列内容为本人看毕向东老师java视频教程学习笔记! JAVA GUI图形用户界面编程: Windows 操作系统提供两种操作方式: ...
- 9.JAVA之GUI编程列出指定目录内容
代码如下: /*列出指定目录内容*/ import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import ...
- 10.JAVA之GUI编程弹出对话框Dialog
在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; ...
- 12.JAVA之GUI编程打开与保存文件
功能:java图形用户界面开发,练习打开保存文件 代码如下: import java.awt.FileDialog; import java.awt.Frame; import java.awt.Me ...
- 13.JAVA之GUI编程将程序打包jar
jar基本命令: 目标:将下列MyMenuDemo.java代码打包成jar. 方法如下: 1.把java代码放到d:\myclass目录下. 2.按下快捷键ctrl+r,打开运行窗口,输入cmd后回 ...
- C# 串口操作 ---- 系列文章
C# 串口操作系列(5)--通讯库雏形 通讯库雏形的建立. 串口通讯介绍的高级篇,介绍更高级的抽象,为扩展为通用的客户端通讯库做铺垫,扩展性的考虑,能支持任意类型的流设备. ... 2010-08-0 ...
- 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)
初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...
- Java之GUI编程(一)
GUI全称Graphical User Interfaces,意为图形用户户界面,又称为图形用户接口.GUI指的就是採用图形方式显示的计算机操作用户界面,打个例如吧.我们点击QQ图标,就会弹出一个QQ ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
随机推荐
- 20155233 《Java程序设计》 第十一周课堂练习总结
20155233 <Java程序设计> 第十一周课堂练习总结 测试题目 1.修改教材P74 一行代码 NineNineTable.java, 让执行结果是个三角形: 提交在IDEA或命令行 ...
- 20155235 《Java程序设计》 实验二 实验三 敏捷开发与XP实践
20155235 <Java程序设计> 实验二 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验内容 没有Linux基础的同学建议先学习<Linux基础入 ...
- C语言 迭代部分的代码编写
C语言代码学习 迭代部分 迭代要用到函数部分的知识,一开始我写了计算n!的计算,代码和运行结果如下: 结果只能单一的计算出整数内的值,如果输入负值则结果为返回值1,显然是不对的,根据查书学习以后,知道 ...
- Spring MVC接受参数的注解
一.Request请求发出后,Headler Method是如何接收处理数据的? Headler Method绑定常用的参数注解,根据处理request的不同部分分为四类: A.处理 Request ...
- 探寻ASP.NET MVC鲜为人知的奥秘(2):与Entity Framework配合,让异步贯穿始终
Why 在应用程序,尤其是互联网应用程序中,性能一直是很多大型网站的困扰,由于Web2.0时代的到来,人们更多的把应用程序从C/S结构迁移到B/S结构,这样会带来客户端轻量,部署.试试方便快捷等优势, ...
- Python数据分析开发环境
准备工作 下载并安装最新版本的Anaconda 下载并安装最新版本的Visual Studio Code 编辑器 Tips: 可以选择自己喜欢并且熟悉的编辑器或IDE.如:VIM.Emacs.Note ...
- Linux 内核3.10.5 专场
今天本人十分靠谱地下载了linux 内核的3.10.5版本,这个版本是最新的稳定版. 听路飞大虾(哪个路飞?就是那个戴草帽的橡胶小伙,航海很多时候都很空闲的,于是最近他也开始研读linux 内核了.) ...
- _INTSIZEOF
在_INTSIZEOF中该有的都有了 1.这其中最小非负剩余和最大正余数例子如下: 设n为4,当r为1时,最小非负剩余就是1,最大非正剩余就是1 - 4 = -3,最大正余数为4 - 1 = 3 2. ...
- SQL注入--显注和盲注中过滤逗号绕过
SQL注入逗号绕过 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联 ...
- selenium自动化之加载浏览器的配置文件
做seleniumUI自动化关于选用哪个浏览器方面,对于我来说,火狐浏览器只是用于定位元素,因为有firebug(注意高版本的火狐已经安装不了这个插件了),而真正执行自动化脚本用的是谷歌,感觉谷歌的速 ...
