MiniGUI_for_uCOS实验

MiniGUI_for_uCOS实验
MiniGUI_for_uCOS实验

第1章 MiniGUI图形界面实验

1.1 MiniGUI for uC/OS-II移植实验

1.实验目的

(1) 了解MiniGUI的基本特点和MiniGUI源文件目录结构。

(2) 掌握MiniGUI for uC/OS-II移植的基本方法和应用配置。

2.实验设备

硬件:PC机一台

MagicARM2200教学实验开发平台一套

软件:Windows98/XP/2000系统,ADS 1.2集成开发环境

μC/OS-II操作系统(V2.52)

MiniGUI-STR(for uC/OS-II)软件

3.实验内容

学习移植MiniGUI-STR(for uC/OS-II)软件到MagicARM2200的基本方法,然后编写一个简单的MiniGUI应用程序,使用MessageBox函数创建一个消息框,消息框中显示字符串“Hello MiniGUI!”。

4.实验预习要求

(1) 仔细阅读<>第1章的内容,了解MagicARM2200实验箱的硬件结构,注意彩色液晶屏驱动电路和键盘电路。

(2) 阅读MiniGUI的文档<>和<>,了解MiniGUI的基本特点和应用配置选项,以及应用程序的编写。

5.实验原理

(1) MiniGUI简介

MiniGUI项目的最初目标是为基于Linux的实时嵌入式操作系统提供一个轻量级的图形用户界面支持系统,发展到今天,MiniGUI已进入成熟和稳定阶段,并且所支持的操作系统已不仅仅限于Linux,它还可以在uClinux、uC/OS-II、eCos、VxWorks等系统上运行。

MiniGUI为应用程序定义了一组轻量级的窗口和图形设备接口,利用这些接口,每个应用程序可以建立多个主窗口,然后在这些主窗口中创建按钮、编辑框等控制。MiniGUI还为用户提供了丰富的图形功能,以显示各种格式的位图并在窗口中绘制复杂图形。

MiniGUI和嵌入式操作系统的关系如图1.1所示,基于 MiniGUI 的应用程序一般通过ANSI C 库以及 MiniGUI 自身提供的 API 来实现自己的功能。

图1.1 MiniGUI 和嵌入式操作系统的关系

MiniGUI是由北京飞漫软件技术有限公司拥有版权并主持和维护的自由软件,相关信息可访问https://www.360docs.net/doc/b7983150.html,网站。

MiniGUI-STR功能特性

(2)

MiniGUI-STR版本具有以下功能特性:

支持MiniGUI-Threads、MiniGUI-Lite和MiniGUI-Standalone三种运行模式;

完整的窗口/消息API及基本的绘图API;

两种GAL图形引擎:FrameBuffer和qvfb;

字符集的支持:ISO8859-1~ISO8859-16、GB2312和BIG5;

RBF及VBF字体的支持,在资源包中包含设备字体:

rbf-fixed-rrncnn-8-16-ISO8859-1、rbf-fixed-rrncnn-16-16-GB2312.1980-0、

rbf-fixed-rrncnn-16-16-BIG5、vbf-Courier-rrncnn-10-15-ISO8859-1、

vbf-Helvetica-rrncnn-15-16-ISO8859-1、vbf-Times-rrncnn-13-15-ISO8859-1 支持Windows BMP、GIF、JPEG和PNG图像文件格式;

窗口支持PC 3D、Flat和Phone三种风格;

对键盘布局的支持;

对GB2312全拼输入法的支持;

基本控制包括:

Static、Button、Simple edit box、Single-line edit box、Multiple-line edit box、

ListBox、ComboBox、ProgressBar、NewToolbar、MenuButton、TrackBar、

PropertySheet、ScrollView

说明:由于uC/OS-II操作系统本身特点和限制,MiniGUI-STR for uC/OS-II版本有些功能是不能使用的,比如只支持MiniGUI-Threads运行模式、只能使用内建资源、不支持JPEG、PNG图像文件、不能使用FrameBuffer图形引擎等等。

(3) MiniGUI-STR软件包

用于MagicARM2200教学实验开发平台的MiniGUI-STR for uC/OS-II共有2个目录,说明如下:

MiniGUI_Lib,MiniGUI-STR函数库源代码,即libminigui。

Libc,针对于uC/OS-II操作系统的POSIX线程库。

MiniGUI的使用

(4)

要在目标板上运行MiniGUI for uC/OS-II应用程序,首先要使用缩主机(即PC机)对MiniGUI的源代码进行编译(交叉编译),生成MiniGUI静态链接库文件(如MiniGUI_Lib.a)。然后,MiniGUI应用程序也在缩主机上进行交叉编译,并且与MiniGUI静态链接库、POSIX 线程库链接生成*.axf映象文件或*.bin二进制文件。最后,将MiniGUI应用程序(*.axf映象文件或*.bin二进制文件)下载到目标板,并运行。

当然,由于不同目标机的图形显示设备和输入设备是不一致的,所以用户需要为MiniGUI编写相应的图形引擎和输入引擎(即驱动程序),再与MiniGUI的源代码一起交叉编译生成MiniGUI静态链接库文件。

MiniGUI的GAL的移植

(5)

从MiniGUI v0.3.xx版本开始,MiniGUI引入了图形抽象层和输入抽象层(Graphics and Input Abstract Layer,即GAL和IAL)的概念,它定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的的图形操作和输入处理都建立在抽象接口之上。而用实现这一抽象接口的底层代码称为“图形引擎”和“输入引擎”,类似于操作系统中的驱动程序。

MiniGUI-STR不支持newgal功能,所以需要按照老的GAL接口来编写适合于MagicARM2200实验箱的图形引擎。首先,在MiniGUI_Lib\libminigui-str-1.6.2-ucosii\src\ga l\native目录下的commlcd.c文件中编写老的GAL接口的几个接口函数,代码参考程序清单1.1。

程序清单1.1 移植的图形引擎—GAL接口函数

#include

#include

#include

#include "native.h"

#ifdef _NATIVE_GAL_COMMLCD

#include "lcddrive.h"

#include "fb.h"

static PSD fb_open(PSD psd)

{

PSUBDRIVER subdriver;

LCM_Init();

fprintf(stderr, "GAL Common LCD engine: Init LCM!\n");

// 设置液晶属性

psd->planes = 1; // 单屏

psd->xres = GUI_LCM_XMAX;

psd->yres = GUI_LCM_YMAX;

// 设置屏幕颜色深度

psd->bpp = 8;

psd->linelen = psd->xres; // 一行使用的字节数

psd->ncolors = 1 << (psd->bpp); // 最大颜色数

// 分配Framebuffer空间

psd->addr = malloc(GUI_LCM_XMAX * GUI_LCM_YMAX ); // 每一个点要1字节数据if ( ! psd->addr )

{ fprintf(stderr, "GAL Common LCD engine: Couldn't allocate buffer!\n");

return(NULL); // 内存不足,初始化失败(返回NULL)

}

psd->gr_mode = MODE_SET; // 画图模式为设置模式(非AND、XOR模式)

psd->size = 0; // 分配的内存(由fb驱动程序设置)

psd->flags = PSF_MEMORY; // 采用MEMORY驱动方式

psd->flags |= PSF_MSBRIGHT;

// 设置象素格式

psd->pixtype = PF_TRUECOLOR332;

subdriver = select_fb_subdriver(psd);

if (!subdriver)

{

fprintf(stderr,"GAL Common LCD engine: No driver for bpp %d\n", psd->bpp);

goto fail;

}

if (!set_subdriver(psd, subdriver, TRUE))

{

fprintf(stderr,"GAL Common LCD engine: Driver initialize failed for bpp %d\n", psd->bpp);

goto fail;

}

return psd;

fail:

return NULL;

}

/* close framebuffer*/

static void fb_close (PSD psd)

{

if (psd->addr) free(psd->addr);

psd->addr = NULL;

}

static void fb_setpalette (PSD psd, int first, int count, GAL_Color *palette) {

}

static void fb_getpalette (PSD psd, int first, int count, GAL_Color *palette) {

}

static void update_rect(PSD psd, int l, int t, int r, int b)

{

int bak;

if(l > r)

{

l;

=

bak

l = r;

bak;

r

=

}

if(t > b)

{

t;

bak

=

b;

t

=

bak;

=

b

}

LCM_UpdateRects(l, t, r +1 - l, b +1 - t, psd->addr);

}

SCREENDEVICE commlcd = {

0, 0, 0, 0, 0,

0, 0, 0, 0, 0,

0, 0, 0, 0, 0,

0, 0, 0, 0,

NULL, NULL,

fb_open,

fb_close,

fb_setpalette,

fb_getpalette,

native_gen_allocatememgc,

fb_mapmemgc,

native_gen_freememgc,

native_gen_clippoint,

native_gen_fillrect,

NULL, /* DrawPixel subdriver */

NULL, /* ReadPixel subdriver */

NULL, /* DrawHLine subdriver */

NULL, /* DrawVLine subdriver */

NULL, /* Blit subdriver */

NULL, /* PutBox subdriver */

NULL, /* GetBox subdriver */

NULL, /* PutBoxMask subdriver */

NULL, /* CopyBox subdriver */

update_rect

};

#endif /* _NATIVE_GAL_COMMLCD */

在程序清单1.1中,宏GUI_LCM_XMAX和GUI_LCM_YMAX均在lcddrive.h头文件中定义,分别表示液晶x轴和y轴方向的点像素。比如320x240液晶屏,则定义GUI_LCM_XMAX为320,GUI_LCM_YMAX为240。初始化液晶模块函数LCM_Init和更新液晶显示函数LCM_UpdateRects均在液晶驱动程序(lcddrive.c文件)中实现。

然后,在MiniGUI_Lib\libminigui-str-1.6.2-ucosii\src\gal\native目录建立液晶驱动程序文件lcddrive.c和lcddrive.h,液晶驱动程序是根据液晶模块和硬件连接电路来设计的,具体代码请参考产品光盘上的源文件。由于在lcddrive.c文件中使用了LPC2294的头文件lpc2294.h,所以要将此文件复制到此目录下。

MiniGUI的IAL的移植

(6)

