嵌入式图形界面设计_综合实验报告

合集下载

嵌入式综合设计实习报告

嵌入式综合设计实习报告

桂林理工大学嵌入式综合设计实习报告学院:信息科学与工程班级:计算机2010-1姓名:周杰学号:3100717102指导:金红日期:2014年1月一、引言1、实习的性质、目的和意义以培养学生实际的嵌入式系统软件设计能力和创新为主要目的,通过实习,基本掌握嵌入式系统应用系统的设计方法、调试技术及创新能力等技能。

本课程是计算机专业的一门必修的专业实习课。

通过该实习,使学生进一步加深对《嵌入式系统》、《C语言程序设计》、《单片机应用系统设计》、《微机原理》、等课程相关理论知识的理解;通过该实习,使学生初步掌握嵌入式系统应用系统设计方法、系统调试等能力,提高创新技能。

2、实习的要求要求学生从嵌入式应用系统和实现的角度出发,能够利用课程内容设计嵌入式系统应用系统,掌握基本嵌入式软件设计、调试等技能,提高创新能力。

(1)掌握嵌入式系统的概念及系统构成;(2)初步掌握嵌入式系统移植及应用软件设计及调试方法;(3)初步掌握设计报告的格式要求和撰写方法。

二、课题设计1、嵌入式系统1.1嵌入式系统概述1.1.1嵌入式系统定义(1)根据IEEE(Institute of Electrical & Electronic Engineers,国际电气和电子工程师协会)的定义[1]:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)(2)通俗定义嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

1.1.2嵌入式系统构架总体上嵌入式系统可以划分成硬件和软件两部分硬件一般由高性能的嵌入式微处理器、外围的接口电路、外设组成软件一般由:应用软件或者嵌入式操作系统和其上运行的应用软件构成;1.1.3、嵌入式系统硬件嵌入式系统硬件可分为:微处理器、外围电路和外设。

嵌入式实验报告总结

嵌入式实验报告总结

嵌入式实验报告总结嵌入式实验报告总结近年来,嵌入式系统在各个领域中得到了广泛的应用。

嵌入式系统是指将计算机系统嵌入到其他设备或系统中,以实现特定功能的一种计算机系统。

在本次嵌入式实验中,我深入学习了嵌入式系统的原理和应用,并通过实际操作,加深了对嵌入式系统的理解。

实验一:嵌入式系统的基本概念和发展历程在本实验中,我们首先了解了嵌入式系统的基本概念和发展历程。

嵌入式系统的特点是紧凑、高效、实时性强,并且适用于各种各样的应用场景。

通过学习嵌入式系统的发展历程,我们了解到嵌入式系统在不同领域的应用,如智能家居、医疗设备、汽车电子等。

这些应用领域的嵌入式系统都有着各自的特点和需求,因此在设计嵌入式系统时需要根据具体应用场景进行优化。

实验二:嵌入式系统的硬件平台与软件开发环境在本实验中,我们学习了嵌入式系统的硬件平台和软件开发环境。

硬件平台是嵌入式系统的基础,包括处理器、内存、外设等。

而软件开发环境则提供了开发嵌入式系统所需的工具和库函数。

我们通过实际操作,搭建了嵌入式系统的硬件平台,并使用软件开发环境进行程序的编写和调试。

通过这个实验,我深刻理解了硬件平台和软件开发环境对嵌入式系统的影响,以及它们之间的协同工作。

实验三:嵌入式系统的实时操作系统在本实验中,我们学习了嵌入式系统的实时操作系统。

实时操作系统是嵌入式系统中非常重要的一部分,它能够保证系统对外界事件的响应速度和可靠性。

我们通过实际操作,学习了实时任务的创建和调度,以及实时操作系统的中断处理机制。

实时操作系统的学习让我更加深入地了解了嵌入式系统的实时性要求和相关的调度算法。

实验四:嵌入式系统的通信与网络在本实验中,我们学习了嵌入式系统的通信与网络。

嵌入式系统通常需要与其他设备或系统进行通信,以实现数据的传输和共享。

我们学习了嵌入式系统的通信协议和网络协议,如UART、SPI、I2C、TCP/IP等。

通过实际操作,我掌握了这些通信和网络协议的使用方法,以及在嵌入式系统中如何进行数据的传输和处理。

嵌入式综合实验报告

嵌入式综合实验报告

ARM嵌入式系统基础综合实验报告姓名:班级:学号:指导教师:实验时间:2014年11月24日目录一、实验目的-----------------------------------3二、实验设备-----------------------------------3三、实验内容-----------------------------------3四、实验预习要求-------------------------------3五、实验原理-----------------------------------4六、实验步骤-----------------------------------9七、实验参考程序-------------------------------13八、实验心得-----------------------------------16备注:在流水灯显示的程序中,显示的字母为LIXUE,分别对应ASCII码:L--0x4C I--0x49 X--0x58 U--0x55 E--0x45 全亮--0XFF 全灭--0X00流水灯一个周期的显示流程:①流水灯全亮一次;②流水灯全灭一次,显示一个字母;③流水灯全亮一次。

根据字母显示的个数,计算出一个周期的需要的次数为12。

一、实验目的1、掌握将μC/OS-II 操作系统移植到ARM7 处理器的方法。

2、了解μC/OS-II 操作系统的基本原理和移植条件。

3、掌握LPC2200(for MagicARM2200)专用工程模板的使用;4、能够在MagicARM2200-S 上运行基于μC/OS-II 操作系统的程序;5、掌握基于μC/OS-II 操作系统的用户程序的编写格式。

二、实验设备硬件:PC机一台MagicARM2200-S 教学实验开发平台一套软件:Windows98/XP/2000 系统ADS 1.2 集成开发环境μC/OS-II 操作系统(V2.52)三、实验内容1、编写一个简单的多任务应用程序,实现LED 流水灯控制。

嵌入式实训报告报告

嵌入式实训报告报告

一、实训背景随着科技的飞速发展,嵌入式系统在各个领域得到了广泛应用。

为了提高自己的实践能力和综合素质,我参加了本次嵌入式实训。

通过实训,我对嵌入式系统有了更深入的了解,并掌握了嵌入式系统的开发流程和相关技术。

二、实训目的1. 掌握嵌入式系统的基本原理和开发流程;2. 熟悉嵌入式开发工具和环境;3. 提高动手实践能力,培养团队协作精神;4. 为以后从事嵌入式系统相关工作打下基础。

三、实训内容1. 嵌入式系统概述嵌入式系统是一种将计算机硬件和软件集成在一起的专用系统,具有实时性、高可靠性、低功耗等特点。

本次实训主要针对ARM架构的嵌入式系统进行学习。

2. 嵌入式开发环境搭建(1)硬件环境:选用STM32F103系列单片机作为开发平台。

(2)软件环境:使用Keil MDK作为集成开发环境(IDE),并安装必要的驱动程序。

3. 嵌入式系统编程(1)C语言编程:学习C语言的基本语法、数据类型、控制结构、函数等,掌握嵌入式系统编程基础。

(2)裸机编程:编写简单的裸机程序,实现单片机的GPIO、定时器、中断等功能。

(3)嵌入式操作系统:学习FreeRTOS操作系统,掌握任务创建、调度、同步等基本功能。

4. 嵌入式系统项目实践(1)设计一个基于STM32F103的单片机温度控制系统,实现温度的实时监测和控制。

(2)设计一个基于ARM Cortex-M4的智能家居系统,实现家电的远程控制和状态监测。

四、实训过程1. 理论学习:通过查阅资料、阅读教材,了解嵌入式系统的基本原理和开发流程。

2. 环境搭建:按照实训要求,配置开发环境,安装必要的驱动程序。

3. 编程实践:按照实训指导书,编写程序,实现单片机的各项功能。

4. 项目实践:根据项目要求,设计并实现嵌入式系统项目。

5. 总结与反思:对实训过程进行总结,分析自己在实训过程中遇到的问题及解决方法。

五、实训收获与体会1. 理论知识与实践相结合:通过本次实训,将所学的理论知识应用于实际项目中,提高了自己的动手实践能力。

嵌入式 图形-实验报告

嵌入式 图形-实验报告

图形用户接口一、实验目的(1)了解嵌入式系统图形界面的基本编程方法(2)学习图形库的制作二、实验原理(一)Frame Buffer显示屏的整个显示区域,在系统内会有一段存储空间与之对应。

通过改变该存储空间的内容达到改变显示信息的目的。

