嵌入式控制系统综合实验

合集下载

嵌入式综合实验报告

嵌入式综合实验报告

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 流水灯控制。

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告引言嵌入式系统作为一种广泛应用于各行各业的计算机系统,其本身具有一定的难度与挑战。

本实验报告将围绕嵌入式系统的设计、开发以及应用展开讨论,旨在总结并分享在实验中所获得的经验与知识。

一. 实验背景嵌入式系统是指以特定功能为目标的计算机系统,其设计与开发过程相较于传统的计算机系统更为复杂和精细。

本次实验的主要目标是通过设计一个基于嵌入式系统的智能家居控制器,来探索嵌入式系统的应用与实践。

二. 实验内容2.1 硬件设计嵌入式系统的硬件设计是整个实验的基础,其合理性与稳定性直接影响系统的性能和可靠性。

在本次实验中,我们选择了一块主频为xx的处理器作为核心,配备了丰富的外设接口,如GPIO、串口等。

我们还为系统增加了一块液晶显示屏和一组按键,以实现简单的用户交互。

2.2 软件开发在硬件设计完成后,我们开始进行软件开发。

首先,我们需要选择一个合适的操作系统作为嵌入式系统的基础。

针对本次实验,我们选择了xx操作系统,其具备较强的实时性和稳定性,能够满足我们对系统性能的要求。

接着,我们进行了嵌入式系统的驱动程序开发。

通过编写各个外设的驱动程序,我们实现了与液晶显示屏和按键的交互,并将其与处理器进行了适当的接口配置。

另外,我们还开发了嵌入式系统的应用程序。

通过编写智能家居控制器的代码,我们成功实现了对家居设备的远程控制和监测。

用户可以通过液晶显示屏和按键进行交互,实现对家居设备的开关、调节和状态查看等操作。

三. 实验结果与分析经过实验测试,我们发现嵌入式系统在智能家居领域的应用具有较高的可行性与实用性。

通过嵌入式系统的控制,用户可以方便地实现对家居设备的远程操控,提升了家居智能化的程度。

同时,嵌入式系统的实时性和稳定性使得智能家居控制器具备了较高的安全性和可靠性。

然而,在实验过程中我们也遇到了一些挑战。

其中,系统的驱动程序开发是较为复杂的一环,需要仔细理解硬件接口和协议,并进行合理的配置。

此外,系统的稳定性和功耗管理也是需要重点关注的问题。

嵌入式系统-流水灯、按键、定时器实验报告

嵌入式系统-流水灯、按键、定时器实验报告

嵌入式系统应用实验报告姓名:学号:学院:专业:班级:指导教师:实验1、流水灯实验编程控制实验板上LED灯轮流点亮、熄灭,中间间隔一定时间。

实验主要考察对STM32F10X系列单片机GPIO的输出操作。

参阅数据手册可知,通过软件编程,GPIO可以配置成以下几种模式:◇输入浮空◇输入上拉◇输入下拉◇模拟输入◇开漏输出◇推挽式输出◇推挽式复用功能◇开漏式复用功能根据实验要求,应该首先将GPIO配置为推挽输出模式。

由原理图可知,单片机GPIO输出信号经过74HC244缓冲器,连接LED灯。

由于74HC244的OE1和OE2都接地,为相同电平,故A端电平与Y端电平相同且LED灯共阳,所以,如果要点亮LED,GPIO应输出低电平。

反之,LED灯熄灭。

软件方面,在程序启动时,调用SystemInit()函数〔见附录1〕,对系统时钟等关键部分进行初始化,然后再对GPIO进行配置。

GPIO配置函数为SZ_STM32_LEDInit()〔见附录2〕,函数中首先使能GPIO 时钟:RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);然后配置GPIO输入输出模式:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;再配置GPIO端口翻转速度:GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;最后将配置好的参数写入寄存器,初始化完成:GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure)。

初始化完成后,程序循环点亮一个LED并熄灭其他LED,中间通过Delay()函数进行延时,到达流水灯的效果〔程序完整代码见附录3〕。

实验程序流程图如下:硬件方面,根据实验指南,将实验板做如下连接:实验二、按键实验利用STM32读取外部按键状态,按键按下一次产生一次外部中断在中断处理函数中使按键所对应的灯亮起。