MiniGUI通过INPUT数据结构来表示输入引擎,此数据结构的定义是在MiniGUI_Lib\libminigui-str-1.6.2-ucosii\src\include\ial.h文件中,具体代码请参考产品光盘上的源文件。INPUT数据结构定义了很多函数指针,这些函数指针就是用来指向设定的IAL 的对应函数,从而实现硬件的输入。

在INPUT数据结构中,MiniGUI是使用init_input、term_input两个函数指针作为与IAL 可见的接口,所以用户IAL程序通用接口只需要提供这两个函数(因为调用init_input程序正确初始化后,MiniGUI就可以间接访问用户IAL的其它功能函数)。

首先,在MiniGUI_Lib\libminigui-str-1.6.2-ucosii\src\ial目录下comminput.c文件中编写IAL接口的几个接口函数,代码参考程序清单1.2。

程序清单1.2 移植的输入引擎—IAL接口函数

#include

#include

#include "common.h"

#ifdef _COMM_IAL

#include "minigui.h"

#include "misc.h"

#include "ial.h"

#include "comminput.h"

//////////////////////////////////////////////////////////////////////////////

// COMM_IAL相关函数声明(在mgdrv-ucosii.c中实现)

extern int comm_ts_getdata (short *x, short *y, short *button);

extern int comm_kb_getdata (short *key, short *status);

extern int comm_wait_for_input(void);

/////////////////////////////////////////////////////////////////////////////

// 引擎所所需要的变量

static int MOUSEX = 0, MOUSEY = 0, MOUSEBUTTON = 0; // 鼠标

static short KEYCODE = 0, KEYSTATUS = 0; // 按键

// 通知底层引擎更新鼠标信息(返回1)

static int mouse_update (void)

{

return 1;

}

// 获得最新的鼠标(x,y)坐标值

static void mouse_getxy (int *x, int* y)

{

*x = MOUSEX;

*y = MOUSEY;

}

// 获取鼠标按钮状态

// 该函数的返回值可以是IAL_MOUSE_LEFTBUTTON(表示左键按下)、

// IAL_MOUSE_MIDDLEBUTTON(表示中键按下)、IAL_MOUSE_RIGHTBUTTON // (表示右键按下)等值"或"的结果。

static int mouse_getbutton (void)

{

return MOUSEBUTTON;

}

/////////////////////////////////////////////////////////////////////////////

static unsigned char kbd_state[NR_KEYS]; // 键盘状态缓冲区

// 通知底层引擎更新键盘信息(更改kbd_state数组,表明有按键)

static int keyboard_update (void)

{

kbd_state[KEYCODE] = KEYSTATUS;

return KEYCODE + 1;

}

// 获取键盘状态,返回一个字符数组(包括多个按键的状态),其中包含以扫描码索引的键盘按键状态。static const char* keyboard_getstate (void)

{

return kbd_state;

}

/////////////////////////////////////////////////////////////////////////////

static int wait_event( int which, fd_set *in, fd_set *out, fd_set *except,

struct timeval *timeout)

{

int retvalue;

retvalue = comm_wait_for_input (); // 查询键盘或鼠标事件(需要挂起任务)

if (retvalue & IAL_MOUSEEVENT) // 鼠标事件

{

// 如果是触摸屏,则有button按键时才会更新MOUSEX、MOUSEY

comm_ts_getdata (&MOUSEX, &MOUSEY, &MOUSEBUTTON);

retvalue = IAL_MOUSEEVENT;

}

else

{

if (retvalue & IAL_KEYEVENT) // 键盘事件

{

comm_kb_getdata (&KEYCODE, &KEYSTATUS);

if (kbd_state[KEYCODE] == KEYSTATUS) return -1;

retvalue = IAL_KEYEVENT;

}

else

{

retvalue = -1;

}

}

return(retvalue);

}

/////////////////////////////////////////////////////////////////////////////

// 输入引擎的初始化函数。该函数负责对INPUT结构的其它成员赋值。

BOOL InitCOMMInput (INPUT* input, const char* mdev, const char* mtype)

{

// 在此函数调用之前必须初始化输入设备硬件。

// (可以在此调用初始化函数)

input->update_mouse = mouse_update;

input->get_mouse_xy = mouse_getxy;

input->set_mouse_xy = NULL; // 上层调用该函数可以设置鼠标位置到新的坐标值。

input->get_mouse_button = mouse_getbutton;

input->set_mouse_range = NULL; // 设置鼠标的活动范围。

input->suspend_mouse= NULL;

input->resume_mouse = NULL;

input->update_keyboard = keyboard_update;

input->get_keyboard_state = keyboard_getstate;

input->suspend_keyboard = NULL; // 暂停键盘设备的读取,用于虚拟控制台切换。

input->resume_keyboard = NULL; // 继续键盘设备读取,用于虚拟控制台切换。

input->set_leds = NULL; // 设置键盘的锁定LED。

input->wait_event = wait_event; // 上层调用该函数等待底层引擎上发生输入事件

return(TRUE);

}

// 输入引擎的终止清除函数

void TermCOMMInput (void)

{

}

#endif /* _COMM_IAL */

如程序清单 1.2所列,在等待底层引擎发生输入事件函数wait_event中,先调用comm_wait_for_input函数等待输入事件,然后根据事件类型调用comm_ts_getdata函数或comm_kb_getdata函数来读取鼠标或键盘信息。comm_wait_for_input、comm_ts_getdata和comm_kb_getdata函数均在底层键盘驱动程序(comm_drive.c文件)中实现。

然后,在MiniGUI_Lib\libminigui-str-1.6.2-ucosii\src\ial目录建立键盘驱动程序文件comm_drive.c,实现触摸屏、键盘事件输入以及键码转换,具体代码请参考产品光盘上的源文件。底层驱动程序文件comm_drive.c把MagicARM2200实验箱上的16个按键定义为0~9和算术运算符等功能,如图1.2所示。

7 (S8键)

8

(S9键)

9

(S10键)

/

(S16键)

4 (S5键)

5

(S6键)

6

(S7键)

*

(S15键)

1 (S2键)

2

(S3键)

3

(S4键)

-

(S14键)

0 (S1键)

·

(S11键)

+

(S12键)

Enter

(S13键) 图1.2 输入引擎定义的按键功能

(7)

交叉编译MiniGUI

运行时配置文件

MiniGUI具有众多的资源,比如各种字体、光标、图形引擎和输入引擎等等,支持用户运行时(相对于编译时而言)进行相应的系统参数配置。MiniGUI for uC/OS-II是使用内建式资源,其运行时配置文件为MiniGUI_Lib\libminigui-str-1.6.2-ucosii\src\sysres\mgetc.c文件,此文件需要根据实际硬件平台进行修改。为了让用户最少的改动mgetc.c,可以把与硬件平台相关的配置项抽取出来,独立保存到一个以目标硬件平台命名的文件中(比如mgetc-ucosii-xxx.c),然后在mgetc.c包含(include)此文件即可。对于MagicARM2200教学实验开发平台,在mgetc.c文件中包含目标板的特定配置文件mgetc-ucosii-MagicARM2200.c,文件内容如程序清单1.3所列。

程序清单1.3 针对目标板的配置文件

#if defined(__UCOSII__)

static char *SYSTEM_V ALUES[] = {"commlcd", "comm", "/dev/mouse", "IMPS2"};

static char *FBCON_V ALUES[] = {"32x240-8bpp"};

static char *SYSTEMFONT_KEYS[] =

{"font_number", "font0", "font1", "font2", "default", "wchar_def", "fixed", "caption", "menu", "control"};

static char *SYSTEMFONT_V ALUES[] =

{

"3","rbf-fixed-rrncnn-8-16-ISO8859-1", "*-fixed-rrncnn-*-16-GB2312", "*-Helvetica-rrncnn-*-16-GB2312", "0", "1", "1", "2", "2", "2"

};

#endif

如程序清单1.3所列,SYSTEM_V ALUES数组的第1项用来指定图形引擎,第2项用来指定输入引擎,第3、4项是鼠标设备和协议类型,在MiniGUI for uC/OS-II中这两项没有意义。FBCON_V ALUES数组用于指定液晶屏的分辨率和颜色深度。SYSTEMFONT_KEYS 数组和SYSTEMFONT_V ALUES数组用于定义MiniGUI使用的系统字体,各项的具体含义请参考《MiniGUI用户手册》的运行时配置文件说明部分。

编译配置

MiniGUI是可配置的(比如是否支持某种字体,是否支持光标显示,使用哪个IAL输入引擎等等),MiniGUI for uC/OS-II的配置文件为MiniGUI_Lib\libminigui-str-1.6.2-ucosii\conf ig.h文件,通过配置此文件,然后编译MiniGUI(for uC/OS-II)函数库源代码,即可生成具有相应功能的库文件。以下介绍部分重要配置宏的功能。

_INCORE_RES:内建资源支持,uC/OS-II不包含文件系统,此宏必须定义为1;

_DUMMY_IAL:若需要使用dummy输入引擎,则定义此宏为1;

_COMM_IAL:MiniGUI for uC/OS-II的通用输入引擎(IAL移植就是使用这个引擎),使用时定义此宏为1;

_NATIVE_GAL_COMMLCD:MiniGUI for uC/OS-II的通用图形引擎(GAL移植就是使用这个引擎),使用时定义此宏为1;

_PC3D_WINDOW_STYLE:MiniGUI for uC/OS-II的窗口风格设置,若此宏定义为1,表示使用手持终端的风格(pc3d);

_PHONE_WINDOW_STYLE:MiniGUI for uC/OS-II的窗口风格设置,若此宏定义为1,表示使用类似于PC的三维风格(phone);

_GB_SUPPORT:GB2312中文字符集支持。如果需要使用中文,定义此宏为1;

_RBF_SUPPORT:RBF字体支持,必须设置为1。

_INCORERBF_GB16:需要中文16点阵字体的支持,则定义此宏为1;

_INCORERBF_LATIN1_16:需要英文16点阵字体支持(英文12点阵字体的支持是默认的,不需要配置),则定义此宏为1;

__NOLINUX__:非linux操作系统必须定义此宏为1;

__UCOSII__:MiniGUI for uC/OS-II必须定义此宏为1。

编译操作