该存储空间被称为Frame Buffer,或显存。

显示屏上的每一点都与Frame Buffer里的某一位置对应。

所以,解决显示屏的显示问题,首先要解决的是Frame Buffer的大小以及屏上的每一像素与Frame Buffer的映射关系。

影响空间大小的因素:由于Frame Buffer空间的计算大小是以屏幕的大小和显示模式决定的,所以显示模式(单色或彩色)、显示屏的性能、显示的需要均会影响Frame Buffer空间的大小。

另外显示屏还有单屏幕、双屏幕两种工作模式:单屏幕模式代表屏幕的显示范围是整个屏幕,只需一个Frame Buffer和一个通道;双屏幕模式则将整个屏幕划分为两个部分,这两个部分各自有Frame Buffer,且他们的地址无需连续,并同时具有两个各自独立的通道将Frame Buffer的数据传送到显示屏。

显示操作及映射连续性:由于Frame Buffer通常就是从内存空间分配所得,并且他是有连续的字节空间组成,屏幕的显示操作通常是从左到右逐点像素扫描,从上到下逐行扫描,直到扫描到右下角,然后再折返到左上角。

又由于Frame Buffer里的数据是按地址递增的顺序被提取,所以屏幕上相邻的两像素被映射到Frame Buffer里是连续的,并且屏幕最左上角的像素对应Frame Buffer的第一空间单元,屏幕最右下角则对应最后一个单元空间。

(二)Frame Buffer 与色彩计算机反映自然界的颜色是通过RGB(Red-Green-Blue)值来表示的。

如果要在屏幕某点显示某种颜色,则必须给出相应的RBG值。

Frame Buffer是由所有像素的RGB值或RGB值的部分位所组成,本系统使用的16位/像素的模式下,Frame Buffer里的每个单元16位,每个单元代表一个像素的RGB值,如下图D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 R R R R R G G G G G G B B B B B有了以上的分析,就可以用下面的计算公式FrameBufferSize=Width * Height * Bitperpixel/8计算Frame Buffer的大小(以字节为单位)。

嵌入式实验报告五

嵌入式实验报告五

西北农林科技大学《嵌入式系统开发基础》实验报告五学院:机械与电子工程学院班级:电信*** 班姓名:*******学号:2011*****实验五图形界面应用程序设计一、实验目的1.了解在Linux下安装Qt以及Qt/Embedded的基本步骤;2.学会在Qt/E平台下使用Virtual framebuffer显示程序结果。

二、实验内容1.在Linnux下编译和使用Qt/E平台;2.在Qt/E平台下编译和运行一个程序使用Virtual framebuffer 显示运行结果。

三、实验步骤该在Trolltech公司的网站上可以下载该公司所提供的Qt/Embedded的免费版本,在安装产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410s/gui/Qt/src下。

在做实验钱吧本次实验用到的三个文件拷贝到/root/2410sQt目录下。

[root@BC root]#cd/root/[root@BC root]#mkdir2410sQt[root@BC root]#cd/arm2410sQt/gui/Qt/src[root@BC src]#cp-arftmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz Qt-x11-2.3.2tar.gz/root/24110sQt安装编译器arm-linux-gcc-3.4.1:[root@BC src] #cd/arm2410s/gui/Qt/tools[root@BC tools]#tar xjvfarm-linux-gcc-3.4.1.tar.bz2-C./[root@BC tools]#vi/root/.bash profile//打开文件,将该文件中的PATH变亮改为PATH=$PATH:$HOME/bin:/arm2410s/gui/Qt/tools/usr/local/arm/3.4.1/bin/,存盘后退出。

嵌入式项目综合实训报告

嵌入式项目综合实训报告

一、实训背景随着科技的飞速发展,嵌入式系统在各个领域得到了广泛的应用。

为了培养具备嵌入式系统设计、开发和应用能力的高素质人才,我国高校纷纷开设了嵌入式系统相关课程,并开展了嵌入式项目综合实训。

本文以某高校嵌入式项目综合实训为例,总结实训过程、成果及心得体会。

二、实训目标1. 掌握嵌入式系统基本原理、硬件平台及软件平台;2. 熟悉C语言编程、Linux操作系统、嵌入式系统开发工具及调试方法;3. 能够独立完成嵌入式系统设计、编程、调试及测试;4. 培养团队合作精神和创新意识。

三、实训内容1. 嵌入式系统基础知识:讲解嵌入式系统基本概念、发展历程、硬件平台、软件平台等。

2. C语言编程:学习C语言语法、数据结构、函数、指针、内存管理、文件操作等。

3. Linux操作系统:学习Linux基本命令、文件系统、进程管理、网络编程、系统调用等。

4. 嵌入式系统开发工具:熟悉Keil、IAR、GCC等集成开发环境,掌握编译、链接、调试等操作。

5. 嵌入式系统调试方法:学习使用逻辑分析仪、示波器、仿真器等调试工具,掌握调试技巧。

6. 嵌入式系统项目实践:分组完成以下项目:(1)智能家居项目:设计并实现一个基于嵌入式系统的智能家居控制系统,实现灯光、窗帘、空调等设备的远程控制。

(2)智能交通项目:设计并实现一个基于嵌入式系统的智能交通信号控制系统,实现交通信号灯的智能控制。

(3)智能农业项目:设计并实现一个基于嵌入式系统的智能农业控制系统,实现土壤湿度、光照强度等参数的实时监测。

四、实训过程1. 实训前期:学生分组,明确项目目标、任务分工,查阅相关资料,了解项目需求。

2. 实训中期:各小组按照项目进度,完成硬件选型、电路设计、软件编程、调试等工作。

3. 实训后期:各小组进行项目展示,分享项目经验,进行项目答辩。

五、实训成果1. 完成智能家居、智能交通、智能农业等嵌入式系统项目。

2. 学生动手实践,提高了嵌入式系统设计、编程、调试及测试能力。

嵌入式工作实习报告

嵌入式工作实习报告

一、实习背景随着信息化、智能化技术的飞速发展,嵌入式系统在各个领域得到了广泛应用。

为了更好地了解嵌入式技术,提高自己的实践能力,我于2023年6月至8月在某嵌入式公司进行了为期两个月的工作实习。

二、实习单位简介该公司成立于2005年,主要从事嵌入式系统研发、生产和销售,产品涵盖智能家居、工业控制、医疗设备等领域。

公司拥有一支高素质的研发团队,具备丰富的项目经验和技术实力。

三、实习内容1. 项目背景及需求分析在实习期间,我参与了公司一款智能家居产品的研发项目。

该项目旨在为用户提供便捷、舒适的家居生活体验,主要功能包括远程控制家电、智能安防、环境监测等。

2. 硬件选型及搭建在项目初期,我负责对硬件进行选型及搭建。

根据项目需求,我选择了STM32F103系列单片机作为核心控制器,同时配置了传感器、通信模块、显示屏等外围设备。

在硬件搭建过程中,我学会了如何使用电子元器件、电路板焊接等技能。

3. 软件开发及调试在硬件搭建完成后,我开始进行软件开发及调试。

主要工作包括:(1)嵌入式C语言编程:使用Keil uVision作为开发环境,编写嵌入式C语言程序,实现产品功能。

(2)驱动开发:针对传感器、通信模块等外围设备,编写相应的驱动程序。

(3)系统调试:在开发过程中,不断调试程序,确保系统稳定运行。

4. 项目测试及优化在软件开发完成后,我参与了对产品的测试及优化。

主要工作包括:(1)功能测试:对产品各项功能进行测试,确保满足用户需求。

(2)性能测试:测试产品在高速、高温等恶劣环境下的性能表现。

(3)优化:针对测试过程中发现的问题,对程序进行优化,提高产品稳定性。

四、实习收获1. 技术能力提升通过本次实习,我熟练掌握了嵌入式C语言编程、硬件选型及搭建、驱动开发等技能,提高了自己的实践能力。

2. 团队协作与沟通在项目过程中,我与团队成员密切合作,共同解决问题。

这使我学会了如何与他人沟通、协作,提高了自己的团队协作能力。

嵌入式实训课实验报告

嵌入式实训课实验报告

一、实验背景嵌入式系统在现代工业、消费电子、智能家居等领域扮演着越来越重要的角色。

为了让学生深入了解嵌入式系统的设计原理和开发过程,提高学生的实践能力和创新精神,我们开设了嵌入式实训课程。

本次实验报告将针对实训课程中的部分实验进行总结和分析。