嵌入式系统实验二-LED控制实验

嵌入式系统实验二-LED控制实验

《嵌入式系统》课程实验报告学生姓名:指导教师:记分及评价:一、实验名称LED控制实验二、实验目的掌握利用S3C2410X芯片地址总线扩展到I/O来驱动LED显示;了解ARM芯片中利用总线扩展I/O口的使用方法。

三、实验内容编写程序,控制实验平台的发光二极管LED1,LED2,LED3,LED4,使它们有规律的点亮和熄灭,具体顺序如下:LED1亮->LED2亮->LED3亮->LED4亮>LED1灭>LED2灭->LED3灭>LED4灭->全亮->全灭,如此反复。

四、实验原理片选信号在接入74HC573前经过了如下处理:LE信号的产生:向LED写入数据LED连接图五、实验结果超级终端上显示一下信息:六、练习自己编写程序使数码管以不同的显示方式显示。

显示方式:用LED1、LED2、LED3、LED4依次显示00F9~00F6-00F6~00F9,然后依次显示00FE~00F0-00F0~00FE。

#include "2410lib.h"#define rCPLDLEDADDR (*(volatile unsigned char*)0x21180000)void led_on(void){int i,nOut;nOut = 0xFF;rCPLDLEDADDR = nOut & 0xF9;for(i = 0; i < 500000; i++);rCPLDLEDADDR = nOut & 0xF6;for(i = 0; i < 500000; i++);rCPLDLEDADDR = nOut & 0xF6;for(i = 0; i < 500000; i++);rCPLDLEDADDR = nOut & 0xF9;for(i = 0; i < 500000; i++);}void led_off(void){int i,nOut;nOut = 0xF0;rCPLDLEDADDR = nOut | 0xFE;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0xFC;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0xF8;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0xF0;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0xF0;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0xF8;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0xFC;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0xFE;for(i = 0; i < 100000; i++); }void led_on_off(void){int i;rCPLDLEDADDR = 0xF0;for(i = 0; i < 500000; i++);rCPLDLEDADDR = 0xFF;for(i = 0; i < 500000; i++);void led_test(void){uart_printf("\n Expand I/O (Diode Led) Test Example\n");uart_printf(" Please Look At The LEDS \n");led_on();led_off();led_on_off();delay(20000);uart_printf(" End.\n");}。

嵌入式项目综合实训报告

嵌入式项目综合实训报告

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

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

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

二、实训目标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. 学生动手实践,提高了嵌入式系统设计、编程、调试及测试能力。

嵌入式实训课实验报告

嵌入式实训课实验报告

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

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

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

二、实验目的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指示灯显示连接状态。

嵌入式控制系统实训报告

一、实训背景随着我国经济的快速发展,人们对生活品质的要求越来越高,对农业生产环境的要求也越来越高。

智能温室作为一种高效、节能、环保的农业生产方式,在农业领域得到了广泛应用。

然而,传统的温室控制系统存在着能耗高、控制精度低、自动化程度不足等问题。

因此,研究一种基于STM32微控制器的智能温室控制系统具有重要意义。

二、实训目标1. 掌握STM32微控制器的硬件结构和编程方法;2. 学会使用温湿度传感器、光照传感器等传感器模块;3. 熟悉嵌入式系统开发流程,包括硬件设计、软件编程和系统测试;4. 实现智能温室的实时监控和自动控制。

三、实训内容1. 硬件设计(1)开发板:选用STM32F103系列开发板,该开发板具有丰富的外设接口,方便扩展。

(2)传感器模块:选用DHT22温湿度传感器和BH1750光照传感器,用于实时采集温室内的温湿度、光照强度等信息。

(3)控制模块:选用电机和阀门控制模块,用于控制通风和灌溉设备。

(4)显示屏:选用OLED显示屏,用于显示温室环境信息和系统状态。

(5)电源模块:选用稳压电源,为系统提供稳定的工作电压。

2. 软件编程(1)系统初始化:编写初始化代码,配置STM32微控制器的时钟、GPIO、ADC等外设。

(2)传感器数据采集:编写DHT22和BH1750传感器的驱动程序,实现数据的实时采集。