使用ADS 1.2集成开发环境打开MiniGUI_Lib目录下的MiniGUI_Lib工程,然后使用鼠标单击MiniGUI_Lib工程窗口的Make图标按钮,如图1.3所示,开始编译连接MiniGUI 的源文件。

图1.3 编译MiniGUI_Lib工程

编译通过后,即可生成MiniGUI_Lib.a库文件(在MiniGUI_Lib\MiniGUI_Lib_Data\Debug Rel目录下)。

注意:在MiniGUI_Lib\ucos_include\os_cfg.h文件中的一些宏定义要与应用工程(比如后面介绍的GUI_Sample工程)中的定义一致,因为MiniGUI for uC/OS-II会使用到其中的部分宏,如OS_TICKS_PER_SEC。

libextc.a库文件说明

在Libc目录下的libextc.a库文件,是针对于uC/OS-II操作系统的POSIX线程库,同时该库文件还提供了malloc/free等堆内存管理接口和printf/sprintf等I/O接口。

libextc.a库文件是按照MagicARM2200教学实验开发平台进行移植的,它所使用的资源如下所示:

动态内存的大小为3M字节;

1个uC/OS-II的互斥型信号量,优先级定义为42;

每增加一个MiniGUI线程,需要的信号量至少增加3个;

最大POSIX线程(即MiniGUI线程)数为16个,任务(即MiniGUI线程)优先级范围是43~58;

每1个MiniGUI线程堆栈大小为8K字节。

6.实验步骤

(1) 按照实验原理说明,在PC机上编译MiniGUI_Lib工程(即MiniGUI-STR所有源程

序),生成MiniGUI_Lib.a库文件。

(2) 必须先做《ARM嵌入式系统实验教程(三)》第2.27章的“触摸屏实验”,校准触摸

屏并保存相关参数(保存到E2PROM)。或者运行产品配套光盘上的ChkTouch项目程序,重新校准触摸屏并保存相关参数。

(3) 在本地硬盘上建立一个目录uCOS-II,将LPC2200的uC/OS-II移植代码(即arm和

Arm_Pc两个目录)复制到uCOS-II 目录下。

其中,LPC2200的uC/OS-II移植代码(即arm和Arm_Pc两个目录)可以在产品光盘上找到。

(4) 在uCOS-II目录下再建立一个SOURCE目录,将uC/OS-II v2.52的11个内核源文

件复制到SOURCE目录下。

(5) 在uCOS-II下建立一个目录MiniGUI,将MiniGUI_Lib.a和libextc.a(针对于uC/OS-II

操作系统的POSIX线程库)复制到MiniGUI目录下,并且将MiniGUI_Lib\libminig ui-str-1.6.2-ucosii\include目录整个目录复制到MiniGUI目录下。将MiniGUI_Lib\lib minigui-str-1.6.2-ucosii\config.h文件复制到MiniGUI目录下,并改名为MiniGUI_conf ig.h。至此,MiniGUI目录的内容如图1.4所示。

图1.4 应用程序的MiniGUI目录内容

(6) 打开ADS 1.2集成开发环境,使用LPC2200专用工程模板“ARM Executable Image

for UCOSII(MaigcARM2200)”来建立一个工程,工程名为GUI_Sample,工程建立在uCOS-II目录下。

(7) 在工程管理窗口中建立一个MiniGUI组,把uCOS-II\MiniGUI目录下的两个库文件

添加到MiniGUI组中。在工程目录的src目录下建立一个messagebox子目录,并在messagebox目录下新建MiniGUI应用程序messageb.c并编写实验代码,再把此文件加入到GUI_Sample工程的usr组中。

(8) 在usr组中的main.c文件添加用于启动uC/OS-II操作系统的代码,如程序清单1.4

所列。首先要调用minigui_app_entry函数初始化动态内存管理模块和线程模块,并创建一个MiniGUI的主线程(由minigui_app_entry函数实现)。然后建立uC/OS-II 的一个任务Task0,任务的主要作用是调用TargetInit函数启动系统时钟,并负责读取键盘输入然后给MiniGUI发送按键消息。另外,在Task0任务中,还需要从E2PROM中读取触摸屏校准的数据,然后再建立一个触摸屏驱动任务Task1,负责读取触摸屏的触摸输入。

程序清单1.4 main.c文件源程序

#include "config.h"

#include "stdlib.h"

extern void minigui_app_entry (void);

// 定义输入消息数据结构

typedef struct TOUCH_KEY

{ uint8 sta; // 状态字,d1位为1时表示按键输入,d0为1时表示触摸屏输入;

// d7为1时表示按键/触摸屏按下,为0时表示放开。

uint8 key; // 按键码(0--15)

// 触摸屏输入的坐标

uint16 x;

uint16 y;

} TouchKey_Sta;

// 定义用于保存触摸屏(0,0)和两个校准点的坐标的电压值

uint16 g_vx_min, g_vy_min;

uint16 g_vinx0, g_viny0;

uint16 g_vinx1, g_viny1;

uint16 touch_wide, touch_high;

/* 按键消息邮箱 */

OS_EVENT *TouchKeyMbox = NULL; // 按键消息邮箱

#define TaskStkLengh 64 // Define the Task0 stack length 定义用户任务0的堆栈长度

OS_STK TaskStk [TaskStkLengh]; // Define the Task0 stack 定义用户任务0的堆栈

任务0

Task0

void

*pdata); //

T ask0(void

OS_STK Task1Stk [TaskStkLengh]; // Define the Task1 stack 定义用户任务1的堆栈

void

Task0

任务1

*pdata); //

T ask1(void

int main(void)

{

OSInit

();

OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 10);

minigui_app_entry();

TouchKeyMbox = OSMboxCreate(NULL); // 建立一个邮箱,用于传递按键消息

OSStart();

return(0);

}

/**************************************************************************** * 名称:TestTouch()

* 功能:从E2PROM中读取触摸屏校准参数。

* 入口参数:无

* 出口参数:返回1表示已校准过,返回0表示没有校准。

* 说明:E2PROM中的数据结构定义如下。

* 0xE0、0xE1保存触摸屏是否校准标志,为0x5A、0xA5时表示校准过;

* 0xE2、0xE3保存(0,0)点坐标的电压转换值g_vx_min;

* 0xE4、0xE5保存(0,0)点坐标的电压转换值g_vy_min;

* 0xE6、0xE7保存第1个校验点的电压转换值g_vinx0;

* 0xE8、0xE9保存第1个校验点的电压转换值g_viny0;

* 0xEA、0xEB保存第2个校验点的电压转换值g_vinx1;

* 0xEC、0xED保存第2个校验点的电压转换值g_viny1;

* 0xF0、0xF1保存第1、2校验点之间的x轴点数wide;

* 0xF2、0xF4保存第1、2校验点之间的y轴点数high;

****************************************************************************/ uint8 TestTouch(void)

{ uint8 dat_buf1[20];

uint8 adr_buf[2];

// 读出E2PROM中的数据

adr_buf[0] = 0xE0;

I2cRead(CAT1025, dat_buf1, adr_buf, 1, 14);

adr_buf[0] = 0xF0;

I2cRead(CAT1025, &dat_buf1[14], adr_buf, 1, 4);

// 取得参数

g_vx_min = (dat_buf1[2] << 8) + dat_buf1[3];

g_vy_min = (dat_buf1[4] << 8) + dat_buf1[5];

g_vinx0 = (dat_buf1[6] << 8) + dat_buf1[7];

g_viny0 = (dat_buf1[8] << 8) + dat_buf1[9];

g_vinx1 = (dat_buf1[10] << 8) + dat_buf1[11];

g_viny1 = (dat_buf1[12] << 8) + dat_buf1[13];

touch_wide = (dat_buf1[14] << 8) + dat_buf1[15];

touch_high = (dat_buf1[16] << 8) + dat_buf1[17];

// 判断是否已经校准过

if((dat_buf1[0] == 0x5A) && (dat_buf1[1] == 0xA5)) return(1);

else return(0);

}

/**************************************************************************** * 名称:GetLCD_XY()

* 功能:读取触摸屏上触摸点的坐标。

* 程序会一直等待,直到有触摸输入。

* 入口参数:vx 用于保存触摸点x坐标(LCD)的变量指针

* vy 用于保存触摸点y坐标(LCD)的变量指针

* 出口参数:无

* 说明:先通测量y轴的触摸输入,判断是否有触摸动作。如果有,则进行6次数据

* 采集,并进行去极值平均滤波处理。最后还要判断触摸输入是否合法,只有

* 当触摸输入合法时才返回。

****************************************************************************/ uint8 GetLCD_XY(uint16 *vx, uint16 *vy)

{ uint16 vx_dat, vy_dat;

uint16 vx_dat1, vy_dat1;

int i;

// 判断是否有触摸动作(通过ADS7843的PENIRQ引脚进行判断)

for(i=0; i<3; i++)

{ vy_dat = ADS7843_WriteRead(AIN_Y);

*vy = vy_dat; // 初始化vy,以便于判断无触摸输入(vy=0)

if(vy_dat != 0) break;

} // end of while(1)...

if(i>=3) return(0);

// 进行数据采集

vx_dat = ADS7843_WriteRead(AIN_X);

vy_dat = ADS7843_WriteRead(AIN_Y);

for(i=0; i<100; i++);

vx_dat1 = ADS7843_WriteRead(AIN_X);

vy_dat1 = ADS7843_WriteRead(AIN_Y);

if((vy_dat<3) || (vy_dat1<3)) return(0);

if(vx_dat>vx_dat1)

{ if((vx_dat-vx_dat1) > 13) return(0);

}

else

{ if((vx_dat1-vx_dat) > 13) return(0);

}

if(vy_dat>vy_dat1)

{ if((vy_dat-vy_dat1) > 18) return(0);

}

else

{ if((vy_dat1-vy_dat) > 18) return(0);

}

*vx = (vx_dat+vx_dat1) >> 1;

*vy = (vy_dat+vy_dat1) >> 1;

return(1);

}

/******************************************************************************************* ** Task0 任务0

** 键盘驱动任务。读取ZLG7290扫描的按键值,然后把键值发送到TouchKeyMbox邮箱。

** 由MiniGUI的"comm" IAL输入引擎接收TouchKeyMbox邮箱的消息,然后进行相应的处理。

*******************************************************************************************/ void Task0(void *pdata)