二、实验目的1. 掌握嵌入式系统的基本原理和开发流程。

2. 熟悉嵌入式开发工具和环境。

3. 熟练使用C语言进行嵌入式编程。

4. 学会调试和优化嵌入式程序。

三、实验内容本次实训课程共安排了五个实验,以下是每个实验的具体内容和实验步骤:实验一:使用NeoPixel库控制RGB LED灯带1. 实验目的:学习使用NeoPixel库控制RGB LED灯带,实现循环显示不同颜色。

2. 实验步骤:(1)搭建实验平台,连接NeoPixel LED灯带。

(2)编写程序,初始化NeoPixel库,设置LED灯带模式。

(3)通过循环,控制LED灯带显示不同的颜色。

实验二:使用tm1637库控制数码管显示器1. 实验目的:学习使用tm1637库控制数码管显示器,显示数字、十六进制数、温度值以及字符串,并实现字符串滚动显示和倒计时功能。

2. 实验步骤:(1)搭建实验平台,连接tm1637数码管显示器。

(2)编写程序,初始化tm1637库,设置显示模式。

(3)编写函数,实现数字、十六进制数、温度值的显示。

(4)编写函数,实现字符串滚动显示和倒计时功能。

实验三:使用ds18x20库和onewire库读取DS18B20温度传感器的数据1. 实验目的:学习使用ds18x20库和onewire库读取DS18B20温度传感器的数据,并输出温度值。

2. 实验步骤:(1)搭建实验平台,连接DS18B20温度传感器。

(2)编写程序,初始化ds18x20库和onewire库。

(3)编写函数,读取温度传感器的数据,并输出温度值。

实验四:使用ESP32开发板连接手机热点,并实现LED1作为连接指示灯1. 实验目的:学习使用ESP32开发板连接手机热点,并通过LED1指示灯显示连接状态。

嵌入式实训报告范文2篇2

嵌入式实训报告范文2篇2

嵌入式实训报告范文 (2)嵌入式实训报告范文 (2)精选2篇(一)嵌入式实训报告一、实训背景嵌入式系统是一种以具体任务为中心,集成了硬件与软件的计算机系统。

由于其体积小、功耗低、功能强大等特点,嵌入式系统被广泛应用于各个领域,如家电、汽车、医疗等。

通过参与嵌入式实训,我希望能够掌握嵌入式开发的基本原理和方法,提高自己的实践能力。

二、实训目标1.掌握嵌入式系统的基本知识和开发工具的使用;2.了解嵌入式系统的硬件架构和软件设计流程;3.能够根据需求设计并实现简单的嵌入式系统。

三、实训内容1.学习嵌入式系统基础知识:通过课堂教学和自主学习,了解了嵌入式系统的概念、特点及应用领域。

深入学习了ARM架构和C语言的基本知识,并进行了相应的实践操作。

2.学习嵌入式开发工具的使用:学习了Keil MDK和IAR Embedded Workbench等常用的嵌入式开发工具的安装和配置方法。

通过实操操作,掌握了调试、编译、下载等基本功能的使用。

3.学习嵌入式系统设计流程:了解了嵌入式软件开发的常用流程,包括需求分析、系统设计、编码实现、调试测试、系统验证等。

通过案例分析和实践操作,对嵌入式系统设计流程有了更深入的了解。

4.设计并实现简单的嵌入式系统:根据实训要求,我选择了一个简单的嵌入式系统项目,通过分析需求、设计系统架构、编写软件代码、调试测试等环节,最终成功完成了项目。

四、实训总结及收获通过参与嵌入式实训,我不仅掌握了嵌入式系统的基本知识和开发工具的使用,还锻炼了自己的实践能力。

我深刻认识到嵌入式系统开发需要全面的知识储备和较高的技术水平,同时也需要良好的分析、设计和沟通能力。

通过实训,我对嵌入式系统开发流程有了更深入的理解,对嵌入式系统的设计和开发也有了更高的认识和要求。

在未来的学习和工作中,我会继续深入学习嵌入式系统开发相关知识,并不断提高自己的实践能力。

嵌入式系统是未来的发展方向,通过不断探索和实践,我相信我能够在这个领域取得更好的成果。

嵌入式实训报告范文2篇

嵌入式实训报告范文2篇

嵌入式实训报告范文嵌入式实训报告范文精选2篇(一)嵌入式实训报告一、实训目的和背景嵌入式实训的目的是通过设计和实现一个嵌入式系统,培养学生的嵌入式系统开发才能和团队协作才能。

本次实训的背景是为了满足社会对嵌入式系统开发人才的需求,进步学生的实际动手才能。

二、实训内容1. 硬件平台的选择和搭建:选择了一款ARM开发板作为硬件平台,并搭建了相应的开发环境。

2. 系统设计和分析:根据实训要求,我们团队设计了一个智能门锁系统,包括用户认证、门锁控制和远程监控功能。

3. 软件开发:使用C语言和嵌入式开发工具进展软件开发,实现了用户认证、门锁控制和远程监控等功能。

4. 硬件连接和调试:将开发板和相关传感器、执行器等硬件设备进展连接和调试,确保系统可以正常运行。

5. 功能测试和调优:对系统进展全面测试,发现并修复了一些问题,并对系统进展了性能优化。

三、实训心得和体会通过本次实训,我深入认识到嵌入式系统开发的复杂性和挑战性。

在实训过程中,我们团队遇到了许多问题,比方硬件和软件的兼容性、性能优化等方面。

但是通过团队的努力和合作,我们成功解决了这些问题,并完成了一个功能完善的嵌入式系统。

此外,我还学到了许多软件开发和硬件调试的技巧,进步了自己的实际动手才能。

在团队协作方面,我们团队成员之间互相配合,共同解决问题,形成了良好的协作机制。

总结起来,本次嵌入式实训让我受益匪浅,学会了许多实际应用的技能和知识,并进步了自身的综合才能。

四、实训成果展示在实训完毕后,我们团队成功完成了一个智能门锁系统,具备用户认证、门锁控制和远程监控等功能。

系统的稳定性和可靠性得到了验证,并且在实际使用中得到了积极的反应。

附图:〔展示系统界面、硬件设备连接示意图等〕五、实训改良意见尽管本次实训获得了良好的成果,但仍有一些方面需要改良。

首先,实训的时间安排可以更合理一些,以便更充分地利用时间进展理论操作。

其次,可以增加一些真实场景的案例分析和解决方案的设计,以提升学生的实际应用才能。

嵌入式实验设计实训报告

嵌入式实验设计实训报告

一、实验背景随着信息技术的飞速发展,嵌入式系统在各个领域得到了广泛的应用。

为了让学生更好地掌握嵌入式系统设计的相关知识,提高学生的动手能力和实际操作能力,我们开展了嵌入式实验设计实训。

本次实训以ARM处理器为平台,通过实际操作,让学生了解嵌入式系统的基本原理和设计方法。

二、实验目的1. 熟悉ARM处理器的基本架构和编程环境。

2. 掌握嵌入式系统设计的基本流程和方法。

3. 培养学生的动手能力和实际操作能力。

4. 提高学生对嵌入式系统的认知和应用能力。

三、实验内容1. 实验环境(1)硬件平台:ARM处理器开发板(2)软件平台:Keil uVision5、GNU ARM Embedded Toolchain2. 实验步骤(1)搭建实验环境首先,将开发板连接到计算机,并安装Keil uVision5和GNU ARM Embedded Toolchain软件。

接着,配置开发板,使其能够正常运行。

(2)编写程序根据实验要求,编写嵌入式系统程序。

程序主要包括以下几个方面:1)初始化:设置时钟、GPIO、中断等。

2)主循环:实现程序的主要功能。

3)中断处理:处理外部中断。

4)延时函数:实现延时功能。

(3)编译程序将编写好的程序编译成可执行文件。

(4)下载程序将编译好的程序下载到开发板上。

(5)调试程序在开发板上运行程序,通过串口调试软件观察程序运行情况,并对程序进行调试。

(6)实验报告根据实验内容,撰写实验报告。

3. 实验项目(1)点亮LED灯通过控制GPIO端口,实现LED灯的点亮和熄灭。

(2)按键控制LED灯通过检测按键状态,控制LED灯的点亮和熄灭。

(3)定时器实现定时功能使用定时器实现定时功能,例如定时关闭LED灯。

(4)串口通信实现串口通信,发送和接收数据。

四、实验结果与分析1. 点亮LED灯实验成功实现了通过控制GPIO端口点亮LED灯的功能。