(3)控制逻辑:根据采集到的温湿度、光照强度等信息,编写控制逻辑程序,实现对通风和灌溉设备的自动控制。

(4)用户界面:编写OLED显示屏的驱动程序,实现用户界面的显示功能。

3. 系统测试(1)功能测试:验证系统各项功能是否正常,包括传感器数据采集、控制逻辑、用户界面等。

(2)性能测试:测试系统在实时监控和自动控制方面的性能,如响应速度、控制精度等。

四、实训成果1. 成功实现基于STM32微控制器的智能温室控制系统,实现对温室环境的实时监控和自动控制。

2. 系统具有以下特点:(1)实时性强:传感器数据采集频率高,控制系统响应速度快。

嵌入式系统 实验报告


使能 IRQ 中断。
4 装载并使能外中断;
5 选用 DebugInExram 生成目标,然后编译连接工程。
6 选择【Project】->【Debug】,启动 AXD 进行 JTAG 仿真调试。
7 全速运行程序,LED 闪烁;
8 每一次按键 Key,蜂鸣器就会转换静音或鸣响状态。
四.测试数据及运行结果
1
五.总结
1.实验过程中遇到的问题及解决办法;
由于本次实验较简单,且我们之前学习的微机原理课程也进行了流水灯的设
计实验,所以对于本次实验,我完成地很顺利,在实验中没有遇到问题。
2.对设计及调试过程的心得体会。
本次实验是本学期该课程我们进行的第一次实验,总的来说,实验不是很难,
设计过程也相对简单,其主要目的是让我们熟悉一下实验环境,并且能在实验环
6
五.总结 1.实验过程中遇到的问题及解决办法;
实验第一次运行时,蜂鸣器一直处于鸣响状态,及时按了按键,蜂鸣器还是 一直鸣叫,不产生外中断。后来仔细检查了程序,发现原来是忘记使能 EINT0 中 断了,加上 VICIntEnable = 1<<0x0e 代码,程序就能正常运行了。 2. 对设计及调试过程的心得体会。
境下进行简单的实验操作,为之后的实验打下坚实的基础。
六.附录:源代码(电子版)
#include "config.h"
const uint32 LEDS8 = 0xFF << 18;//P1[25:18]控制 LED1~LED8,低电平点亮
const uint32 KEY = 1 << 16;
//P0.16 连接 KEY1
三.方案设计
① 启动 ADS1.2IDE 集成开发环境,选择 ARM Executable Image for lpc2131

单片机实验嵌入式系统实验


实验三
进行硬件调试,确保 电路功能正常,能够 支持后续的软件设计。
嵌入式系统软件设计实验
总结词
掌握嵌入式系统软件设计 原理
实验一
学习并掌握嵌入式系统操 作系统的使用,如Linux、 RTOS等。
实验二
根据项目需求,编写嵌入 式系统的底层驱动程序, 实现对硬件设备的控制。
实验三
进行软件调试,确保驱动 程序能够正确地与硬件交 互,实现所需功能。
ቤተ መጻሕፍቲ ባይዱ
嵌入式系统应用开发实验
总结词
掌握嵌入式系统应用开发 流程
实验一
实验二
根据项目需求,设计并实 现嵌入式系统的应用软件, 如智能家居控制、工业自 动化等。
进行系统集成测试,确保 应用软件与硬件能够协同 工作,实现完整的功能。
实验三
优化嵌入式系统的性能, 提高其稳定性和可靠性。
单片机与嵌入式系统实验比
消费电子
嵌入式系统在消费电子领域应用广 泛,如智能手机、平板电脑、智能 电视等。
汽车电子
单片机和嵌入式系统都在汽车电子 领域有应用,但嵌入式系统在高级 驾驶辅助系统(ADAS)等领域的应用 更为广泛。
单片机与嵌入式系统实验案
06
例分析
LED闪烁实验案例分析
总结词:简单明了
详细描述:LED闪烁实验是单片机实验中最基础的实验之一,主要目的是让学习者了解单片机 的I/O端口操作。通过编程控制单片机,使得连接在单片机上的LED灯按照设定的频率进行闪烁, 从而掌握单片机的硬件连接和软件编程。
单片机实验的发展趋势
01 随着技术的不断发展,单片机也在不断升级换代, 未来单片机将更加注重高性能、低功耗、智能化 等方面的发展。
02 嵌入式系统与物联网技术的结合将更加紧密,单 片机将更多地应用于智能家居、工业自动化等领 域。