{ static uint8 s_enter_sta = 0;

static TouchKey_Sta s_event_input;

uint16 key;

pdata = pdata;

TargetInit();

if(TestTouch() == 0) // 读取触摸屏校准参数,判断触摸屏是否已校准

{ // 若触摸屏没有校准,则控制数码管显示"Error 01"

ZLG7290ShowChar(7, 0x0E);

OSTimeDly(OS_TICKS_PER_SEC / 100);

ZLG7290ShowChar(6, 0x18);

OSTimeDly(OS_TICKS_PER_SEC / 100);

ZLG7290ShowChar(5, 0x18);

OSTimeDly(OS_TICKS_PER_SEC / 100);

ZLG7290ShowChar(4, 0x15);

OSTimeDly(OS_TICKS_PER_SEC / 100);

ZLG7290ShowChar(3, 0x18);

OSTimeDly(OS_TICKS_PER_SEC / 100);

ZLG7290ShowChar(2, 0x1F);

OSTimeDly(OS_TICKS_PER_SEC / 100);

ZLG7290ShowChar(1, 0x00);

OSTimeDly(OS_TICKS_PER_SEC / 100);

ZLG7290ShowChar(0, 0x01);

OSTimeDly(OS_TICKS_PER_SEC / 100);

}

创建触摸屏输入检测任务

//

OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], 9);

while

(1)

{ key = ZLG7290GetKey(); // 扫描键盘输入

if(key&0x00FF) // 如果有按键,则判断是否要发送按下消息

{ if(s_enter_sta == 0) // 按键单击

{ // 设置消息中的按键值

s_event_input.sta = 0x82;

s_event_input.key = (key-1)&0x000F; // 原按键值为1-16,所以要减1变为0-15 OSMboxPost(TouchKeyMbox, (void *)&s_event_input);

s_enter_sta = 1;

}

}

else // 如果是没有按键,则判断是否要发送放开消息

{ if(s_enter_sta != 0) // 按键放开,则发送按键放开消息

{ s_event_input.sta = 0x02;

OSMboxPost(TouchKeyMbox, (void *)&s_event_input);

}

s_enter_sta = 0;

} // end of if(key&0x00FF)...else...

OSTimeDly(1);

}

}

/****************************************************************************************** ** Task1 任务1

** 触摸屏驱动任务。读取触摸屏的触摸输入,然后把键值发送到TouchKeyMbox邮箱。

** 由MiniGUI的"comm" IAL输入引擎接收TouchKeyMbox邮箱的消息,然后进行相应的处理。

*******************************************************************************************/ void Task1(void *pdata)

{ static uint8 s_enter_sta = 0;

static TouchKey_Sta s_event_input;

uint16 vx1, vy1;

int x1, y1;

=

pdata;

pdata

(1)

while

{ // 判断是否有触摸屏输入

if(GetLCD_XY(&vx1, &vy1)==1)

{ // 触摸屏按下,转换坐标值(为了实现拖动,不对s_enter_sta进行判断)

x1 = (vx1 - g_vx_min) * touch_wide / (g_vinx1 - g_vinx0);

y1 = (vy1 - g_vy_min) * touch_high / (g_viny1 - g_viny0);

if(x1<0) x1 = 0;

if(y1<0) y1 = 0;

if(x1>319) x1 = 319;

if(y1>239) y1 = 239;

// 设置消息中的坐标值

s_event_input.sta = 0x81;

s_event_input.x = x1;

s_event_input.y = y1;

OSMboxPost(TouchKeyMbox, (void *)&s_event_input);

s_enter_sta = 1;

}

else

{ if(vy1 == 0)

{ if(s_enter_sta != 0) // 若是松开触摸点,则发送放开消息

{ s_event_input.sta = 0x01;

OSMboxPost(TouchKeyMbox, (void *)&s_event_input);

}

s_enter_sta = 0;

} // end of if(vy1 == 0)...

} // end of if(GetLCD_XY(&vx1, &vy1)==1)...else...

OSTimeDly(5);

}

}

(9) 将I2C总线驱动中间件的I2C.c和I2C.h文件和ZLG7290软件包的ZLG7290.c和

ZLG7290.h文件复制到GUI_Sample\src目录下。然后在工程中建立一个I2C组,并且I2C.c、ZLG7290.c把添加到I2C组。

其中,I2C总线驱动中间件(I2C.c和I2C.h文件)以及ZLG7290软件包(ZLG7290.c和ZLG7290.h文件)可以在产品配套光盘上找到。

(10) 将触摸屏接口软件包ads7843.c和ads7843.h文件复制到GUI_Sample\src目录下,然

后添加工程的usr组。添加文件后的GUI_Sample工程的结构如图1.5所示。

其中,触摸屏接口软件包(ads7843.c和ads7843.h文件)可以在产品配套光盘上找到。

图1.5 GUI_Sample工程结构

(11) 在项目中的config.h文件中加入“#include "I2C.h"”、“#include "ZLG7290.h"”和

“#include "ADS7843.h"”语句。在工程的target组的irq.s文件最后,增加I2C中断服务程序的汇编语言部分代码“I2c_Handler HANDLER I2c_Exception”。

(12) 在工程的target组的target.c文件中的VICInit函数,添加I2C向量中断的初始化代

码,如程序清单1.5所示。由于在I2C.c文件的I2cInit()函数中会设置VIC使能I2C 中断,所以程序清单1.5中的中断使能设置的代码可以删除。

程序清单1.5 I2C向量中断初始化

extern void I2c_Handler(void);

VICVectAddr12 = (uint32)I2c_Handler;

VICVectCntl12 = (0x20 | 9);

//VICIntEnable = 1 << 9;

(13) 在工程的target组的target.c文件中的TargetInit函数,添加初始化I2C(主模式)的代

码“I2cInit(30000);”以及设置控制I/O为输出模式,代码如程序清单1.6所列。

说明:由于MiniGUI(for uC/OS-II)库里面的“commlcd”图形引擎、“comm”输入引擎的底层驱动程序并没有初始化自己所用到的I/O,所以在应用程序中要正确初始化硬件。

程序清单1.6 GUI_Sample工程的硬件初始化

……

I2cInit(30000);

// ADS7843控制I/O定义

IO2DIR = ADS7843_CS|ADS7843_DIN|ADS7843_DCLK;

OS_EXIT_CRITICAL();

(14) 修改工程中的Startup.s文件的ResetInit程序段,初始化与液晶模块驱动相关的总线

配置(Bank3存储块的设置),如程序清单1.7所列。

程序清单1.7 GUI_Sample工程的总线配置

……

BCFG_FLASH EQU (BCFG_16DEF | (0x00<<00) | (0x03<<05) | (0x02<<11))

BCFG_PSRAM EQU (BCFG_16DEF | (0x00<<00) | (0x03<<05) | (0x02<<11))

BCFG_CS2 EQU (BCFG_16DEF | (0x0f<<00) | (0x1f<<05) | (0x1f<<11))

BCFG_CS3 EQU (BCFG_16DEF | (0x03<<00) | (0x0F<<05) | (0x0F<<11)) ……

(15) 配置uC/OS-II操作系统。配置工程的os_cfg.h文件,将宏OS_MAX_TASKS定义为

60,将OS_MAX_EVENTS的值定义为32或更大,将OS_TICKS_PER_SEC的值定

义为100。

(16) 删除半主调试代码。在GUI_Sample工程的Startup.s文件中,删除“IMPORT

__use_no_semihosting_swi”代码;在target.c文件中,删除“#pragma import(__use_no_semihosting_swi)”代码,删除__rt_div0、fputc、fgetc、_sys_close、_sys_write、_sys_read、_ttywrch、_sys_istty、_sys_seek、_sys_ensure、_sys_flen、

_sys_tmpnam、_sys_exit和_sys_command_string函数的定义。

(17) 至此,MiniGUI-STR for uC/OS-II的应用工程已经设置完成,使用鼠标单击

GUI_Sample工程窗口的Make图标按钮,编译连接GUI_Sample工程。

(18) 连接好MagicARM2200教学实验开发平台硬件(JTAG仿真器、电源连接线),将JP3、

JP11和JP12跳线短接,JP5跳线除7843INT外全部短接。

注意:JP12与USB HOST/Device电路的JP34复用P0.30口。

(19) 启动AXD调试第一个MiniGUI程序。如果一切正确,液晶屏幕上将会显示一个消

息框,标题为“Hello”,消息内容为“Hello MiniGUI!”,消息框只有一个“确定”

按钮,如图1.6所示。

图1.6 messageb.c程序运行效果

(20) 使用触摸笔点击窗口中的“确定”按钮,即单击MiniGUI消息框中的“确定”按钮,

则消息框将被关闭,程序运行结束此时液晶屏上没有任何东西显示。当然,按下实

验箱主板上的Enter功能键,也可以确定消息框。

说明:MagicARM2200实验箱上的功能键定义如图1.2所示。

(21) 使用EasyJTAG下载MiniGUI应用程序到目标板需要的时间较长,不利于程序的调

试,所以建议用户先在PC机上使用MiniGUI的Win32平台开发包调试程序,或在

RedHat Linux 9.0操作系统上使用MiniGUI-STR for Linux软件包来调试程序,最后

再移值到MiniGUI-STR for uC/OS-II上。移植时通常只需要修改的两个地方,即头

北京理工大学汇编实验报告3

北京理工大学汇编实验报告3

本科实验报告实验名称:实验三字符串操作实验 课程名称: 课程设计Ⅰ(CPU与汇编)(实 验)实验时间: 第5-10周周五 下午 任课教师:聂青实验地点:10-102 实验教师:苏京霞 实验类型:?原理验证□综合设计□自主创新 学生姓名:罗逸雨 学号/班级:1120141208 05211401 组号:3 学院:信息与电子学院同组搭档: 专业:通信工程成绩:

CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。 当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。 当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。 3)字符串操作指令 lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI; stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI; movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI; scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI; cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI; rep:重复其后的串操作指令。重复前先判断 CX 是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在 LODS 前。 上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器 AX、计数器CX。 涉及的标志位:DF、AF、CF、OF、PF、SF、ZF。 三、实验步骤 1) 编写程序,比较两个字符串BUF1和BUF2所含的字符是否相同,相同则AL 返回0,不同AL返回1,字符串长度要求自动获取,要求用字符串处理方法。提示:输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。 2) 编写程序,设有一字符串存放在以BUF为首址的数据区中,其最后一字符‘$’作为结束标志,计算该字符串的长度并输出。提示:从串的第一个字符开始统计,直到遇到定义的字符串结束符为止,看看在这个过程中总共有多少个字符,

创新教育实验报告

创新教育实习报告 学院名称管理学院 专业(班级)XXXXXXX 姓名(学号)XXXX 指导教师XXXXXX

经过我们专业老师的一个星期的努力,五天时间,虽然不能够完全了解创新教育的本质内涵,但是给力我们创新动力,老师都分别针对专业内的方向向我们介绍了运筹学,物流学等相关知识,另一部分被老师给我们讲到了一些生活中的案例以及人工智能的观念,大大激发了我们的创新意识,下面是我在课堂中所感受的重要的观点。 一.现代物流与物流信息化 1.现代物流的概念:现代物流不仅单纯的考虑从生产者到消费者的货物配送问题,而且还考虑从供应商到生产者对原材料的采购,以及生产者本身在产品制造过程中的运输、保管和信息等各个方面,全面地、综合性地提高经济效益和效率的问题。 现代物流基本功能: (1)运输 运输是对物资进行较长距离的空间移动,包括人和物的载运及输送。它的目的是通过运输手段使货物在物流节点之间流动,实现物的空间位移。 (2)储存 储存是指对物品、货物进行保存及对其数量、质量进行管理控制的活动,它是包含库存和储备在内的一种广泛的经济现象,以改变物的时间状态为目的。 (3)装卸搬运 装卸是指物品在指定地点以人力或机械装入运输设备或卸下;搬运是指在同一场所内,对物品进行以水平移动为主的活动。 (4)包装 包装是指在流通过程中为保护产品、方便储运及促进销售,而按一定技术方法所采用的容器、材料及辅助物等的总称。 (5)流通加工 在流通过程中辅助性的加工活动称为流通加工。流通与加工的概念属于不同范畴。加工是改变物质的形状和性质,形成一定产品的活动,而流通则是改变物质的空间状态与时间状态。流通加工则是为了弥补生产过程加工不足,更有效地满足用户或本企业的需要,使产需双方更好地衔接,将这些加工活动放在物流过程中完成,而成为物流的一个组成部分,流通加工是生产加工在流通领域中的延伸。 (6)配送 配送是指在经济合理区域范围内,根据客户要求,对物品进行挑选、加工、包装、分类、组配的作业,并按时送达指定地点的物流活动。配送的本质也是物品的位移,但与运输功能相比,配送又具有其自身的特点,它是面向城区、区域内、短距离、多频率的商品送达服务。 (7)信息处理 物流信息是指与物流活动相关的信息。所谓信息是指能够反映事物内涵的知识、资料、情报、图像、数据、文件、语言、声音等。信息是事物的内容、形式及其发展变化的反映。 2.物流系统 是指在一定的时间和空间里,对其所从事的物流事务和过程作为一个整体来处理,以系统的观点、系统工程的理论和方法,进行分析研究,以实现其时间和空间的经济效益。物流系统是社会经济大系统中的一个子系统或组成部分。(1)物流系统子系统包括:输入,处理,输出

高考生物二轮复习专题突破练习高考探究实验

专题突破练15 高考探究实验 1. 某实验小组研究大叶冬青的叶龄对呼吸速率的影响,用如图密闭装置在遮光条件下进行实验,下列 与此实验相关的叙述,错误的是( ) A.至少需要两组实验进行相互对照 B.为使结果更准确,实验进行的时间越长越好 C.装置中NaOH用于吸收细胞呼吸产生的二氧化碳 D.与老叶相比,预测放有叶龄较小叶片的实验组液滴更偏左侧 2.生物研究中合理选择实验材料是实验研究成功的重要前提之一,下列有关叙述错误的是( ) A.黑藻是观察叶绿体的良好实验材料 B.伞藻可用于研究细胞核的功能 C.恩格尔曼利用水绵主要证明了细胞光合作用需要光 D.酵母菌既能用来研究有氧呼吸又能用来研究无氧呼吸 3.科研人员以梧桐叶为材料研究不同浓度的CO2对光合作用强度的影响。图1为实验装置示意图, 图2为适宜光照条件下随NaHCO3浓度变化装置内氧气浓度的变化曲线。下列说法不正确的是( )

A.各实验组中所用叶圆片数量和生理状况应该相同 B.开始实验前需将装置遮光 C.和B点比较,A点叶绿体中C5消耗得更快,ATP生成更慢 D.NaHCO3相对浓度超过20后,曲线可能下降 4.为研究细胞分裂素对某植物光合作用的影响,取若干株生长状况良好且相近的该植物,将其均分为甲、乙、丙、丁四组,并分别培养在不同浓度的细胞分裂素溶液中,实验结果如表所示。下列叙述错误的是( ) A.细胞分裂素可使叶绿素总量增加,进而使光合速率增大 B.细胞分裂素对促进叶绿素b合成的作用更强 C.细胞分裂素对植物光合作用的影响有两重性 D.细胞分裂素不可作为叶绿素的组成成分 5.(2019四川遂宁调研)下图分别是萨克斯、鲁宾和卡门、恩格尔曼所做的关于光合作用的三个经典实验。下列相关叙述正确的是( )

单片机电子时钟课程设计实验报告

单片机电子时钟课程设 计实验报告 Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】

《单片机原理与应用》课程设计 总结报告 题目:单片机电子时钟(带秒表)的设计 设计人员:张保江江润洲 学号: 班级:自动化1211 指导老师:阮海容 目录 1.题目与主要功能要求 (2) 2.整体设计框图及整机概述 (3) 3.各硬件单元电路的设计、参数分析及原理说明 (3) 4.软件流程图和流程说明 (4) 5.总结设计及调试的体会 (10) 附录 1.图一:系统电路原理图 (11) 2.图二:系统电路 PCB (12) 3.表一:元器件清单 (13) 4.时钟程序源码 (14)

题目:单片机电子时钟的设计与实现 课程设计的目的和意义 课程设计的目的与意义在于让我们将理论与实践相结合。培养我们综合运用电子课程中的理论知识解决实际性问题的能力。让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。 课程设计的基本任务 利用89C51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入等知识,设计一款单片机和简单外设控制的电子时钟。 主要功能要求 最基本要求 1)使用MCS-51单片机设计一个时钟。要求具有6位LED显示、3个按键输入。 2)完成硬件实物制作或使用Pruteus仿真(注意位驱动应能提供足够的电流)。 3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时标准计时制。开始计时时为000000,到235959后又变成000000。 4)使用3个键分别作为小时、分、秒的调校键。每按一次键,对应的显示值便加1。分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。在调校时均不向上一单位进位 (例如分加到59后变为00,但小时不发生改变)。 5) 软件设计必须使用MCS-51片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。 6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。7)掌握硬件和软件联合调试的方法。 8)完成系统硬件电路的设计和制作。 9)完成系统程序的设计。 10)完成整个系统的设计、调试和制作。

汇编课程设计报告

四川大学计算机学院 学生实验报告 实验名称:汇编课程设计报告 指导教师:唐宁九 姓名:廖偲 学号:0943111209 班级:软件09级一班 日期:20101114

实验报告 班级______________姓名_______________学号_________ 一、实验一:DEBUG基本命令与数据传输指令 二、实验的目的和要求: ? 1.熟练掌握DEBUG的基本调试命令,能够使用DEBUG编写、调试汇编语言程序片段。 ? 2.在理解数据传输指令的基础上按照实验内容中指定的程序片段对程序进行调试和记录; 三、实验的环境: 1.硬件环境:cpu 2.26gHZ、内存2G、显存1G、64位总线笔记本电脑 2.软件环境:win7 32位操作系统、8086/8088指令集系统(在windows系统中)、masm的汇编工具。 四、源程序清单: ?MOV AL, 01H ?MOV SI, 0002H ?LEA SI, [SI] ?MOV BYTE PTR [SI], 80H ?LAHF ?XCHG AL, AH ?SAHF ?XCHG AH, [SI] ?SAHF 五、操作内容: 1.从cmd在debug下进入用A命令进行汇编 格式: A [地址] 功能:从键盘输入汇编程序, 并逐条地把汇编指令翻译成机器代码指令存入对应内存单元。如果不指定汇编地址, 则以CS:IP为地址 2. 反汇编命令U使用 格式: U [地址]/[地址范围] 功能: 将指定地址范围内的机器代码翻译成汇编源程序指令显示出来, 并同时显示地址及代码。 注意: 反汇编时一定确认指令的起始地址, 否则得不到正确的结果。 3.寄存器查看/编辑命令r或r寄存器名称 功能: 显示当前所有寄存器内容, 状态标志及将要执行的下一条指令的地址、代码和汇编指令形式。

基于某某BP神经网络地手写数字识别实验报告材料

基于BP神经网络的手写体数字图像识别 PT1700105 宁崇宇 PT1700106 陈玉磊 PT1700104 安传旭 摘要 在信息化飞速发展的时代,光学字符识别是一个重要的信息录入与信息转化的手段,其中手写体数字的识别有着广泛地应用,如:邮政编码、统计报表、银行票据等等,因其广泛地应用范围,能带来巨大的经济与社会效益。 本文结合深度学习理论,利用BP神经网络对手写体数字数据集MNIST进行分析,作为机器学习课程的一次实践,熟悉了目前广泛使用的Matlab工具,深入理解了神经网络的训练过程,作为非计算机专业的学生,结合该课题掌握了用神经网络处理实际问题的方法,为今后将深度学习与自身领域相结合打下了基础。

1 引言 从计算机发明之初,人们就希望它能够帮助甚至代替人类完成重复性劳作。利用巨大的存储空间和超高的运算速度,计算机已经可以非常轻易地完成一些对于人类非常困难的工作,然而,一些人类通过直觉可以很快解决的问题,却很难通过计算机解决,这些问题包括自然语言处理、图像识别、语音识别等等,它们就是人工智能需要解决的问题。 计算机要想人类一样完成更多的智能工作,就需要掌握关于这个世界的海量知识,很多早期的人工智能系统只能成功应用于相对特定的环境,在这些特定环