2. 按键控制LED灯实验成功实现了通过检测按键状态控制LED灯的功能。

嵌入式实验报告

嵌入式实验报告

一、自选进阶考核报告1.1 设计要求在主界面上显示两个Button,分别对应菜单Menu菜单和Listview列表,点击主页面Button后,分别进入N项Menu和ListView,Menu和ListView被点击后在文本框中或新页面中显示被选中的第N项内容。

构建上下文菜单和ArrayAdapt构建ListView,N=6;1.2 设计过程新建一个新项目。

依次点击eclipse菜单下的File->Import->Android->Existing Android code Into Workspace.在弹出的窗口里点击Browse 按键来选择工程源码。

我们选择的是Menu 源码。

并勾选Copy project into workspace 的选项。

新建一个工程,首先在Layout里进行布局。

对于主layout,我们设置2个Button用于选择进入Menu或者ListView。

另新建两个Layout对Menu和ListView 进行布局。

特别的是,还需要在res文件夹下的menu文件夹中事先注册上下文菜单(如图1.1)。

图1.1 事先注册好的上下文菜单然后在src文件夹中创建2个新类,分别对应Menu和ListView。

在主类中,设置对于Button的监听函数(setOnClickListener),用于跳转至Menu类或者ListView类。

在Menu类中通过onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) 函数,调取事先注册好的上下文菜单,并且通过onContextItemSelected(MenuItem item)函数对上下文菜单的选择事件进行响应。

在ListView类中首先定义我们需要显示的内容。

我们用private String[] data =[ ];定义。

我们使用对ListView建立一个适配器,让适配器成为我们定义的数组与ListView的桥梁。

嵌入式综合实验报告

嵌入式综合实验报告

嵌入式综合实验报告本科生课程考试成绩单(试卷封面)任课教师签名:日期:注:1. 以论文或大作业为考核方式的课程必须填此表,综合考试可不填。

“简要评语缺填无效。

2. 任课教师填写后与试卷一起送院系研究生教务员处。

3. 学位课总评成绩以百分制计分。

1目录一、实验目的和要求 (2)二、实验原理 (2)(一)实验板功能 (2)(二)硬件 (2)三、实验方案与实验步骤 (2)(一)实现开机动画(10分) (2)(二)GUI界面设计(10分) (2)(三)电子相册相应功能(30分) (3)(四)MP3相应功能(30分) (3)(五)屏保功能(20分) (4)四、实验设备与器材配置 (4)五、实验记录 (4)(一)实现开机动画 (4)(二)GUI界面设计 (7)(三)MP3相应功能 (10)(四)电子相册相应功能 (17)(五)屏保功能 (27)六、实验总结 (32)一、实验目的和要求1、通过“基于华邦710的智能机器宠物”产品开发为案例,掌握基于uCLinux/ARM7的产品开发的流程及方法;2、熟悉AC97接口的应用,了解音频文件编解码方法;3、开发简答的人机交互界面。

二、实验原理(一)实验板功能本系统围绕华邦的ARM7芯片(w90p710/745)实现了丰富的软硬件应用实例,既有前后台系统的应用,又有基于操作系统uClinux的应用,在这个基础上,用户可以快速开发自己的产品。

(二)硬件开发板由底板、核心板、LCD模块构成。

其中LCD模块采用AUO 的3寸TFT 真彩屏,型号为A030DL01,分辨率为960*240。

三、实验方案与实验步骤(一)实现开机动画(10分)要求:起始状态在屏幕中央有一蓝色方块(大小自定,背景色为黑色),蓝色方块的四条边逐渐向四周扩展,扩展到接近屏幕边界时,蓝色方块又逐渐缩小到原来的起始状态。

(二)GUI界面设计(10分)按键定义:定义四个键:左键、右键、确定键、退出键(每个按键对应一个指示灯,当按下此按键的时候,对应的指示灯点亮)(1)在实现开机动画后,显示主界面,在主界面上有两个菜单选项,分别表示MP3播放和电子相册功能。

嵌入式综合实训实验报告

嵌入式综合实训实验报告

一、实验背景与目的随着信息技术的飞速发展,嵌入式系统在各个领域的应用越来越广泛。

为了提升学生对嵌入式系统的理解和应用能力,本实验课程旨在通过综合实训,让学生全面掌握嵌入式系统的开发流程,包括硬件选型、软件开发、系统调试以及项目实施等环节。

通过本实验,学生能够熟悉嵌入式系统的基本原理,提高实际操作能力,为今后从事嵌入式系统相关工作打下坚实基础。

二、实验环境与工具1. 硬件平台:选用某型号嵌入式开发板作为实验平台,具备丰富的外设接口,如GPIO、UART、SPI、I2C等。

2. 软件平台:采用某主流嵌入式Linux操作系统,支持交叉编译工具链,方便软件开发和调试。

3. 开发工具:集成开发环境(IDE),如Eclipse、Keil等,提供代码编辑、编译、调试等功能。

4. 其他工具:示波器、逻辑分析仪、电源适配器等。

三、实验内容与步骤1. 硬件平台搭建(1)根据实验要求,连接嵌入式开发板与计算机,确保硬件连接正确无误。

(2)配置开发板电源,检查开发板各个外设是否正常工作。

2. 软件环境搭建(1)在计算机上安装嵌入式Linux操作系统,并配置交叉编译工具链。

(2)安装集成开发环境(IDE),如Eclipse或Keil,并进行相关配置。

3. 嵌入式系统开发(1)根据实验要求,设计嵌入式系统功能模块,编写相关代码。

(2)利用IDE进行代码编辑、编译、调试,确保程序正常运行。

4. 系统调试与优化(1)使用示波器、逻辑分析仪等工具,对系统进行调试,检查各个模块是否正常工作。

(2)根据调试结果,对系统进行优化,提高系统性能和稳定性。

5. 项目实施(1)根据实验要求,设计并实现一个嵌入式系统项目,如智能家居控制系统、工业自动化控制系统等。

(2)编写项目报告,总结项目实施过程和心得体会。

四、实验结果与分析通过本次嵌入式综合实训,我们完成了以下实验内容:1. 熟悉嵌入式开发平台的基本硬件和软件环境。

2. 掌握嵌入式系统开发流程,包括硬件选型、软件开发、系统调试等环节。

嵌入式实训报告周记

嵌入式实训报告周记

一、实训背景随着科技的飞速发展,嵌入式系统设计已经成为当前信息产业的重要领域。

为了让我们更好地了解嵌入式系统设计,提高我们的实践能力,我们参加了为期两周的嵌入式实训课程。

本次实训主要围绕嵌入式系统设计的基本概念、硬件平台搭建、软件编程及调试等方面进行。

二、实训内容1. 嵌入式系统基本概念实训的第一周,我们学习了嵌入式系统的基本概念,包括嵌入式系统的定义、特点、分类、发展趋势等。

通过学习,我们了解到嵌入式系统是一种专用计算机系统,它具有体积小、功耗低、可靠性高等特点,广泛应用于工业控制、消费电子、医疗设备、汽车电子等领域。

2. 硬件平台搭建在实训的第二周,我们学习了嵌入式硬件平台搭建的相关知识。

首先,我们了解了常见的嵌入式处理器,如ARM、AVR、MSP430等。

然后,我们学习了如何根据实际需求选择合适的硬件平台,并搭建嵌入式开发环境。

在实训过程中,我们亲自动手搭建了一个基于ARM Cortex-M4内核的嵌入式开发平台,包括开发板、电源、调试器等。

3. 软件编程及调试在掌握了硬件平台搭建的基础上,我们开始学习嵌入式软件编程及调试。

首先,我们学习了C语言编程,掌握了嵌入式系统开发的基本语法、数据结构、函数等。

然后,我们学习了嵌入式操作系统,如FreeRTOS、uc/OS等,了解了任务调度、中断处理、定时器等功能。

最后,我们通过实际编程,实现了嵌入式系统的一个简单功能,如点亮LED灯、读取传感器数据等。

4. 项目实践在实训的最后阶段,我们进行了项目实践。

我们以一个智能家居项目为例,学习了如何从需求分析、硬件选型、软件设计到系统调试的全过程。

在项目实践中,我们不仅提高了自己的实践能力,还学会了如何与他人协作,共同完成一个复杂的项目。

三、实训收获1. 理论与实践相结合:通过本次实训,我们不仅学习了嵌入式系统的理论知识,还亲自动手实践,将理论与实践相结合,提高了自己的实践能力。