嵌入式软硬件设计实验报告

嵌入式控制系统综合实验组长 :学号:成员: 学号:成员: 学号:学院(系):自动化学院题目: 基于ARM的直流电机控制指导老师:目录1 引言 (3)2硬件介绍 (3)2.1实验箱的介绍 (3)2.2实验箱的使用 (4)3开发环境 (4)3.1系统需求 (5)3.2设置超级终端 (5)3.3 测试运行步骤 (6)4实验原理分析 (7)4.1EMIFA 接口 (7)4.2直流电机控制 (8)4.3 ICETEK-CTR直流电机模块 (9)4.4控制原理 (10)4.5驱动集成 (11)5实验解决方案 (11)6软件的具体设计 (12)6.1电机速度的控制和LCD图片的显示 (12)6.2LED灯的状态显示和鸣笛 (16)6.3电机开关和倒车时速度不变的功能模块的实现 (18)6.4总结 (20)7调试及结果分析 (24)1 引言此次嵌入式控制系统综合实验,我们小组以PWM控制直流电机的实验为基础,增加功能。

并且模拟了电动车的基本功能。

其本质就是以PWM控制直流电机为基础,做出了一个控制电动车的控制系统。

2 硬件介绍2.1 实验箱的介绍本套实验系统主要由4部分组成,因此,这里分4部分来介绍该套系统:2.1.1 实验箱部分:一个独立的数字信号源,可提供四种波形、三路输出;信号的波形、频率、幅度可调。

多种直流电源输出。

+5V(5A),+12V(1A),+9 V (0.5A),地。

底板提供插座,可使用插座完成 DSP 评估板上的 A/D信号输入和 D/A输出。

测试模块:提供18个测试点,可以测量PWM 输出、AD输入和DA输出波形。

双信号发生器设计,更加贴近DSP的实际应用,许多实际的情况都是需要对两个信号进行相关分析。

2.1.2 通用DSP开发系统部分:USB2.0 接口开发系统,支持C2000/VC33/C5000/C6000的开发应用。

支持CCS。

通用开发系统和DSP控制板分离,有利于将来DSP的升级。

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

《嵌入式控制系统综合实验》课程实验报告项目名称 基于STM32的手机输入法南京理工大学2017年6月目录1 设计背景 (2)2 系统总体方案 (3)3 系统具体设计 (4)3.1 手写识别原理 (4)3.2手写识别程序设计 (6)3.3手写识别硬件设计 (10)3.4拼音九键输入原理 (10)3.5拼音九键软件设计 (11)3.6拼音九键硬件设计 (13)4 编译调试 (14)4.1 手写识别、拼音输入法单项调试 (14)4.2 手写识别、拼音输入法组合调试 (18)5总结 (19)1 设计背景随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛。

随着IC设计的发展,出现了工业化ARM芯片,ARM微处理器及技术已经深入到各大领域,并取得了很大成功,如无线通信领域、蓝牙技术、网络应用领域、消费类电子产品领域、信息家电领域等。

目前几乎所有带触摸屏的手机都能实现拼音输入和手写识别输入。

Cortex-M3采用ARM V7构架,不仅支持Thumb-2指令集,而且拥有很多新特征。

较之ARM7 TDMI,Cortex-M3拥有更强劲的性能、更高的代码密度、位带操作、可嵌套中断、低成本、低功耗等众多优势。

本次嵌入式实验,我们采用基于STM32F103带4.3寸触摸屏的嵌入式开发板来模拟一个手机输入法,该输入法功能主要有手写识别跟拼音九键。

嵌入式开发平台如图1所示。

图1 STM32F103嵌入式开发平台2 系统总体方案本次嵌入式实验设计了“手机输入法”功能,该输入法功能主要包括两种输入方式——拼音九键+手写识别。

下面首先介绍一下本设计的软、硬件基础,然后介绍本设计的总体方案。

软件基础:本次嵌入式综合实验,我们利用MDK软件来开发STM32。

MDK 源自德国的KEIL公司,是RealView MDK的简称。