境下,计算机需要了解的知识很容易被严格完整地定义。 为了使计算机更多地掌握开放环境下的知识,研究人员进行了很多的尝试。其中影响力很大的一个领域就是知识图库(Ontology),WordNet是在开放环境中建立的一个较大且有影响力的知识图库,也有不少研究人员尝试将Wikipedia中的知识整理成知识图库,但是建立知识图库一方面需要花费大量的人力和物力,另一方面知识图库方式明确定义的知识有限,不是所有的知识都可以明确地定义成计算机可以理解的固定格式。很大一部分无法明确定义的知识,就是人类的经验,如何让计算机跟人类一样从历史的经验中获取新的知识,这就是机器学习需要解决的问题。 卡内基梅隆大学的Tom Michael Mitchell教授在1997年出版的书籍中将机器学习定义为“如果一个程序可以在任务T上,随着经验E的增加,效果P 也可以随之增加,则称这个程序可以从经验中学习”。逻辑提取算法可以从训练数据中计算出每个特征和预测结果的相关度,在大部分情况下,在训练数据达到一定数量之前,越多的训练数据可以使逻辑回归算法的判断越精确,但是逻辑回归算法有可能无法从数据中学习到好的特征表达,这也是很多传统机器学习算法的共同问题。 对机器学习问题来说,特征提取不是一件简单的事情。在一些复杂问题上,要通过人工的方式设计有效的特征集合,需要很多的时间和精力,甚至需要整个领域数十年的研究投入。既然人工无法很好地抽取实体中的特征,那么是否有自动的方式呢?深度学习解决的核心问题就是自动地将简单的特征组合成更加复杂的特征,并使用这些特征解决问题。 因为深度学习的通用性,深度学习的研究者往往可以跨越多个研究方向,甚至同时活跃于数个研究方向。虽然深度学习受到了大脑工作原理的启发,但现代深度学习研究的发展并不拘泥于模拟人脑神经元和人脑的工作原理,各种广泛应用的机器学习框架也不是由神经网络启发而来的。 MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MNIST是一个非常有名的手写体数字识别数据集,被广泛用作机器学习的入门样例,它包含了60000张图片作为训练数据,10000张图片作为测试数据,每一张图片代表了0~9中的一个数字,图片的大小为28x28,且数字会出现在图片的正中间。本文以该数据集为例,基于Matlab来分析BP神经网络的性能。 2 运行环境 本设计在Windows 10 下进行设计、主要利用Matlab工具环境,进行模拟演示。

2020届高考生物二轮复习实验与探究专题

2020届高考生物二轮复习实验与探究专题 1.请设计实验探究药物X对糖尿病的治疗效果。 可选材料:正常小鼠、患糖尿病小鼠 生理盐水、药物A(治疗糖尿病的常规药物) 解题思路: 得出以下结论:_____________________________________ ___________________________________________________。 2.在双子叶植物的种子萌发过程中,幼苗顶端形成“弯钩”结构。研究发现,弯钩的形成是由于尖端一侧的生长素浓度过高,抑制生长。研究者探究SA(水杨酸)和ACC(乙烯前体)对弯钩形成的影响,结果如下图所示。下列相关叙述,不正确的是() A. 弯钩形成体现了生长素作用的两重性 B. ACC可能影响生长素在弯钩内外侧的分布 C. SA和ACC对弯钩形成具有协同作用 D. 弯钩可减轻幼苗出土时土壤对幼苗的损伤 3.蛞蝓既取食牧草A也取食牧草B。为研究牧草间的竞争和蛞蝓的捕食对牧草A存活的影响,生态学家在牧场内选择多个样方进行实验,实验处理及结果如下图所示。据此作出的分析,

合理的是() A.该牧场的群落仅包括牧草A、B和蛞蝓三种生物 B.应选取牧草生长状况差异较大的不同样方进行实验 C.没有蛞蝓捕食条件下,竞争对牧草A存活影响显著 D.去除样方中的牧草B减少了蛞蝓对牧草A的取食 4.为研究与植物生长相关的基因及其作用,科学家获得了基因A、B、C失活的多种突变体,电泳分析各植株中蛋白m和蛋白n的表达情况,结果如下图。据图分析错误的是() A.基因B和C分别控制蛋白m和n的合成 B.蛋白m和蛋白n对植株生长起抑制作用 C.基因C比基因B对植株生长的抑制更强 D.基因A可能促进蛋白m和蛋白n的降解 5.内质网是真核细胞中重要的细胞器。一些细胞内外的因素会使内质网功能紊乱,引起内质网应激(ERS),甚至启动细胞凋亡。

vf课程设计实验报告模板

vf 课程设计实验报告模板 经济管理学院 学生信息管理系统的设计与实现 09年12 月28 日 、课程设计的目的和意义 当今,人类正在步入一个以智力资源的占有和配置,知识生产、分配和使用为最重要因素的知识经济时代,为了适应知识经济时代发展的需要,大力推动信息产业的发展,我们通过对学生信息管理系统的设计,来提高学生的操作能力,及对理论知识的实践能力,从而提高学生的基本素质,使其能更好的满足社会需求。 学生信息管理系统是一个简单实用的系统,它是学校进行学生管理的好帮手。 此软件功能齐全,设计合理,使用方便,适合各种学校对繁杂的学生信息进行统筹管理,具有严格的系统使用权限管理,具有完善的管理功能,强大的查询功能。它可以融入学校的信息管理系统中,不仅方便了学生信息各方面的管理,同时也为教师的管理带来了极大地便利。 我们进行本次课程设计的主要目的是通过上机实践操作,熟练掌握数据库的设 计、表单的设计、表单与数据库的连接、SQL语言的使用和了解它的功能:数据定 义、数据操纵、数据控制,以及简单VF程序的编写。基本实现学生信息的管理, 包括系统的登录、学生信息的录入、学生信息的浏览、学生信息的查询、学生信息的修改和学生信息的删除,并对Visual FoxPro6.0 的各种功能有进一步的了解,为我们更进一步深入的学习奠定基础,并在实践中提高我们的实际应用能力,为我们以后的学习和工作提供方便,使我们更容易融入当今社会,顺应知识经济发展的趋势。 - 1 -

、系统功能设计 通过该系统可以基本实现学生信息的管理,包括系统的登录、学生信息的录 入、学生信息的浏览、学生信息的查询、学生信息的修改和学生信息的删除。系统 功能模块如下图所示。 学生信息管理系统主界面 登录 管理 学学学学学 生生生生生 信信信信信 息息息息息 录查浏修删 入询览改除 三、系统设计内容及步骤 3.1创建项目管理文件 1.启动foxpro 系统,建一个项目管理器,命名为“学生管理”。 哑 目f ■ 也 电 岂同左 矣 氏H. 0 存 JI 蛋誤曾

计算机操作系统综合设计实验报告实验一

计算机操作系统综合设计 实验一 实验名称:进程创建模拟实现 实验类型:验证型 实验环境: win7 vc++6.0 指导老师: 专业班级: 姓名: 学号: 联系电话: 实验地点:东六E507 实验日期:2017 年 10 月 10 日 实验报告日期:2017 年 10 月 10 日 实验成绩:

一、实验目的 1)理解进程创建相关理论; 2)掌握进程创建方法; 3)掌握进程相关数据结构。 二、实验内容 windows 7 Visual C++ 6.0 三、实验步骤 1、实验内容 1)输入给定代码; 2)进行功能测试并得出正确结果。 2、实验步骤 1)输入代码 A、打开 Visual C++ 6.0 ; B、新建 c++ 文件,创建basic.h 头文件,并且创建 main.cpp 2)进行功能测试并得出正确结果 A 、编译、运行main.cpp B、输入测试数据 创建10个进程;创建进程树中4层以上的数型结构 结构如图所示:。

createpc 创建进程命令。 参数: 1 pid(进程id)、 2 ppid(父进程id)、3 prio(优先级)。 示例:createpc(2,1,2) 。创建一个进程,其进程号为2,父进程号为1,优先级为2 3)输入创建进程代码及运行截图 4)显示创建的进程

3、画出createpc函数程序流程图 分析createpc函数的代码,画出如下流程图:

四、实验总结 1、实验思考 (1)进程创建的核心内容是什么? 答: 1)申请空白PCB 2)为新进程分配资源 3)初始化进程控制块 4)将新进程插入到就绪队列 (2)该设计和实际的操作系统进程创建相比,缺少了哪些步骤? 答:只是模拟的创建,并没有分配资源 2、个人总结 通过这次课程设计,加深了对操作系统的认识,了解了操作系统中进程创建的过程,对进程创建有了深入的了解,并能够用高 级语言进行模拟演示。一分耕耘,一分收获,这次的课程设计让 我受益匪浅。虽然自己所做的很少也不够完善,但毕竟也是努 力的结果。另外,使我体会最深的是:任何一门知识的掌握, 仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能 达到功效。

汇编语言-课程设计1

) 汇编语言课程实验报告 实验名称 课程设计1 实验环境 硬件平台:Intel Core i5-3210M 操作系统:DOSBox in Windows 软件工具:Turbo C , Debug, MASM 实验内容 《 将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。 实验步骤 1.要完成这个实验,首先我们需要编写三个子程序。第一个子程序是可以显示字符串到屏 幕的程序,其汇编代码如下: ;名称:show_str

;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串 ;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址 ;返回:显示在屏幕上 ¥ show_str: push ax push cx push dx push es push si push di mov ax,0b800h - mov es,ax mov al,160 mul dh add dl,dl mov dh,0 add ax,dx mov di,ax mov ah,cl . show_str_x: mov cl,ds:[si] mov ch,0 jcxz show_str_f mov al,cl mov es:[di],ax inc si inc di 【 inc di jmp show_str_x show_str_f: pop di pop si pop es pop dx pop cx } pop ax ret 2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出

高三生物二轮复习 实验专题