2. 培养了团队合作精神:在项目实践中,我们学会了与他人沟通、协作,共同解决问题,培养了良好的团队合作精神。

嵌入式实验报告二

嵌入式实验报告二

嵌入式实验报告二在当今科技飞速发展的时代,嵌入式系统已经成为了众多领域中不可或缺的一部分。

从智能家居到工业自动化,从医疗设备到汽车电子,嵌入式系统的应用无处不在。

本次嵌入式实验,让我对嵌入式系统有了更深入的理解和认识。

本次实验的目的是通过实际操作,进一步掌握嵌入式系统的开发流程和相关技术。

实验所使用的硬件平台是_____开发板,其搭载了_____处理器,具有丰富的接口和资源。

软件方面,我们使用了_____集成开发环境(IDE)进行程序的编写、编译和调试。

实验的第一个任务是实现一个简单的 LED 闪烁程序。

通过配置开发板的引脚,控制连接在引脚上的 LED 灯按照一定的频率闪烁。

这个看似简单的任务,却让我对嵌入式系统的底层硬件操作有了初步的了解。

在编写代码的过程中,需要熟悉开发板的引脚定义、时钟配置以及中断处理等知识。

经过多次调试和修改,终于成功地让 LED 灯闪烁起来,那一刻的成就感难以言表。

接下来的实验是实现一个温度传感器的数据采集和显示。

我们使用了_____型号的温度传感器,通过 SPI 接口与开发板进行通信。

在这个过程中,不仅要掌握传感器的通信协议,还要学会如何处理采集到的数据,并将其在数码管或者液晶显示屏上进行显示。

在遇到数据读取不稳定、显示错误等问题时,通过仔细检查代码和硬件连接,最终解决了问题。

在实验过程中,也遇到了不少的困难和挑战。

例如,在配置开发板的时钟时,由于对时钟源和分频系数的理解不够深入,导致系统运行不稳定。

还有在编写中断服务程序时,出现了中断响应不及时的情况,经过查阅资料和反复测试,发现是中断优先级设置不正确。

这些问题的解决,让我深刻体会到了嵌入式系统开发的复杂性和严谨性。

通过这次实验,我不仅掌握了嵌入式系统开发的基本技能,还培养了自己解决问题的能力和团队协作精神。

在实验中,与小组成员共同探讨问题、分享经验,使得实验进展更加顺利。

同时,也让我认识到了自己在知识储备和实践能力方面的不足之处,为今后的学习和研究指明了方向。

QT综合作业实验报告

QT综合作业实验报告

一、实验目的1,了解并掌握Qt集成开发环境下使用Qt Designer开发图形界面程序的流程和相关操作;2,了解并掌握Qt的信号槽和信号传递机制,并通过具体应用加深理解;3,了解并掌握使Qt应用程序支持中文或国际化的方法,并在本次实验中使用;4,了解并掌握QPainter的translate、shear等库函数的使用方法和Widget类的使用方法,并通过本次实验加深理解;5,掌握在Qt Designer界面上为菜单项添加工具栏按钮、创建相应槽函数的方法;6,了解并掌握使用双缓冲机制绘图的方法。

