嵌入式课程设计报告

合集下载

嵌入式课程设计报告完整版

嵌入式课程设计报告完整版

目录前言 (2)一、U-Boot分析 (3)1、引导程序U-Boot第一阶段分析 (3)2、引导过程 (4)3、程序流程图 (8)二、程序设计 (8)三、心得体会 (9)前言ARM嵌入式处理器已被广泛应用于消费电子厂品、无线通信、网络通信和工业控制等领域。

在嵌入式操作系统中,Linux、Vxworks、WinCE三足鼎立,其中Linux由于其开源性、稳定性、安全性、可裁剪性更是一支独秀。

在嵌入式系统中,如何实现在ARM平台下Linux操作系统的引导工作是嵌入式技术开发的重要环节。

BootLoader就是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。

在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader 来完成。

比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

一、U-Boot分析嵌入式Linux系统中常用的Bootloader引导程序有U-Boot,redboot, blob 和vivii等,其中U-Boot遵循GPL条款的开放源码项目,功能最为强大,U-Boot 对PowerPC系列处理器支持最丰富,同时还支持MIPS,x86,ARM,XScale等诸多常用系列的处理器;U-Boot引导程序分为Stage1和Stage2量大部分,Stage1中主要包括设备初始化、中断设置、时间设置和储存器初始化等工作,并且采用汇编语言实现,而一些通用功能大多采用C语言实现,放在Stage2中。

1、引导程序U-Boot第一阶段分析Stage1的代码在CPU/arm920t/start.s中定义,它包括从系统上电后在0x00000000地址开始执行的部分。

嵌入式课程设计报告

嵌入式课程设计报告

仲恺农业工程学院嵌入式课程设计报告基于Linux下mono平台的俄罗斯方块游戏学院:信息科学与技术学院班级:电子信息工程111班姓名:左林雄1梁亚琦0官镇洲1指导老师:肖明明前言众所周知,C#是在Microsoft推出的.NET语言,只在.NET 平台上运行,例如Win 9x﹑ME﹑NT﹑2000﹑XP和Win CE之类的操作系统。

但是,现在却有一个叫做Mono的项目,它的目标就是把.NET及其编程语言移植到非Windows平台上。

而C#是目前为止唯一被移植到非Windows平台的.NET语言。

在任何一个平台(操作系统+硬件体系)上,编写和运行程序的三个最根本的需求是库、编译器/解释器、运行环境。

库以类和方法(函数)的形式提供常用的例程,简化大型程序的编写。

.NET框架也不例外,包含了许多类库。

另外,把程序转换成可执行形式以及运行执行文件时,编译器和运行环境是必不可少的。

Mono软件包包含了.NET类库的一部分、一个C#编译器和.NET运行环境CLR(mon Language Runtime,公共语言运行时环境)。

Mono声称支持Linux、Solaris、Free BSD和MS Windows;除了Intel x86系列的CPU(486,各类Pentium等)之外,据说还要支持Sparc、PowerPC和StrongArm处理器。

设计概述:一.linux下mono的平台搭建过程1.构建编译环境2.安装libgdiplus、mono以及编译环境所需要的其它库文件3.安装Libgdiplus和Mono二.在Windows下游戏功能的实现1.游戏界面设计2.配置界面设计3.砖块样式界面设计三.设计心得项目介绍:本设计是基于跨平台的程序编译功能的实现基础上进行的,在实现功能之前,首先要测试实验平台的稳定性与可操作性。

因此品台的搭建对于功能的实现是必不可少的。

环境搭建过程:sudo apt-get install build-essentialsudo apt-get install automake autoconfsudo apt-get install bison gettext libtool libglib2.0-dev libfreetype6-dev libfontconfig-dev以上完成对mono源文件的编译安装。

嵌入式课程设计报告