高三生物二轮复习--实验专题 围绕一中心:以学生为中心,少讲精练 坚持二原则:充分利用教材与学生已有的资料; 充分研究海南生物高考考纲与高考真题 明确三(考试)方向:实验设计(整体); 实验分析(现象结果); 实验评价(方法过程) 第1讲必修教材实验概述 显微镜的结构与使用 1.高倍镜的使用步骤: (1)在低倍镜下找到物像,将物像移至视野正中央, (2)转动[7]转换器,换上高倍镜。 (3)调节[11]光圈和[13]反光镜,使视野亮度适宜。 (4)调节[2]细准焦螺旋,使物象清晰。 2.在显微镜操作过程中的有关问题 ①放大倍数:目镜的放大倍数与镜头长度成反比(正比或反比),物镜 的放大倍数与镜头长度成正比;放大倍数的计算方法:目镜的放大倍数 ×物镜放大倍数;如果某显微图标明“放大倍数:640”,这里的“640”是 指长度(长度或面积)放大了640倍。 ②物像移动与装片移动的关系:若希望把视野左上方的细胞移至视野中 央,应将玻片移向左上方。 ③异物位置的判断:异物存在的位置可能在玻片标本、目镜、物镜等;转动目镜,异物不动,转动转换器,异物仍在,则异物可能在玻片标本。

实验一:用显微镜观察多种多样的细胞 1.目的要求:①使用高倍显微镜观察几种细胞(如酵母菌、水绵、叶的保卫细胞、蛙的皮肤上皮细胞等),比较几种细胞的异同点。②运用制作临时装片的方法。 2.实验原理:利用高倍镜可以看到某些在低倍镜下无法看到的细胞结构,例如:可以看到叶绿体、液泡等细胞器,从而能够区别不同的细胞。 临时装片的制作(以洋葱表皮细胞临时装片制作为例) 擦:擦拭载玻片和盖玻片—→ 滴:在载玻片中央滴一滴清水—→ 撕:用镊子从洋葱鳞片叶内侧撕取一小块透明薄膜(内表皮)—→ 展:把撕下的内表皮浸入载玻片上的水滴中,用镊子把它展平—→ 盖:用镊子夹起盖玻片,使它的一边先接触载玻片上的水滴,然后缓缓地放下,盖在要观察的材料上,这样才能避免盖玻片下面出现气泡而影响观察 实验二:观察植物细胞质壁分离 目的要求:①初步学会观察植物细胞质壁分离与复原的方法。 ②理解植物细胞发生渗透作用的原理。 1.实验原理 原生质层包括细胞膜、液泡膜和这两膜之间的细胞质,它相当于一层半透膜。当外界溶液浓度大于细胞液浓度时,细胞失水,使细胞壁和原生质层都会出现一定程度的收缩。由于原生质层比细胞壁的伸缩性大,二者就会逐渐分离开来。 2.选材 选择紫色洋葱鳞片外(内或外)表皮作实验材料,理由是有紫色的大液泡,便于观察。注意所选细胞必须为有大液泡的活的植物细胞,否则不会发生质壁分离。 3.方法步骤 制作临时装片→观察(用低倍镜观察细胞中紫色的液泡的大小及原生质层的位置)→滴加蔗糖溶液(注意从盖玻片一侧滴入,另一侧用吸水纸吸引)→观察质壁分离现象(液泡变小,细胞液颜色深,原生质层与细胞壁分离,细胞大小基本不变)→观察质壁分离复原(用清水做复原试剂) (1)发生质壁分离现象的外因是细胞内外溶液浓度差,内因是原生质层与细胞壁的伸缩性不同。 (2)相对细胞膜,细胞壁具有什么特性?全透性。 (3)实验常用0.3g/mL的蔗糖溶液。若浓度过高,细胞质壁分离速度很快,但会导致细胞失水过多而死亡,细胞不能发生质壁分离复原现象;若浓度过低,则不能引起细胞质壁分离或速度太慢。 (4)一定浓度的硝酸钾溶液、尿素等也能导致植物细胞质壁分离,但随后植物细胞可自动质壁分离复原。 实验三观察DNA和RNA在细胞中的分布 目的要求:初步掌握观察DNA和RNA在细胞中分布的方法。 1.实验原理: 甲基绿和吡罗红两种染色剂对DNA和RNA的亲和力不同,甲基绿使DNA呈现绿色,吡罗红使RNA 呈现红色。利用甲基绿、吡罗红混合染色剂将细胞染色,可以显示DNA和RNA在细胞中的分布。 盐酸能够改变细胞膜的通透性,加速染液进入细胞,同时使染色体中的DNA与蛋白质分离,有利于DNA与染色剂结合。 2.实验材料: 可用人的口腔上皮细胞或洋葱鳞片叶内表皮细胞 3.实验步骤: 取材制片→水解(用8%的盐酸溶液)→冲冼涂片→染色→观察(选择染色均匀、色泽浅的区域观察)(1)取口腔上皮细胞制片: ①载玻片要洁净,先在载玻片中央滴一滴质量分数为0.9%的NaCl溶液→②用消毒牙签在自己漱净的口

计算机组成原理与大全实验报告

计算机组成原理与汇编课程设计 实验报告 字符统计.asm 2.斐波那契数(小于50).asm (29) 一、课程设计目标 通过课程设计使学生综合运用所学过的计算机原理与汇编知识,增强解决实际问题的能力,加深对所学知识的理解与掌握,提高软硬件开发水平,为今后打下基础。

课程设计的目的和要求: 1、使学生巩固和加强《计算机原理与汇编语言》课程的基本理论知识。 2、使学生掌握汇编语言程序设计的方法及编程技巧,正确编写程序。 3、使学生养成良好的编程习惯并掌握调试程序的基本方法。 4、使学生养成规范书写报告文档的能力,撰写课程设计总结报告。 5、通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。 1 2 3 4 1 2 3 00001001 00100000 00001011 00110000 00001011

01000000 00000000 00000001 本实验设计机器指令程序如下: 4)这里做的是个加法运算,第一个加数已经存入到内存的0000 1010单元中, 第二个加数是需要手工输入的。在实验运行面板中点击“运行”按钮,选择 “输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样 第二个加数就设置好了。 5)在实验运行面板中双击连续脉冲,模型机便开始工作,观察各个芯片的状态。 或者在模型机调试窗口中(如图2所示)点击“指令执行”选项卡,在模型 机调试窗口中点击“下一时钟”,模型机机执行到下一个时钟,点击“下一

微指令”,模型机机执行到下一个微指令,点击“下一指令”,模型机机执行到下一条指令。观察各个芯片的状态,思考模型机的运行原理。 四、课程设计的要求 1、根据题目内容,查阅资料。 2、编写课程设计预习报告。 3、编制程序及调试程序。 4、分析总结,写出课程设计报告,报告中应该包含程序功能与使用说明、程序功能 实现方法说明、如流程图与算法参数说明等内容,设计经验体会总结,源程序清 5 6 1 通 三、实验设计内容 读取文件代码段: MOV AX,DATAS MOV DS,AX ;置数据段寄存器 ; MOV DX,OFFSET FNAME MOV AX,3D00H ;读打开指定文件

2020届高考生物二轮复习实验专题第2节探究类实验和调查类实验Word版含答案

第2节探究类实验和调查类实验 1、下列关于探究酶特性的实验,叙述正确的是( ) A.若探究pH对过氧化氢酶活性的影响,实验操作顺序不会影响实验结果 B.若探究温度对淀粉酶活性的影响,可选择斐林试剂对实验结果进行检测 C.若用H2O2和过氧化氢酶来探究酶的高效性,可选择无机催化剂作为对照 D.若用淀粉、蔗糖和淀粉酶来探究酶的专一性,可用碘液对实验结果进行检测 2、下列有关酶特性的实验设计中,最科学、最严谨的一项是( ) 选项实验目的主要实验步骤 A 酶催化具有高效性 实验组:2mL3%H2O2+1mL过氧化氢酶保温5min 对照组:2mL3%H2O2+1mL蒸馏水保温5min B 酶催化具有专一性实验组:2mL3%可溶性淀粉+1mL新鲜唾液保温5min碘液检验 对照组:2mL3%蔗糖+1mL新鲜唾液保温5min 碘液检验 C 探究酶作用的适宜 温度5mL3%可溶性淀粉+2mL新鲜唾液+碘液→每隔5min将溶液温度升高10°C,观察溶液蓝色变化 D pH影响酶的催化 活性向三支试管中依次各加入:2mL3%H2O2、1mL不同pH缓冲溶液和1mL过氧化氢酶,在适宜温度下保持5min,观察气体产生速率 A.A B.B C.C D.D 3、用不同的荧光染料标记人和小鼠细胞的细胞膜上的一种抗原(HLA抗原和H-2抗原均为蛋白质)进行融合实验,以下有关叙述错误的是( ) A.人和小鼠细胞膜表面的抗原不属于细胞膜的结构成分

B.融合细胞表面两类荧光染料分布的动态变化,体现了细胞膜的分子能够运动 C.融合细胞表面两类荧光染料最终均匀分布,体现了细胞膜具有一定的流动性,是细胞膜的结构特点. D.若在0℃下培养40 min,则发现细胞仍然保持一半发红色荧光,另一半发绿色荧光。这一现象的合理解释是细胞膜的流动性只有在适宜的条件下才能体现 4、在探讨酵母菌细胞的呼吸方式实验中,下列说法正确的是( ) A.探究“酵母菌有氧呼吸是否产生酒精”时,唯一假设是“酵母菌有氧呼吸不产生酒精” B.整个实验过程中,保证酵母菌能正常生活的重要条件是加入足量的培养液 C.研究酵母菌无氧呼吸的实验中,每隔一段时间需通入空气,以保证酵母菌正常代谢 D.该实验中不通入空气的装置属于空白对照组,整个实验属于对照实验 5、如图是某生物兴趣小组探究不同条件下光合作用和呼吸作用过程中气体产生情况的实验示意图,装置中的碳酸氢钠溶液可维持瓶内的二氧化碳浓度在恒定水平。下列几种实验结果(给予相同的环境条件),你觉得不可能出现的是( ) A.甲、乙装置水滴都左移 B.甲、乙装置水滴都右移 C.甲装置水滴不动,乙装置水滴左移 D.甲装置水滴右移,乙装置水滴左移 6、艾弗里及其同事为了探究S型肺炎双球菌中何种物质是“转化因子”,进行了肺炎双球菌体外转化实验。下列叙述中有误的是( ) A.肺炎双球菌的细胞结构中没有核膜(无成形的细胞核) B.该实验证明了DNA是肺炎双球菌的遗传物质,而蛋白质不是 C.该实验的设计思路是单独观察S型细菌的DNA和蛋白质等成分的作用 D.在培养R型菌的培养基中添加S型菌的DNA后,观察发现只有S型菌落 7、某课题组研究了激素类似物甲和激素类似物乙对微型月季插条生根的影响,实验结果如图所示,下列说法正确的是( )