在全球MDK被超过10万的嵌入式开发工程师使用。

MDK5向后兼容MDK4和MDK3等,以前的项目同样可以在MDK5上进行开发(但是头文件方面得全部自己添加),MDK5同时加强了针对Cortex-M微控制器开发的支持,并且对传统的开发模式和界面进行升级,MDK5由两个部分组成:MDK Core和Software Packs。

其中,Software Packs可以独立于工具链进行新芯片支持和中间库的升级。

硬件基础:本次嵌入式综合实验所使用的STM32开发板选择的是STM32F103ZETT6作为MCU,该芯片是STM32F103里面配置非常强大的了,它拥有的资源包括:64KB SRAM、512KB FLASH、2个基本定时器、4个通用定时器、2个高级定时器、2个DMA控制器(共12个通道)、3 个SPI、2个IIC、5 个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO 接口、1个FSMC接口以及112个通用IO口。

该芯片的配置十分强悍,并且还带外部总线(FSMC)可以用来外扩SRAM和连接LCD等,通过FSMC驱动LCD,可以显著提高LCD的刷屏速度,本设计要完成输入法的界面设计、功能实现以及不同输入方式之间的来回切换,还必须与键盘、LCD等硬件设备结合。

总体方案如下:(1)设计输入法的总体要实现的功能,画出功能块图;(2)将整个输入法设计分成两大模块,一是手写识别,二是拼音输入,分别对他们进行程序设计;(3)画出手写识别与拼音输入的程序流程图,并编写相应的程序;(4)最后,将设计好的两个输入法模块整合起来,并编写相应的程序,使之可以完美地进行来回切换。

系统总体设计框图如图2:图2 系统总体设计框图我们将整个嵌入式综合实验分成2步:第一步,分别设计出手写识别功能和拼音九键输入功能;第二步,将以上设计好的功能模块整合在一起,实现这两种输入方式的来回切换。

3 系统具体设计基于STM32的输入法功能实现,一开始系统默认是手写识别(其实也可以初始化为拼音九键模式,这是可以自行设计的,我们把手写识别模式作为系统的默认输入模式)。

3.1 手写识别原理我们在STM32开发板上实现了一个简单的数字、字母手写识别功能。

手写识别,是指对在手写设备上书写时产生的有序轨迹信息进行识别的过程,是人际交互最自然、最方便的手段之一。

随着智能手机和平板电脑等移动设备的普及,手写识别的应用也被越来越多的设备采用。

手写识别能够使用户按照最自然、最方便的输入方式进行文字输入,易学易用,可取代键盘或者鼠标。

用于手写输入的设备有许多种,比如电磁感应手写板、压感式手写板、触摸屏、触控板、超声波笔等。

STM32嵌入式开发板自带的TFTLCD触摸屏可以用来作为手写识别的输入设备。

手写识别系统分为两个过程:训练学习过程;识别过程。

如图3所示:图3 字母、数字识别系统示意图图3中虚线部分为训练学习过程,该过程首先需要使用设备采集大量数据样本,样本类别数目为0~9,a~z,A~Z总共62类,每个类别5~10个样本不等(样本越多识别率就越高)。

对这些样本进行传统的把方向特征提取,提取后特征维数为512 维,这对STM32 来讲,计算量和模板库的存储量来说都难以接受,所以需要运行一些方法进行降维,这里采用LDA 线性判决分析的方法进行降维,所谓线性判决分析,即是假设所有样本服从高斯分布(正态分布)对样本进行低维投影,以达到各个样本间的距离最大化。

这里将维度降到64维,然后针对各个样本类别进行平均计算得到该类别的样本模板。

而对于识别过程,首先得到触屏输入的有序轨迹,然后进行一些预处理,预处理主要包括重采样,归一化处理。

重采样主要是因为不同的输入设备不同的输入处理方式产生的有序轨迹序列有所不同,为了达到更好的识别结果我们需要对训练样本和识别输入的样本进行重采样处理,这里主要应用隔点重采样的方法对输入的序列进行重采样;而归一化就是因为不同的书写风格采样分辨率的差异会导致字体太小不同,因此需要对输入轨迹进行归一化。

这里把样本进行线性缩放的方法归一化为64*64像素。