嵌入式课程设计报告
译、调试等功能。
调试工具
使用GDB等调试工具进行程序调试, 可实现断点设置、变量查看、堆栈跟
踪等功能。
版本控制工具
使用Git等版本控制工具进行代码管理 ,实现多人协作开发、版本回溯等功 能。
性能分析工具
使用Valgrind等性能分析工具进行程 序性能分析,可实现内存泄漏检测、 函数调用关系分析等功能。
课程设计总结与展望
总结本次课程设计的经验教训和收 获,展望嵌入式系统未来的发展趋 势和应用前景。
02
硬件平台选择与搭建
常见嵌入式硬件平台比较
ARM平台
高性能、低功耗,广泛应用于智能手机、 平板电脑等移动设备。
PowerPC平台
高性能、高可靠性,适用于工业控制、航 空航天等高端应用设备、 数字电视等领域。
07
总结与展望
本次课程设计收获总结
理论与实践结合
通过本次课程设计,深入理解了 嵌入式系统的基本原理,同时将 理论知识应用于实际项目中,实 现了理论与实践的有机结合。
技能提升
在课程设计过程中,掌握了嵌入 式系统开发的基本技能,包括硬 件设计、软件编程和调试技术等 。
团队合作
与团队成员紧密合作,共同完成 了课程设计的任务,提高了团队 协作和沟通能力。
05
系统实现过程与代码展示
关键模块代码实现技巧分享
模块化设计
将系统划分为多个独立的功能模块,每个模块具有明 确的接口和功能,便于代码的管理和复用。
高效算法选择
针对系统需求,选择合适的算法和数据结构,以提高 代码执行效率。
代码优化
通过减少冗余代码、提高代码可读性和可维护性,降 低系统资源消耗。
系统集成测试方法论述
嵌入式课程设计报告

嵌入式系统课程设计报告

嵌入式系统课程设计报告

嵌入式系统课程设计报告一、教学目标本课程的教学目标是使学生掌握嵌入式系统的基本概念、原理和设计方法,能够运用嵌入式系统进行实际项目的开发和实现。

具体来说,知识目标包括了解嵌入式系统的定义、特点、分类和应用领域;掌握嵌入式系统的硬件和软件组成及工作原理;熟悉嵌入式操作系统的基本概念和常用操作系统。

技能目标包括能够使用嵌入式系统开发工具和平台进行程序设计和调试;具备嵌入式系统硬件电路的设计和调试能力;能够运用嵌入式系统进行实际项目的开发和实现。

情感态度价值观目标包括培养学生的创新意识和团队合作精神,提高学生解决实际问题的能力和责任感。

二、教学内容根据课程目标,本课程的教学内容主要包括嵌入式系统的基本概念、原理和设计方法。

具体包括以下几个方面:1. 嵌入式系统的定义、特点、分类和应用领域;2. 嵌入式系统的硬件组成,如处理器、存储器、输入输出接口等;3. 嵌入式系统的软件组成,如固件、操作系统、应用程序等;4. 嵌入式操作系统的基本概念和常用操作系统;5. 嵌入式系统的设计方法和开发流程;6. 嵌入式系统硬件电路的设计和调试方法;7. 嵌入式系统在实际项目中的应用和案例分析。

三、教学方法为了实现课程目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

通过多样化的教学方法,激发学生的学习兴趣和主动性。

具体教学方法如下:1. 讲授法:通过讲解嵌入式系统的基本概念、原理和设计方法,使学生掌握相关知识;2. 讨论法:通过分组讨论和课堂讨论,培养学生的思考能力和团队合作精神;3. 案例分析法:通过分析实际项目案例,使学生了解嵌入式系统在实际中的应用和设计方法;4. 实验法:通过实验操作和调试,锻炼学生的动手能力和实际问题解决能力。