【实验报告】大学物理实验课程设计实验报告

大学物理实验课程设计实验报告北方民族大学 大学物理实验(设计性实验) 实验报告 指导老师:王建明 姓名:张国生 学号:XX0233 学院:信息与计算科学学院 班级:05信计2班 重力加速度的测定 一、实验任务 精确测定银川地区的重力加速度 二、实验要求 测量结果的相对不确定度不超过5% 三、物理模型的建立及比较 初步确定有以下六种模型方案: 方法一、用打点计时器测量

所用仪器为:打点计时器、直尺、带钱夹的铁架台、纸带、夹子、重物、学生电源等. 利用自由落体原理使重物做自由落体运动.选择理想纸带,找出起始点0,数出时间为t的p点,用米尺测出op的距离为h,其中t=0.02秒×两点间隔数.由公式h=gt2/2得g=2h/t2,将所测代入即可求得g. 方法二、用滴水法测重力加速度 调节水龙头阀门,使水滴按相等时间滴下,用秒表测出n个(n取 50―100)水滴所用时间t,则每两水滴相隔时间为t′=t/n,用米尺测出水滴下落距离h,由公式h=gt′2/2可得g=2hn2/t2. 方法三、取半径为r的玻璃杯,内装适当的液体,固定在旋转台上.旋转台绕其对称轴以角速度ω匀速旋转,这时液体相对于玻璃杯的形状为旋转抛物面重力加速度的计算公式推导如下: 取液面上任一液元a,它距转轴为x,质量为m,受重力mg、弹力n.由动力学知: ncosα-mg=0(1) nsinα=mω2x(2) 两式相比得tgα=ω2x/g,又tgα=dy/dx,∴dy=ω2xdx/g, ∴y/x=ω2x/2g.∴g=ω2x2/2y. .将某点对于对称轴和垂直于对称轴最低点的直角坐标系的坐标x、y测出,将转台转速ω代入即可求得g.

汇编器实验报告doc

汇编器实验报告 篇一:汇编实验报告 实验一(1)熟悉汇编语言程序调试环境及顺序程序设计 一、实验目的及要求: 1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。 2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。 3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。 二、熟悉汇编语言程序调试环境 1.汇编语言源程序的建立 本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。设定源程序的文件名为ABC。 DATA SEGMENT BUFDB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUF DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: PUSH DS

XOR AX,AX PUSH AX MOVAX,DATA MOV DS,AX MOV BX,OFFSET BUF MOV CX,CN DEC CX MOV AL,[BX] INC BX LP:CMP AL,[BX] JBE NEXT MOV AL,[BX] NEXT: INC BX DEC CX JNZ LP MOV AH,4CH INT 21H CODE ENDS END START 键入以下命令: C:\>EDIT ABC.ASM 此时屏幕的显示状态如图1所示。

1 图1 用EDIT编辑ABC.ASM程序窗口 程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。 2.将源程序文件汇编成目标程序文件 一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。 (2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。 (3)若程序中使用了宏指令,则汇编程序将展开宏指令。 源程序建立以后,在DOS状态下,采用宏汇编程序MASM 对源程序文件进行汇编,其操作过程如图2所示。 图2 MASM宏汇编程序工作窗口 汇编过程的错误分警告错误(Warning Errors)和严重错误(Severe Errors)两种。其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。 3.用连接程序生成可执行程序文件

检索报告格式

专业(班级)档案学20141781 姓名练洪妹学号2014178126 检索报告(综合作业) 一、检索课题:大数据时代下科技情报的发展与创新 二、检索数据库(选中外文数据库至少4个,至少有2个外文数据库,其中外文数据库必须 有一个二次文献数据库) 可选数据库(请在你选择的数据库号码上打钩或将检索的留下,检索时间尽量近几年):华工购买的数据库: 1、CNKI 中国知网2002-2016 2、维普中文科技期刊全文数据库1989-2016 3、Calis馆际互借与文献传递2012-2015 4、英国科学文摘Inspec 1969-2016 5、美国专利全文数据库1976-2016 三、关键词 中文外文 情报intelligence 大数据big data 科技情报技术工作science and technology information technology work 科技创新science and technology innovation 数据环境data environment 四、检索结果(每库不得少于1篇。每篇至少要显示题目、文献出处、文摘) 例: 1、CNKI 中国知网(2002-2016)

或:主题检索 选2篇文献如下: 科技情报技术发展现状与对策研究 【作者】何葳; 【Author】HE Wei;Beijing Institute of science and Technology Information; 【机构】北京市科学技术情报研究所; 【摘要】随着技术的飞速发展,科技创新手段不断进步,科技创新的周期不断缩短,新知识、新技术、新工艺和新产品层出不穷,重复低效的科研开发不仅浪费宝贵的资源,而且也会丧失或错过良好的发展机遇。面对海量信息和科技创新周期不断缩短的挑战,从新的角度对科技创新的科技情报技术需求进行分析,积极探索面向科技创新全过程的科技情报服务能力建设是十分必要的。本文首先从情报的定义出发,论述了我国的科技情报技术工作现状分析了我国的科技情报技术工作中存在的问题,结合科技创新对科技情报的需求分析,文章最后提 出了创建新时期的科技情报技术工作的具体措施。更多还原

高考生物二轮复习 实验专题训练一

2015届高三生物二轮复习专题:实验专题训练一 1.(22分)回答下列I、II小题: I.如下图所示,甲图为测定光合作用速率的装置,在密封的试管内放一新鲜叶片和二氧化碳缓冲液,试管内气体体积的变化可根据毛细刻度管内红色液滴的移动距离测得。 在不同强度的光照条件下,测得的气体体积如乙图所示。丙图为叶肉细胞中有关细胞的结构模式图。 (1)标记实验开始时毛细刻度管中液滴所在位置。实验时,当光照强度由0渐变为2.5千勒克斯时(不同光照强度照射的时间均等),液滴所在位置应在实验初始标记位 置的_______侧。 (2)在乙图中,光照强度为15千勒克斯时,植物l小时光合作用产生的气体量为__________毫升(植物叶片的呼吸速率不变)。 (3)为了防止无关变量对实验结果的干扰,本实验还应设置对照实验,对照实验装置与实验组装置的区别是________________________________。 O的字母有________,图中c不可以表示葡萄糖去向的原因是(4)丙图中可表示 2 _____________________________________________________________________。 CO的产物依次出现在________________化合(5)在夏季晴天的正午,玉米叶片固定14 2 物和________________化合物上。 Ⅱ.请据图回答下列问题: (1)甲图中B处于静息状态时。若规定细胞膜外表面为零电位,则细胞内表面的电位是(正、负或零) ____________电位。 (2)如果用食物刺激甲图中A.则E分泌胃液,此反应为___________ (条件/非条件)反射。 (3)在反射弧中,决定神经冲动单向传导的结构是__________ (填标号)。 (4)乙图是甲图中①的一段,如果在电极a的左侧给一适当刺激,此时a—b之间会产生的膜外电流,其方向是_______;电流计c的指针会发生两次方向_________ (填” 相同”或“相反”)的偏转。 (5)德国科学家Mellor的学生用蛙的坐骨神经——腓肠肌标本做了一个非常简单的实验(如下图),从而测量出坐骨神经的冲动传导速度。

南邮课程设计实验报告

课程设计I报告 题目:课程设计 班级:44 姓名:范海霞 指导教师:黄双颖 职称: 成绩: 通达学院 2015 年 1 月 4 日

一:SPSS的安装和使用 在PC机上安装SPSS软件,打开软件: 基本统计分析功能包括描述统计和行列计算,还包括在基本分析中最受欢迎的常见统计功能,如汇总、计数、交叉分析、分类比较、描述性统计、因子分析、回归分析及聚类分析等等。具体如下: 1.数据访问、数据准备、数据管理与输出管理; 2.描述统计和探索分析:频数、描述、集中趋势和离散趋势分析、分布分析与查看、正态性检验与正态转换、均值的置信区间估计; 3.交叉表:计数;行、列和总计百分比;独立性检验;定类变量和定序变量的相关性测度; 4.二元统计:均值比较、T检验、单因素方差分析; 5.相关分析:双变量相关分析、偏相关分析、距离分析; 6.线性回归分析:自动线性建模、线性回归、Ordinal回归—PLUM、曲线估计; 7.非参数检验:单一样本检验、双重相关样本检验、K重相关样本检验、双重独立样本检验、K重独立样本检验; 8.多重响应分析:交叉表、频数表; 9.预测数值结果和区分群体:K-means聚类分析、分级聚类分析、两步聚类分析、快速聚类分析、因子分析、主成分分析、最近邻元素分析; 10. 判别分析; 11.尺度分析; 12. 报告:各种报告、记录摘要、图表功能(分类图表、条型图、线型图、面积图、高低图、箱线图、散点图、质量控制图、诊断和探测图等); 13.数据管理、数据转换与文件管理; 二.数据文件的处理 SPSS数据文件是一种结构性数据文件,由数据的结构和数据的内容两部分构成,也可以说由变量和观测两部分构成。定义一个变量至少要定义它的两个属性,即变量名和变量类型其他属性可以暂时采用系统默认值,待以后分析过程中如果有需要再对其进行设置。在spss数据编辑窗口中单击“变量视窗”标签,进入变量视窗界面,即可对变量的各个属性进行设置。 1.创建一个数据文件数据 (1)选择菜单【文件】→【新建】→【数据】新建一个数据文件,进入数据编辑窗口。窗口顶部标题为“PASW Statistics数据编辑器”。 (2)单击左下角【变量视窗】标签进入变量视图界面,根据试验的设计定义每个变量类型。

相关文档
最新文档