二、实验环境操作系统:Windows 7应用软件:Qt Creator开发平台:qt-sdk-win-opensource-2009.04三、程序流程图:四、核心源代码mainwindow.cpp的内容(实现菜单项的功能和绘图功能的调用) #include "mainwindow.h"#include "ui_mainwindow.h"#include "donewdialog.h"#include <QMessageBox>#include <QFileDialog>#include <QPainter>#include "aboutdialog.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);setWindowTitle(tr("Qt绘图板"));setFixedSize(700,500); //主窗口大小设为700*500area = new PaintArea;scrollArea = new QScrollArea;scrollArea->setBackgroundRole(QPalette::Dark); //scrollArea对象的背景色设为Dark scrollArea->setWidget(area); //将画布添加到scrollArea中scrollArea->widget()->setMinimumSize(800,600); //scrollArea初始化大小设为800*600ui->dockWidget->hide();setCentralWidget(scrollArea); //将scrollArea加入到主窗口的中心区isSaved = false;curFile = tr("未命名.png");creatColorComboBox(ui->penColorComboBox); //画笔颜色组合框creatColorComboBox(ui->brushColorComboBox); //填充颜色组合框}MainWindow::~MainWindow(){delete ui;}void MainWindow::changeEvent(QEvent *e){QMainWindow::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}}void MainWindow::doOpen(){if (maybeSave()){QString fileName = QFileDialog::getOpenFileName(this,tr("打开文件"), QDir::currentPath());if (!fileName.isEmpty()){area->openImage(fileName);scrollArea->widget()->resize(area->getImageSize());//获得图片的大小,然后更改scrollArea的大小isSaved = true;curFile = fileName;}}}void MainWindow::doNew()if(maybeSave()){DoNewDialog dlg;if(dlg.exec() == QDialog::Accepted){int width = dlg.getWidth();int height = dlg.getHeight();area->setImageSize(width,height);scrollArea->widget()->resize(width,height);area->setImageColor(dlg.getBackColor());isSaved = false;}}}bool MainWindow::maybeSave(){if(area->isModified()){QMessageBox::StandardButton box;box = QMessageBox::warning(this,tr("保存文件"),tr("图片已经改变,是否保存?"), QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);if(box == QMessageBox::Yes){return doFileSave();}else if(box == QMessageBox::Cancel){return false;}}return true;}bool MainWindow::doFileSave(){if(isSaved){return saveFile(curFile);}else return doFileSaveAs();}bool MainWindow::saveFile(QString fileName){if(area->saveImage(fileName,"png"))isSaved = true;return true;}else return false;}bool MainWindow::doFileSaveAs(){QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile); if(fileName.isEmpty()){return false;}else return saveFile(fileName);}void MainWindow::on_action_N_triggered() //新建菜单{doNew();}void MainWindow::on_action_O_triggered() //打开菜单{doOpen();}void MainWindow::on_action_S_triggered() //保存菜单{doFileSave();}void MainWindow::on_action_A_triggered() //另存为菜单{doFileSaveAs();}void MainWindow::on_action_X_triggered() //退出菜单{if(maybeSave())qApp->quit();}void MainWindow::closeEvent(QCloseEvent *event) //关闭事件{if(maybeSave())qApp->quit();else event->ignore();}void MainWindow::on_action_P_triggered() //打印菜单{area->doPrint();}void MainWindow::on_action_4_triggered() //放大菜单{area->zoomIn();scrollArea->widget()->resize(area->getImageSize());//获得图片的大小,然后更改scrollArea的大小}void MainWindow::on_action_5_triggered() //缩小菜单{area->zoomOut();}void MainWindow::on_action_6_triggered() //还原菜单{area->zoom_1();}void MainWindow::on_action_7_triggered() //旋转菜单{area->doRotate();}void MainWindow::on_action_8_triggered() //拉伸菜单{area->doShear();}void MainWindow::on_action_10_triggered() //清空菜单{area->doClear();}void MainWindow::on_action_11_triggered() //绘图工具栏菜单{ui->dockWidget->show();}void MainWindow::creatColorComboBox(QComboBox *comboBox){QPixmap pix(16,16);QPainter painter(&pix);painter.fillRect(0,0,16,16,Qt::black); //先绘制一个16*16的小图片,然后给其涂色comboBox->addItem(QIcon(pix),tr("黑色"),Qt::black); //再用该图片作为组合框条目的图标painter.fillRect(0,0,16,16,Qt::white);comboBox->addItem(QIcon(pix),tr("白色"),Qt::white);painter.fillRect(0,0,16,16,Qt::red);comboBox->addItem(QIcon(pix),tr("红色"),Qt::red);painter.fillRect(0,0,16,16,Qt::green);comboBox->addItem(QIcon(pix),tr("绿色"),Qt::green);painter.fillRect(0,0,16,16,Qt::blue);comboBox->addItem(QIcon(pix),tr("蓝色"),Qt::blue);painter.fillRect(0,0,16,16,Qt::yellow);comboBox->addItem(QIcon(pix),tr("黄色"),Qt::yellow);comboBox->addItem(tr("无颜色"),Qt::transparent); //即透明}void MainWindow::on_shapeComboBox_currentIndexChanged(QString shape) //选择图形组合框{if(shape == tr("无"))area->setShape(PaintArea::None); //利用PaintArea类中的枚举变量else if(shape == tr("矩形"))area->setShape(PaintArea::Rectangle);else if(shape == tr("直线"))area->setShape(PaintArea::Line);else if(shape == tr("椭圆"))area->setShape(PaintArea::Ellipse);}void MainWindow::on_penStyleComboBox_currentIndexChanged(QString style) //画笔风格组合框{if(style == tr("实线")){area->setPenStyle(Qt::SolidLine);}else if(style == tr("虚线")){area->setPenStyle(Qt::DotLine);}}void MainWindow::on_penWidthSpinBox_valueChanged(int width) //画笔线宽组合框{area->setPenWidth(width);}void MainWindow::on_penColorComboBox_currentIndexChanged(int index) //画笔颜色组合框{QColor color =ui->penColorComboBox->itemData(index,Qt::UserRole).value<QColor>();area->setPenColor(color);}void MainWindow::on_brushColorComboBox_currentIndexChanged(int index) //填充颜色组合框{QColor color =ui->brushColorComboBox->itemData(index,Qt::UserRole).value<QColor>(); area->setBrushColor(color);}void MainWindow::on_action_12_triggered() //关于对话框的实现{AboutDialog abdlg;abdlg.show();if(abdlg.exec()!=QDialog::Accepted)abdlg.show();}void MainWindow::on_action_2_triggered() //选择直线{area->setShape(PaintArea::Line); //利用PaintArea类中的枚举变量}void MainWindow::on_action_3_triggered() //选择无{area->setShape(PaintArea::None);}void MainWindow::on_action_9_triggered() //选择矩形{area->setShape(PaintArea::Rectangle);}void MainWindow::on_action_13_triggered() //选择椭圆{area->setShape(PaintArea::Ellipse);}void MainWindow::on_action_14_triggered() //选择实线{area->setPenStyle(Qt::SolidLine);}void MainWindow::on_action_15_triggered() //选择虚线{area->setPenStyle(Qt::DotLine);}paintarea.cpp的内容(实现双缓冲绘图并提供绘图接口的调用)#include "paintarea.h"#include <QPainter>#include <QPrintDialog>#include <QPrinter>PaintArea::PaintArea(){image = QImage(400,300,QImage::Format_RGB32); //画布的初始化大小设为400*300,使用32位颜色backColor = qRgb(255,255,255); //画布初始化背景色使用白色image.fill(backColor);modified = false;scale = 1;angle = 0;shear = 0;penColor = Qt::black;brushColor = Qt::black;penWidth = 1;penStyle = Qt::SolidLine;curShape = None;isDrawing = false;}void PaintArea::paintEvent(QPaintEvent *){QPainter painter(this);painter.scale(scale,scale);if(isDrawing) //如果正在绘制特殊图形,则显示临时绘图区上的内容{painter.drawImage(0,0,tempImage);}else{if(angle){QImage copyImage = image; //新建临时的copyImage,利用它进行旋转操作QPainter pp(&copyImage);QPointF center(copyImage.width()/2.0,copyImage.height()/2.0);pp.translate(center);pp.rotate(angle);pp.translate(-center);pp.drawImage(0,0,image);image = copyImage; //只会复制图片上的内容,不会复制坐标系统angle = 0; //完成旋转后将角度值重新设为0}if(shear){QImage copyImage = image;QPainter pp(&copyImage);pp.shear(shear,shear);pp.drawImage(0,0,image);image = copyImage;shear = 0;}painter.drawImage(0,0,image);}}void PaintArea::mousePressEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton) //当鼠标左键按下{lastPoint = event->pos(); //获得鼠标指针的当前坐标作为起始坐标isDrawing = true;}}void PaintArea::mouseMoveEvent(QMouseEvent *event){if(event->buttons()&Qt::LeftButton) //如果鼠标左键按着的同时移动鼠标{endPoint = event->pos(); //获得鼠标指针的当前坐标作为终止坐标if(curShape == None) //如果不进行特殊图形绘制,则直接在image上绘制{isDrawing = false;paint(image);}else //如果绘制特殊图形,则在临时绘图区tempImage上绘制{tempImage = image; //每次绘制tempImage前用上一次image中的图片对其进行填充paint(tempImage);}}}void PaintArea::mouseReleaseEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton) //如果鼠标左键释放{endPoint = event->pos();isDrawing = false;paint(image);}}void PaintArea::paint(QImage &theImage){QPainter pp(&theImage); //在theImage上绘图QPen pen = QPen();pen.setColor(penColor);pen.setStyle(penStyle);pen.setWidth(penWidth);QBrush brush = QBrush(brushColor);pp.setPen(pen);pp.setBrush(brush);int x,y,w,h;x = lastPoint.x()/scale;y = lastPoint.y()/scale;w = endPoint.x()/scale - x;h = endPoint.y()/scale - y;switch(curShape){case None:{pp.drawLine(lastPoint/scale,endPoint/scale); //由起始坐标和终止坐标绘制直线lastPoint = endPoint; //让终止坐标变为起始坐标break;}case Line:{pp.drawLine(lastPoint/scale,endPoint/scale);break;}case Rectangle:{pp.drawRect(x,y,w,h);break;}case Ellipse:{pp.drawEllipse(x,y,w,h);break;}}update(); //进行更新界面显示,可引起窗口重绘事件,重绘窗口modified = true;}void PaintArea::setImageSize(int width, int height){QImage newImage(width,height,QImage::Format_RGB32);image = newImage;update();}void PaintArea::setImageColor(QColor color){backColor = color.rgb(); //因为image的背景色要用QRgb类型的颜色,所以这里进行了一下转换image.fill(backColor);update();}bool PaintArea::saveImage(const QString &fileName, const char *fileFormat) {QImage visibleImage = image;if (visibleImage.save(fileName, fileFormat)) //实现了文件存储{modified = false;return true;}else{return false;}}bool PaintArea::openImage(const QString &fileName){QImage loadedImage;if (!loadedImage.load(fileName))return false;QSize newSize = loadedImage.size();setImageSize(newSize.width(),newSize.height());image = loadedImage;modified = false;update();return true;}QSize PaintArea::getImageSize(){return image.size()*scale;}void PaintArea::doPrint(){QPrinter printer(QPrinter::HighResolution);QPrintDialog *printDialog = new QPrintDialog(&printer, this);if (printDialog->exec() == QDialog::Accepted){QPainter painter(&printer);QRect rect = painter.viewport();QSize size = image.size();size.scale(rect.size(), Qt::KeepAspectRatio);painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); painter.setWindow(image.rect());painter.drawImage(0, 0, image);}}void PaintArea::zoomIn(){scale*=1.2;update();}void PaintArea::zoomOut(){scale/=1.2;update();}void PaintArea::zoom_1(){scale = 1;update();}void PaintArea::doRotate(){angle +=90;update();}void PaintArea::doShear(){shear = 0.2;update();}void PaintArea::doClear(){image.fill(backColor); //用现在的画布背景色进行填充update();}void PaintArea::setPenStyle(Qt::PenStyle style){penStyle = style;}void PaintArea::setPenWidth(int width){penWidth = width;}void PaintArea::setPenColor(QColor color){penColor = color;}void PaintArea::setBrushColor(QColor color){brushColor = color;}void PaintArea::setShape(ShapeType shape){curShape = shape;}五、实验步骤第一部分:设计界面一.设计菜单1.在QtCreator中新建Qt4 Gui Application工程,我这里使用的工程名为paint,使用默认的QMainWindow作为主窗口。

嵌入式图形界面设计_综合实验报告

嵌入式图形界面设计_综合实验报告

嵌入式图形界面设计报告班级:计算机科学与技术15-2班小组成员:刘航征、安宝、曲晗羽杨祎涵、张振、李雪辰2017年12月一、前言天气预报(测)或气象预报(测)是使用现代科学技术对未来某一地点地球大气层的状态进行预测。

从史前人类就已经开始对天气进行预测来相应地安排其工作与生活(比如农业生产、军事行动等等)。

今天的天气预报主要是使用收集大量的数据(气温、湿度、风向和风速、气压等等),然后使用目前对大气过程的认识(气象学)来确定未来空气变化。

由于大气过程的混乱以及今天科学并没有最终透彻地了解大气过程,因此天气预报总是有一定误差的。

最传统的数据是在地面或海面上通过专业人员、爱好者、自动气象站或者浮标收集的气压、气温、风速、风向、湿度等数据。

世界气象组织协调这些数据采集的时间,并制定标准。