四、教学资源为了支持教学内容和教学方法的实施,本课程将选择和准备以下教学资源:1.教材:选用权威、实用的嵌入式系统教材,为学生提供系统的学习资料;2. 参考书:推荐学生阅读相关参考书籍,丰富学生的知识体系;3. 多媒体资料:制作课件、教案等多媒体教学资料,提高课堂教学效果;4. 实验设备:准备嵌入式系统开发板、仿真器等实验设备,为学生提供实践操作的机会。

嵌入式课程设计实训报告

嵌入式课程设计实训报告

一、实训目的通过本次嵌入式课程设计实训,使学生掌握嵌入式系统设计的基本原理和方法,提高学生的实际操作能力和创新意识,培养学生的团队协作精神。

同时,通过实训,使学生熟悉嵌入式系统的硬件平台、软件开发环境,掌握嵌入式编程语言,了解嵌入式系统的调试和测试方法。

二、实训内容本次实训以设计一个简单的温室环境监测系统为例,主要包括以下几个方面:1. 系统需求分析温室环境监测系统主要实现对温室内部光照、温度、湿度的实时监测,并根据监测结果自动调节环境参数,确保温室内的作物生长环境稳定。

系统需具备以下功能:(1)实时监测光照、温度、湿度等环境参数;(2)根据预设阈值,自动调节环境参数;(3)通过LCD显示屏实时显示监测数据;(4)通过串口通信将数据传输至上位机;(5)具有按键控制功能,如开关报警、手动调节等。

2. 硬件平台设计本次实训采用STM32系列微控制器作为核心控制单元,结合DS18B20数字温度传感器、DHT11数字湿温度传感器、光敏电阻、LCD显示屏、蜂鸣器、按键等外围设备,构建温室环境监测系统硬件平台。

3. 软件设计(1)系统初始化:初始化微控制器,配置相关外设参数,设置中断优先级等。

(2)数据采集:通过ADC读取光敏电阻的模拟值,计算光照强度;通过DS18B20和DHT11传感器读取温度和湿度数据。

(3)数据处理:对采集到的数据进行处理,如温度、湿度阈值判断,光照强度阈值判断等。

(4)环境参数调节:根据预设阈值,自动调节加热装置、风扇等设备,以实现环境参数的自动调节。

(5)数据显示:通过LCD显示屏实时显示光照、温度、湿度等数据。

(6)串口通信:通过串口将数据传输至上位机。

(7)按键控制:实现报警功能、手动调节等功能。

4. 系统调试与测试在系统开发过程中,对硬件平台和软件进行调试和测试,确保系统稳定运行。