接下来进行同样的八方向特征提取操作。

所谓八方向特征就是首先将经过预处理后的64*64输入进行切分成8*8的小方格,每个方格8*8个像素;然后对每个8*8个小格进行各个方向的点数统计。

如某个方格内一共有10个点,其中八个方向的点分别为:1、3、5、2、3、4、3、2那么这个格子得到的八个特征向量为[0.1, 0.3, 0.5,0.2, 0.3,0.4,0.3,0.2]。

总共有64个格子于是一个样本最终能得到64*8=512 维特征。

由于训练过程进行了LDA降维计算,所以识别过程同样需要对应的LDA降维过程得到最终的64维特征。

这个计算过程就是在训练模板的过程中可以运算得到一个512*64 维的矩阵,那么我们通过矩阵乘运算可以得到64维的最终特征值。

最后将这64维特征分别与模板中的特征进行求距离运算。

得到最小的距离为该输入的最佳识别结果输出。

3.2手写识别程序设计ALIENTEK提供了一个数字、字母识别库,这样我们就不需要关心手写识别是如何实现的,只需要知道这个库怎么用,就能实现手写识别。

ALIENTEK 提供的手写识别库由4个文件组成:A TKNCR_M_V2.0.lib、A TKNCR_N_V2.0.lib、atk_ncr.c和atk_ncr.h。

ATKNCR_M_V2.0.lib和A TKNCR_N_V2.0.lib是两个识别用的库文件(两个版本),使用的时候,选择其中之一即可。

ATKNCR_M_V2.0.lib用于使用内存管理的情况,用户必须自己实现alientek_ncr_malloc和alientek_ncr_free两个函数。

而A TKNCR_N_V2.0.lib用于不使用内存管理的情况,通过全局变量来定义缓存区,缓存区需要提供至少3K左右的RAM。

ALIENTEK手写识别库资源需求:FLASH:52K 左右,RAM:6K左右。

atk_ncr.c代码如下:#include "atk_ncr.h"#include "malloc.h"//内存设置函数void alientek_ncr_memset(char *p,char c,unsigned long len){mymemset((u8*)p,(u8)c,(u32)len);}//内存申请函数void *alientek_ncr_malloc(unsigned int size){return mymalloc(SRAMIN,size);}//内存清空函数void alientek_ncr_free(void *ptr){myfree(SRAMIN,ptr);}这里,主要实现了alientek_ncr_malloc、alientek_ncr_free和alientek_ncr_memset 等三个函数。

atk_ncr.h 则是识别库文件同外部函数的接口函数声明:#ifndef __A TK_NCR_H#define __A TK_NCR_H#define A TK_NCR_TRACEBUF1_SIZE 500*4 //定义第一个tracebuf大小(单位为字节),如果出现死机,请把该数组适当改大#define A TK_NCR_TRACEBUF2_SIZE 250*4 //定义第二个tracebuf大小(单位为字节),如果出现死机,请把该数组适当改大//输入轨迹坐标类型__packed typedef struct _atk_ncr_point{short x; //x轴坐标short y; //y轴坐标}atk_ncr_point;//外部调用函数//初始化识别器//返回值:0,初始化成功// 1,初始化失败unsigned char alientek_ncr_init(void);//停止识别器void alientek_ncr_stop(void);//识别器识别//track:输入点阵集合//potnum:输入点阵的点数,就是track的大小//charnum:期望输出的结果数,就是你希望输出多少个匹配结果//mode:识别模式//1,仅识别数字//2,仅识别大写字母//3,仅识别小写字母//4,混合识别(全部识别)//result:结果缓存区(至少为:charnum+1个字节)void alientek_ncr(atk_ncr_point * track,int potnum,int charnum,unsigned char mode,char*result);//内存设置函数void alientek_ncr_memset(char *p,char c,unsigned long len);//动态申请内存,当使用A TKNCR_M_Vx.x.lib时,必须实现.void *alientek_ncr_malloc(unsigned int size);//动态释放内存,当使用A TKNCR_M_Vx.x.lib时,必须实现.void alientek_ncr_free(void *ptr);#endif此段代码中,我们定义了一些外部接口函数以及一个轨迹结构体等。

相关文档
最新文档