这些测量分每小时一次(METAR)或者每六小时一次(SYNOP)。

该项目为一款天气预报软件,基于Qt5开发,具有查询指定城市天气、显示当天天气状况以及未来四天天气大致状况的主要功能,次要功能为更换软件皮肤,显示当天感冒指数等功能。

软件预览图:二、选用的技术基本说明1、Qt JSON操作QJsonDocumentQJsonDocument 类用于读和写JSON 文档。

一个JSON 文档可以使用QJsonDocument::fromJson() 从基于文本的表示转化为QJsonDocument,toJson() 则可以反向转化为文本。

解析器非常快且高效,并将JSON 转换为Qt 使用的二进制表示。

已解析文档的有效性,可以使用!isNull() 进行查询。

如果要查询一个JSON 文档是否包含一个数组或一个对象,使用isArray() 和isObject()。

包含在文档中的数组或对象可以使用array() 或object() 检索,然后读取或操作。

也可以使用fromBinaryData() 或fromRawData() 从存储的二进制表示创建来JSON 文档。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式图形界面设计报告班级:计算机科学与技术15-2班小组成员:刘航征、安宝、曲晗羽杨祎涵、张振、李雪辰2017年12月一、前言天气预报(测)或气象预报(测)是使用现代科学技术对未来某一地点地球大气层的状态进行预测。

从史前人类就已经开始对天气进行预测来相应地安排其工作与生活(比如农业生产、军事行动等等)。

今天的天气预报主要是使用收集大量的数据(气温、湿度、风向和风速、气压等等),然后使用目前对大气过程的认识(气象学)来确定未来空气变化。

由于大气过程的混乱以及今天科学并没有最终透彻地了解大气过程,因此天气预报总是有一定误差的。

最传统的数据是在地面或海面上通过专业人员、爱好者、自动气象站或者浮标收集的气压、气温、风速、风向、湿度等数据。

世界气象组织协调这些数据采集的时间,并制定标准。

这些测量分每小时一次(METAR)或者每六小时一次(SYNOP)。

该项目为一款天气预报软件,基于Qt5开发,具有查询指定城市天气、显示当天天气状况以及未来四天天气大致状况的主要功能,次要功能为更换软件皮肤,显示当天感冒指数等功能。

软件预览图:二、选用的技术基本说明1、Qt JSON操作QJsonDocumentQJsonDocument 类用于读和写JSON 文档。

一个JSON 文档可以使用QJsonDocument::fromJson() 从基于文本的表示转化为QJsonDocument,toJson() 则可以反向转化为文本。

解析器非常快且高效,并将JSON 转换为Qt 使用的二进制表示。

已解析文档的有效性,可以使用!isNull() 进行查询。

如果要查询一个JSON 文档是否包含一个数组或一个对象,使用isArray() 和isObject()。

包含在文档中的数组或对象可以使用array() 或object() 检索,然后读取或操作。

也可以使用fromBinaryData() 或fromRawData() 从存储的二进制表示创建来JSON 文档。

QJsonArrayQJsonArray 类封装了一个JSON 数组。

JSON 数组是值的列表。

列表可以被操作,通过从数组中插入和删除QJsonValue 。

一个QJsonArray 可以和一个QVariantList 相互转换。

可以使用size() 来查询条目的数量,通过insert() 在指定索引处插入值,removeAt() 来删除指定索引的值。

QJsonObjectQJsonObject 类封装了一个JSON 对象。

一个JSON 对象是一个“key/value 对”列表,key 是独一无二的字符串,value 由一个QJsonValue 表示。

一个QJsonObject 可以和一个QVariantMap 相互转换。

可以使用size() 来查询“key/value 对”的数量,通过insert() 插入“key/value 对”,remove() 删除指定的key。

QJsonValueQJsonValue 类封装了一个值。

JSON 中的值有6 种基本数据类型:∙bool(QJsonValue::Bool)∙double(QJsonValue::Double)∙string(QJsonValue::String)∙array(QJsonValue::Array)∙object(QJsonValue::Object)∙null(QJsonValue::Null)一个值可以由任何上述数据类型表示。

此外,QJsonValue 有一个特殊的标记来表示未定义的值,可以使用isUndefined() 查询。

值的类型可以通过type() 或isBool()、isString() 等访问函数查询。

同样地,值可以通过toBool()、toString() 等函数转化成相应的存储类型。

QJsonParseErrorQJsonParseError 类用于在JSON 解析中报告错误。

枚举QJsonParseError::ParseError:该枚举描述JSON 文档在解析过程中所发生的错误类型。

2、Qt XML 操作QXmlStreamReader用于读取格式良好的XML文档的快速解析器,该类最快且最易于使用,并提供了与其他Qt兼容的应用程序编程接口,很适用于编写单通道解析器;3、QNetworkAccessManagerQNetworkAccessManager类允许应用程序发送网络请求和接收网络应答。

三、方案设计1、初始化UI界面2、获取当前地区时间3、从文件中读取每个城市名称以及其代码,将其组合分别存入QMap类对象citykeys中4、用预设的url发送http请求,获取本地城市名称5,、用获取的本地城市名称获取citykeys中对应的城市代码发出查询未来五天天气的http请求6、收到的回复为JSON文档,用QJsonDocument类解析JSON文档,将得到的未来五天的天气信息分别存入Forecast结构体数组forecast的每一个元素中,将这些信息显示在主窗口中对应的控件上,然后发出查询今天天气的http请求7、收到的回复为XML格式文档,用QXmlStreamReader类读取其信息,将当天的天气信息存入Today 结构体today中,将这些信息显示在主窗口中对应的控件上。

8、设置搜索按钮以及换肤按钮的信号与槽的关联。