主要测试内容包括:(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指示灯显示连接状态。

最小嵌入式课程设计报告

最小嵌入式课程设计报告

最小嵌入式课程设计报告一、课程目标知识目标:1. 让学生理解嵌入式系统的基础知识,掌握最小嵌入式系统的设计与搭建方法。

2. 使学生掌握常见嵌入式硬件组件的原理与使用,如微控制器、传感器等。

3. 引导学生了解嵌入式软件编程的基础,学会使用至少一种编程语言进行嵌入式开发。

技能目标:1. 培养学生具备分析问题、设计解决方案的能力,能够针对特定需求设计最小嵌入式系统。

2. 提高学生的动手实践能力,能够独立搭建最小嵌入式系统并进行调试。

3. 培养学生具备一定的编程能力,能够编写简单的嵌入式程序,实现对硬件的控制。

情感态度价值观目标:1. 激发学生对嵌入式系统的兴趣,培养其探索精神,提高学习积极性。

2. 培养学生具备良好的团队合作意识,学会与他人共同解决问题。

3. 引导学生认识到嵌入式技术在现实生活中的广泛应用,培养其创新意识和社会责任感。

本课程针对高年级学生,具有较强的实践性和综合性。

在分析课程性质、学生特点和教学要求的基础上,将课程目标分解为具体的学习成果。

通过本课程的学习,学生将能够掌握嵌入式系统的基础知识,具备设计和搭建最小嵌入式系统的能力,同时培养良好的情感态度和价值观。

为实现课程目标,后续教学设计将注重理论与实践相结合,充分调动学生的主动性和积极性。

二、教学内容1. 嵌入式系统概述:介绍嵌入式系统的基本概念、发展历程、应用领域及特点。

- 教材章节:第1章 嵌入式系统概述- 内容:嵌入式系统定义、分类、发展概况、典型应用。

2. 最小嵌入式系统硬件:讲解微控制器、传感器、执行器等硬件组件的原理与使用。

- 教材章节:第2章 嵌入式系统硬件- 内容:微控制器原理、传感器原理及应用、执行器原理及应用。

3. 嵌入式系统软件:介绍嵌入式编程基础,学习使用C语言进行嵌入式开发。

- 教材章节:第3章 嵌入式系统软件- 内容:嵌入式编程环境、C语言基础、I/O编程、中断处理。

4. 最小嵌入式系统设计与实践:结合实际案例,设计并搭建最小嵌入式系统。

嵌入式实验设计实训报告

嵌入式实验设计实训报告

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

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

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

嵌入式课程设计报告设计题目:电子密码锁、摘要随着科技和人们的生活水平的提高,实现防盗的问题也变得尤为突出,传统机械锁构造简单,电子锁的保密性高,使用灵活性好。

根据需要设计运用W90P170开发板,制作一款电子密码锁,密码锁通过键盘输入密码,通过在LCD的文字和图片显示当前密码锁的状态。

实现设置密码,密码验证,错误密码自锁、图片显示的功能。

目录一、选题意义及系统功能 (3)二、硬件设计及描述 (4)三、软件设计及描述 (5)四、程序代码 (6)五、课程设计体会 (11)六、运行结果 (12)七、心得体会 (12)八、参考文献 (13)九、附录 (13)一、选题意义及功能描述1、选题意义电子密码锁是通过密码输入来控制电路或是芯片工作,从而控制机械的开关闭合、开锁的电子产品。

随着科技提高和人们生活水平的提高,对电子密码锁的需求增加。

电子密码做较传统的机械锁安全性能更高。

特点如下:(1)保密性好,编程量大,随机开锁的成功率几乎为零。

(2)密码可变,用户可以随时改变密码,防止密码被盗,同时也可以避免人员的更替而使锁的密级下降。

(3)误码输入保护,输入密码多次错误是,系统进行自锁。

(4)无活动零件,不会磨损,寿命长。

(5)使用灵活性好,无需佩戴钥匙,操作简单。

2、功能描述基本功能:(1)从键盘输入任意6位数字作为密码,将这六位数字经过USI总线存储到Flash芯片中,设置密码完成。

(2)从键盘输入密码,比较键盘输入的密码与Flash中存储的密码是否相同。

(3)如果密码正确,则LED灯点亮;如果密码不正确,则LED灯闪烁,而且如果连续三次输入密码错误则系统锁定,不允许再次输入密码。

扩展功能:(1)首先显示“请输入密码:”,显示密码锁背景图片1。

(2)如果密码正确则显示“密码正确”,显示成功进入系统的背景图片2。

(3)如果密码不正确则显示“密码不正确,请重新输入:”(4)如果连续三次输入密码错误则显示“对不起,您已经连续三次输入密码错误,系统锁定”,显示图片1。

3、个人开发流程(1)了解开发板的硬件结构编写适应其硬件结构的程序。

(2)掌握并编写LCD显示文本和图片程序。

(3)通过EBI对外部LED灯进行控制。

(4)键盘键值读取,及密码锁密码比对,密码锁状态转换的程序编写。

二、硬件设计及描述1、LED灯模块CPU的数据总线低8位连接到锁存器74HC273的信号输入端,CPU外部总线接口(EBI)的nECS0片选信号连接到锁存器的锁存控制信号,当CPU 访问BANK0的任一地址空间是,数据总线的低八位的数据被锁存输出,作为控制8个LED等的发光状态的控制信号,当写入0xff是,8个LED灯都灭,写0x00,8个LED灯都亮。

硬件连接图如下。

2、KPI工作模块行列式键盘以矩阵形式排列,每个键有一常开触点,其两端分别于输出扫描线和输入状态线相连,键盘中有无键按下,是由列线扫描输出、读入行线状态来判断。

每个键都有一个键值和键号,通常将行、列按二进制顺序组合成酱汁,经过查表获得键号。

硬件连接图如下3、LCD工作模块该模块由40个引脚与外界电路相连,由于本身没有寄存器,需要W90P710提供的LCD控制寄存器来控制选择对应的液晶类型及显示形式,FIFO的使用,颜色的显示模式和时序的设置,并通过配置相应的寄存器就可实现。

四、软件设计及描述1、KPI模块设计实验中的GPIO为键盘模式,使用的是GPIO_CFG2,查找相应的寄存器进行设置,打开键盘中断,设定中断触发方式和优先级,扫描功能打开,时间约为100ms。

2、LCD显示模块初始化呢控制寄存器,设定lcd控制器和中断服务程序,并写到AIC中断向量表中。

关闭FIFO1和FIFO0,关闭绿的控制器,重置控制器,再讲显示的数据发送到缓存区中,根据时序的配置,从缓冲区中将数据读入液晶。

3、整体模块设计及程序流程图在主程序中进行按键初始化,在中断程序中实现,按键值的读取和存储,通过设定状态标志位,数组。

对存储的密码和输入的密码进行比较,判断对错从而改变状态标志位,在中短结束,回到主程序后通过识别状态标志位,显示相应的图形和文字。

五、程序代码(主要程序,函数部分见附录)1、main.c#include <stdio.h>#include "710defs.h" /*头文件声明*/#include "HB_it.h"#include "main.h"#include "lcd_pattern.h"extern U8 a[6];extern int p;extern U32 KeyValue;int main(void){U32 FLL;int cnt,i;U8 wchar[]= "设置密码";U8 wchar1[]= "请输密码";U8 wchar2[]= "密码正确";U8 wchar3[]= "密码错误";U8 wchar4[]= "对不起,您已经连续三次输入密码错误,系统锁定";LCD_IMAGE_T LCD_Size; /*声明结构体,结构体的具体定义在头文LCD_LOCATION_T LCD_Location; 件中*/LCDShowParameter LSP;LCD_Size.width = 480; /*定义lcd的显示的长宽像素值*/LCD_Size.height = 240;LCD_Location.StartX = 0; /*设定显示的起始坐标*/LCD_Location.StartY = 0;LCD_Location.EndX = 960;LCD_Location.EndY = 240;LCDInit(); /*初始化*/LCDShow(LCD_Size, LCD_Location);LCDFIFOBufferSet(BlackBoard); /*将要显示的图片存入缓存中,以便显示*/LCDDisplayOn(); /*显示图片*/KPIInit(); /*按键初始化*/printf("Please press keys.\n"); /*并通过串口输出此时的键值*/USIInit(); //读器件ID /*初始化flash芯片*/printf("读器件ID:");USIRead_ID(); //擦除扇区0printf("写使能:\n");USIWriteEnable();while(USICheckBusy());USISectorErease(0x0);EBILedInit(0x0);LSP.StartX = 8;LSP.StartY = 7;LSP.LibPlace = 0x400000;LSP.Color = 0x07ff;LSP.LetterChar = wchar1;LSP.LCDBuffer = BlackBoard;LCDOutputShow(LSP,4);EBILedSet(0x00);while(1){if(p==6){LCDInit();LCDShow(LCD_Size, LCD_Location);LCDFIFOBufferSet(BlackBoard);LCDDisplayOn();LSP.StartX = 8;LSP.StartY = 7;LSP.LibPlace = 0x400000;LSP.Color = 0x07ff;LSP.LetterChar = wchar1; /*正确密码*/ LSP.LCDBuffer = BlackBoard;LCDOutputShow(LSP,4);Delay(10000000);}if(p==1){LCDInit();LCDShow(LCD_Size, LCD_Location);LCDFIFOBufferSet(BlackBoard);LCDDisplayOn();LSP.StartX = 5;LSP.StartY = 5;LSP.LibPlace = 0x400000;LSP.Color = 0x07ff;LSP.LetterChar = wchar2; /*正确密码*/ LSP.LCDBuffer = BlackBoard;LCDOutputShow(LSP,22);Delay(10000000);}if(p==2){LCDInit();LCDShow(LCD_Size, LCD_Location);LCDFIFOBufferSet(BlackBoard);LCDDisplayOn();LSP.StartX = 5;LSP.StartY = 5;LSP.LibPlace = 0x400000;LSP.Color = 0x07ff;LSP.LetterChar = wchar3; /*密码错误*/LSP.LCDBuffer = BlackBoard;LCDOutputShow(LSP,4);Delay(10000000);}if(p==3){LCDInit();LCDShow(LCD_Size, LCD_Location);LCDFIFOBufferSet(BlackBoard);LCDDisplayOn();LSP.StartX = 5;LSP.StartY = 5;LSP.LibPlace = 0x400000;LSP.Color = 0x07ff;LSP.LetterChar = wchar4; /*请输密码*/ LSP.LCDBuffer = BlackBoard;LCDOutputShow(LSP,22);Delay(10000000);}}return 0;}2、中断服务程序void KPI_Handler(void){// U32 KeyValue, tmp;int cnt,sum=0;//int shuru;//int i;tmp = REG_KPISTATUS; //取按键值tmp &= 0x0000000f; //因为硬件连接关系,需要对按键进行处理if((tmp > 0x7) && (tmp < 0xC)){KeyValue = tmp - 4;}else if((tmp > 0x3) && (tmp < 0x8)){KeyValue = tmp + 4;}else{KeyValue = tmp;}printf("KPI interrupts. %x\n", KeyValue);if(c<6){a[c]=KeyValue;} /*将设置的密码放在数组中*/else if(c==6){USIWriteEnable();USIWrite(0x00, a); /*将设置的密码放在flash芯片中存储中*/printf("Succeed\n"); /*将设置密码结束,更新状态位*/Delay(100);P=6;}else if(c>6 && c<13){b[c-7]=KeyValue; /*输入密码*/}else if(c==13){USIRead(0x0,a); /*将输入密码放入在flash芯片中存储呢*/for(cnt=0;cnt<6;cnt++){if(a[cnt]==b[cnt]) /*比对密码*/sum++;}if(sum==6){printf("测试成功.....%d\n",sum); /*密码正确状态位为1*/p=1;}else{printf("测试失败.....%d\n",sum);p=2;}}else if(c>13 && c<20){b[c-14]=KeyValue;/*继续读取密码*/}else if(c==20)/*继续比对密码*/{USIRead(0x0,a);for(cnt=0;cnt<6;cnt++){if(a[cnt]==b[cnt])sum++;}if(sum==6){printf("测试成功.....%d\n",sum);p=1;}else{printf("测试失败.....%d\n",sum);p=3;}}else if(c>20 && c<27){b[c-21]=KeyValue;}else if(c==27)/*第三次比对*/{USIRead(0x0,a);for(cnt=0;cnt<6;cnt++){if(a[cnt]==b[cnt])sum++;}if(sum==6){printf("测试成功.....%d\n",sum);p=1;}else{printf("测试失败.....%d\n",sum);p=4;}}else/*这之后程序不再允许进行输入*/{printf("invalid operations\n");}c++;}六、实验结果截图(1)密码锁初始状态,显示设置密码,显示图片1。

相关文档
最新文档