流程图四、详细代码解析ui设计界面:mainwindow.h:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include<QNetworkAccessManager> #include<QNetworkReply>#include<QNetworkRequest>#include<QPixmap>#include<QPaintEvent>#include<QPainter>#include<QPoint>#include<QMouseEvent>#include<QLabel>namespace Ui {class MainWindow;}struct Forecast{QString fengxiang;QString fengli;QString high;QString type;QString low;QString date;};struct Today{QString ganmao;QString city;QString updatetime;QString wendu;QString fengli;QString fengxiang;QString sunrise;QString sunset;QString shidu;};class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0); ~MainWindow();protected:void paintEvent(QPaintEvent *);void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *); protected slots:void replayFinished(QNetworkReply *reply);private slots:void on_getButton_clicked();void on_updateButton_clicked();private:Ui::MainWindow *ui;QNetworkAccessManager *manager;QString URL_1;QString URL_2;Forecast forecast[5];Today today;void parseJson(QString Json);void parseXml(QString Xml);void parseCity(QString City);void loadCitykeys();//加载城市代码文件QMap<QString,QString> citykeys;//存储城市代码int choose;//0.查询IP 1.今天天气+指数2.未来5天天气QPixmap pixmap;QPoint move_point;bool mouse_press;QList<QLabel *> forecast_date_list;QList<QLabel *> forecast_temp_list;QList<QLabel *> forecast_type_list;QString city;int uid;};#endif //MAINWINDOW_Hmainwindow.cpp:#include "mainwindow.h"#include "ui_mainwindow.h"#include<QVariant>#include<QByteArray>#include<QJsonParseError>#include<QJsonArray>#include<QJsonObject>#include<QJsonDocument>#include<QJsonValue>#include<QXmlStreamReader>#include<QMessageBox>//#include<QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);setWindowFlags(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);pixmap.load(":/images/UI0");resize(pixmap.size());uid = 0;mouse_press = false;forecast_date_list<<ui->forecast_0_date<<ui->forecast_1_date<<ui->forecast_2_date<<ui->forecast_3_date<<ui->forecast_4_date;forecast_temp_list<<ui->forecast_0_temp<<ui->forecast_1_temp<<ui->forecast_2_temp<<ui->forecast_3_temp<<ui->forecast_4_temp;forecast_type_list<<ui->forecast_0_type<<ui->forecast_1_type<<ui->forecast_2_type<<ui->forecast_3_type<<ui->forecast_4_type;manager = new QNetworkAccessManager(this);//天气APIURL_1 = "/weather_mini?citykey=";URL_2 = "/WeatherApi?citykey=";connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replayFinished(QN etworkReply*)));//设置组件样式ui->cityEdit->setTextMargins(0, 0, ui->getButton->width(), 0);ui->cityEdit->setStyleSheet("QLineEdit{border: 1px solid gray;border-radius: 3px;background:rgb(200, 231, 232);}QLineEdit:hover{border-color:transparent; }");ui->getButton ->setStyleSheet("background:transparent;");ui->closeButton->setStyleSheet("QPushButton{border-image:url(:/images/close);}QPushButton:hover{border-image:url(:/images/close_on);}QPushButton:hover:pressed{border-image:url(:/images/close);}");ui->minButton->setStyleSheet("QPushButton{border-image:url(:/images/min);}QPushButton:hover{border-image:url(:/images/min_on);}QPushButton:hover:pressed{border-image:url(:/images/min);}");ui->updateButton->setStyleSheet("QPushButton{border-image:url(:/images/update);}QPushButton:hover{border-image:url(:/ima ges/update_on);}QPushButton:hover:pressed{border-image:url(:/images/update); }");QDateTime time = QDateTime::currentDateTime();ui->date->setText(tr("%1").arg(time.toString("yyyy-MM-dd")));//加载城市代码loadCitykeys();//启动程序后先查询ip定位默认城市choose = 0;manager->get(QNetworkRequest(QUrl("/iplookup/ipl ookup.php")));}MainWindow::~MainWindow(){delete ui;}void MainWindow::paintEvent(QPaintEvent *){QPainter painter(this);painter.drawPixmap(0, 0, pixmap);//绘制UI}void MainWindow::mousePressEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton){//鼠标相对于窗体的位置)move_point = event->pos();mouse_press = true;}}void MainWindow::mouseMoveEvent(QMouseEvent *event){if(mouse_press){//鼠标相对于屏幕的位置QPoint move_pos = event->globalPos();//移动主窗体this->move(move_pos - move_point);}}void MainWindow::mouseReleaseEvent(QMouseEvent *){mouse_press = false;}void MainWindow::loadCitykeys() {QFile file(":/citykeys/citykeys");if ( !file.open(QIODevice::ReadOnly | QIODevice::Text) ) return ;QString tmp;while (file.atEnd() == 0) {tmp = file.readAll();}QStringList list = tmp.split(",");for(int i = 0; i < list.length(); i++) {QString s = list.at(i);QString citys = s.split(":").at(1);QString city = citys.replace("\"", "");QString codes = s.split(":").at(0);QString code = codes.replace("\"", "");citykeys.insert(city, code);}}void MainWindow::replayFinished(QNetworkReply *reply){QVariant status_code =reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);if(reply->error() == QNetworkReply::NoError){QByteArray bytes = reply->readAll();if(choose == 0)//查询IP{QString result = QString::fromLocal8Bit(bytes);parseCity(result);}else if(choose == 1)//今天天气+指数{QString result(bytes);parseXml(result);}else if(choose == 2)//未来5天天气{QString result(bytes);parseJson(result);}}elseQMessageBox::information(this,tr("出错啦"),tr("网络错误,请检查网络连接"),QMessageBox::Ok,QMessageBox::Ok);}//解析城市信息void MainWindow::parseCity(QString City){city = City.split(tr(" ")).at(5);if(city == "" || citykeys[city]==""){QMessageBox::information(this,tr("提示"),tr("无法定位城市,请手动查询"),QMessageBox::Ok,QMessageBox::Ok);return;}QString url = URL_1 + citykeys[city];choose = 2;manager->get(QNetworkRequest(QUrl(url)));}//解析json格式的未来天气void MainWindow::parseJson(QString Json){QByteArray byte_array;QJsonParseError json_error;QJsonDocument parse_doucment =QJsonDocument::fromJson(byte_array.append(Json),&json_error);if(json_error.error == QJsonParseError::NoError){QJsonObject obj = parse_doucment.object();QJsonValue desc = obj.take("desc");if(desc.toString() != "OK"){QMessageBox::information(this,tr("抱歉"),tr("暂无此城市的天气情况"),QMessageBox::Ok,QMessageBox::Ok);return;}QJsonValue data = obj.take("data");today.ganmao = data.toObject().take("ganmao").toString();QJsonValue forecast1 = data.toObject().take("forecast");QJsonArray forecast2 = forecast1.toArray();for(int i=0; i<5; i++){QJsonValue value = forecast2.at(i);QJsonObject object = value.toObject();forecast[i].fengxiang = object.take("fengxiang").toString();forecast[i].date = object.take("date").toString();forecast[i].fengli = object.take("fengli").toString();forecast[i].high = object.take("high").toString();forecast[i].low = object.take("low").toString();forecast[i].type = object.take("type").toString();}for(int i=0;i<5;i++){forecast_date_list[i]->setText(tr("%1").arg(forecast[i].date));forecast_temp_list[i]->setText(tr("%1- %2").arg(forecast[i].low.split(" ").at(1)).arg(forecast[i].high.split(" ").at(1)));forecast_type_list[i]->setPixmap(QPixmap(tr(":/images/%1").arg(forecast[i].t ype)));forecast_type_list[i]->setToolTip(tr("%1 : %2- %3").arg(forecast[i].type).arg(forecast[i].fengli).arg(forecast[i].fengxia ng));}ui->forecast_0_date->setText(tr("今天"));QString url = URL_2 + citykeys[city];choose = 1;manager->get(QNetworkRequest(QUrl(url)));}else{QMessageBox::information(this,tr("出错啦"),tr("数据出错,请重试"),QMessageBox::Ok,QMessageBox::Ok);return;}}//解析XML格式的今天天气void MainWindow::parseXml(QString Xml){QXmlStreamReader xml(Xml);while(!xml.atEnd()){if(xml.hasError()){QMessageBox::information(this,tr("出错啦"),tr("数据出错,请重试"),QMessageBox::Ok,QMessageBox::Ok);return;}else if(xml.isStartElement()){if(()=="city"){today.city = xml.readElementText();}else if(()=="updatetime"){today.updatetime = xml.readElementText();}else if(()=="wendu"){today.wendu = xml.readElementText();}else if(()=="fengli"){today.fengli = xml.readElementText();}else if(()=="shidu"){today.shidu = xml.readElementText();}else if(()=="fengxiang"){today.fengxiang = xml.readElementText();}else if(()=="sunrise_1"){today.sunrise = xml.readElementText();}else if(()=="sunset_1"){today.sunset = xml.readElementText();xml.clear();ui->city->setText(tr("%1").arg(today.city));ui->temp->setText(tr("%1℃").arg(today.wendu));ui->sunrise->setText(tr("%1").arg(today.sunrise));ui->sunset->setText(tr("%1").arg(today.sunset));ui->label->setText(tr("日出"));ui->label_2->setText(tr("日落"));ui->label_3->setText(tr("湿度"));ui->shidu->setText(tr("%1").arg(today.shidu));ui->fengli->setText(tr("%1").arg(today.fengli));ui->fengxiang->setText(tr("%1").arg(today.fengxiang)); ui->label_4->setText(tr("感\n冒\n指\n数"));ui->ganmao->setText(tr("%1").arg(today.ganmao));return;}elsexml.readNext();}elsexml.readNext();}xml.clear();}//搜索框查询天气void MainWindow::on_getButton_clicked(){if(ui->cityEdit->text().isEmpty())return;city = ui->cityEdit->text();if(citykeys[city] == "") {QMessageBox::information(this,tr("抱歉"),tr("暂无此城市的天气情况"),QMessageBox::Ok,QMessageBox::Ok);return;}QString url = URL_1 + citykeys[city];choose = 2;manager->get(QNetworkRequest(QUrl(url)));}//简单换肤void MainWindow::on_updateButton_clicked(){//选择UI的idif(uid == 3)uid = 0;elseuid = uid + 1;//拼凑成UI路径QString UIpath = tr(":/images/UI%1").arg(uid);//qDebug()<<UIpath;//加载UIpixmap.load(UIpath);//产生paintEvent重绘UIupdate();}main.cpp:#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.show();return a.exec();}五、测试数据及分析打开程序:换肤:搜索指定城市天气信息:六、结论:本次我们小组对设计实验所涉及到知识进行讨论,共同研究,查证资料,掌握将要用到的Qt知识并且对我们小组的实验进行主要设计,对小组实验进行分工,本次设计实验结束后我们脑海里已经对QT的知识面得到了延伸!七、参考文献/liang19890820/article/details/52767153 [Qt之JSON生成与解析] /styyzxjq2009/article/details/8041287[Qt XML读取写入操作]/chenlong12580/article/details/7391622 [Qt网络编程之QNetworkAccessManager]。

相关文档
最新文档