嵌入式课程设计报告
- 格式:docx
- 大小:2.27 MB
- 文档页数:24
目录前言 (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地址开始执行的部分。
嵌入式系统课程设计报告一、教学目标本课程的教学目标是使学生掌握嵌入式系统的基本概念、原理和设计方法,能够运用嵌入式系统进行实际项目的开发和实现。
具体来说,知识目标包括了解嵌入式系统的定义、特点、分类和应用领域;掌握嵌入式系统的硬件和软件组成及工作原理;熟悉嵌入式操作系统的基本概念和常用操作系统。
技能目标包括能够使用嵌入式系统开发工具和平台进行程序设计和调试;具备嵌入式系统硬件电路的设计和调试能力;能够运用嵌入式系统进行实际项目的开发和实现。
情感态度价值观目标包括培养学生的创新意识和团队合作精神,提高学生解决实际问题的能力和责任感。
二、教学内容根据课程目标,本课程的教学内容主要包括嵌入式系统的基本概念、原理和设计方法。
具体包括以下几个方面: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.了解基于ARM7核的LPC2106的管脚功能和特点,掌握I/O 控制寄存器的设置方法; 2.掌握ARM7应用系统编程开发方法,能用C 语言编写应用程序; 3.熟练掌握ADS1.2软件的使用以及PROTEUS 仿真调试的方法;二、具体任务:1.采用PROTEUS 完成十字路口交通灯控制的硬件电路设计,要求单片机选型为飞利浦公司的LPC2106,东西南北方向分别设置红黄绿3个指示灯,东西方向和南北方向各用1个数码管显示通行时间;2.用ADS1.2编写C 语言应用程序,完成十字路口交通灯控制;3.采用PROTEUS 将应用程序装载在LPC2106中,进行仿真验证。
要求东西方向和南北方向的数码管显示通行时间并倒计时,可以设置成一样,例如都是9秒倒计时;每当倒计时时间到,完成红黄绿指示灯的状态切换,模拟实现十字路口的交通灯管理控制。
三、硬件电路设计。
(参考下图完成硬件电路设计,用屏幕抓图的方式将自己设计的PROTEUS电路图粘贴在下面,并用文字对所设计的电路功能、原理进一步说明)附图:硬件电路说明:左边是LPC2106,中间由上下两个LED数码管连接在总线上组成,右边由12个LED灯模拟十字路口。
LPC2106的P0.0~P0.9分别输出接数码管的a,b,c,d,e,f,g以及两个位选位;P0.10~P0.15输出分别接南北和东西方向的LED。
四、源程序。
(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)源程序:#include "config.h"#define unchar unsigned charchar LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9数码段码表void delay(uint32 n){ //定义延时函数while(n--);}int main(void){ int32 i,g,s;PINSEL0=0x00000000; //把I/O口都选用第一功能PINSEL1=0x00000000;IODIR=0x0000ffff; //P0.0~P0.15设置为输出引脚while(1){int8 n=30; //定义变量n,用于数码管显示延时for(i=31;i>20;i--) //for循环用于设定东西方向绿灯时间为10秒{g=i%10; //分离出个位、十位s=i/10;while(n--) //while函数动态扫描的数码管显示延时{IOSET=0x00008400|0x00000200|LED[g];//南北亮红灯,东西亮绿灯,数码管个位显示数字delay(2000); //调用延时函数IOCLR=~0x00008400; //数码管显示清零,灯保持亮的状态IOSET=0x00008400|0x00000100|LED[s];//南北亮红灯,东西亮绿灯,数码管十位显示数字delay(2000); //调用延时函数IOCLR=~0x00008400; //数码管显示清零,灯保持亮的状态}}for(i=20;i>15;i--) //for循环用于设定东西方向黄灯灯时间为5秒{g=i%10; //分离出个位、十位s=i/10;while(n--){IOCLR=0x00008400; //显示清零,等待下一状态显示IOSET=0x00004400|0x00000200|LED[g];//南北亮红灯,东西亮黄灯,数码管个位显示数字delay(1000); //延时程序IOCLR=0x00004000|0x000003ff; //熄灭黄灯、清零数码管显示IOSET=0x00004400|0x00000100|LED[s];//南北亮红灯,东西亮黄灯,数码管十位显示数字delay(1000); //延时程序IOCLR=0x00004000|0x000003ff; //熄灭黄灯、清零数码管显示}delay(300000); //黄灯和数码管闪烁延时时间}for(i=15;i>5;i--){g=i%10;s=i/10;while(n--){IOSET=0x00003000|0x00000200|LED[g];//南北亮绿灯,东西亮红灯,数码管个位显示数字delay(2000); //延时程序IOCLR=~0x00003000; //数码管显示清零,灯保持亮的状态IOSET=0x00003000|0x00000100|LED[s];//南北亮绿灯,东西亮红灯,数码管十位显示数字delay(2000);IOCLR=~0x00003000; //数码管显示清零,灯保持亮的状态}}for(i=5;i>0;i--){g=i%10;s=i/10;while(n--){IOCLR=0x00003000; //显示清零,等待下一状态显示IOSET=0x00002800|0x00000200|LED[g];//南北亮黄灯,东西亮红灯,数码管个位显示数字delay(1000);IOCLR=0x00000800|0x000003FF; //熄灭黄灯、清零数码管显示IOSET=0x00002800|0x00000100|LED[s];//南北亮黄灯,东西亮红灯,数码管十位显示数字delay(1000);IOCLR=0x00000800|0x000003FF; //熄灭黄灯、清零数码管显示}delay(300000); //黄灯和数码管闪烁延时时间}}}五、仿真效果。
课程名称:嵌入式系统课程设计先修课程:操作系统、C语言程序设计一、目的与任务《嵌入式系统课程设计》是计算机学生的专业实践课程,是学习《嵌入式系统及设计》课程后必要的实践教学环节。
课程设计是检验学生是否掌握相关专业课程知识的重要手段,以学生为主体,充分调动学生的积极性和创造性,重视学生实际动手能力的培养。
通过本课程设计使学生加深理解、巩固课堂教学和平时实验内容,使学生初步具备linux应用开发的系统分析、系统设计、系统实现与测试的实际能力,强化学生的知识实践意识、提高动手能力,发挥学生的想象力和创新能力,从而培养工程应用型人才。
二、教学基本要求1、学习态度:要有勤于思考、刻苦钻研的学习精神和严肃认真、一丝不苟、有错必改、精益求精的工作态度,积极查阅整理分析相关参考文献,精心设计、认真编码、确保质量。
对弄虚作假者,课程设计成绩一律按不及格记,并根据学校有关规定给予处理。
2、学习纪律:要严格遵守学习纪律,遵守作息时间,不得迟到、早退和旷课。
特殊情况不能上课者,必须请假,凡未请假或未获准假擅自不上课者,均按旷课论处。
3、课程目标:掌握linux应用开发的基本理论知识和基本方法技能,概念清楚准确,系统分析、系统设计、系统实现、系统测试符合软件工程相关规范,结构合理,程序运行良好,课程设计报告撰写规范,答辩中回答问题正确。
4、课程设计报告:按照《东华理工大学长江学院课程设计报告规范》和《嵌入式系统课程设计》任务书的要求,认真设计、撰写好课程设计报告,总结课程设计的收获和心得体会,及时提交电子和纸质材料。
三、课程设计内容(一)主要设计内容1、系统分析、总体设计、概要设计、详细设计、系统实现和测试。
2、系统运行与维护。
3、撰写课程设计报告。
4、课程设计答辩:课题的论述和回答问题。
(二)参考选题1.系统移植类:(1)嵌入式WinCE移植(2)嵌入式Linux2.6内核的移植(3)嵌入式Web服务器BOA在开发板上的移植(4)使用BusyBox构建的根文件系统的移植(5)嵌入式QT的移植(6)嵌入式引导程序UBoot的移植2. QT编程类:(1)基于QT的手机通讯录管理(2)基于QT的手机日历程序(3)基于QT的手机计算器程序(4)基于QT的手机秒表程序(5)基于QT的电子词典程序(6)基于QT的电子相框程序3. 驱动编程类:(1)Led跑马灯程序(2)按键驱动程序(3)嵌入式类Minicom串口程序4. 其它类:可选择其它自己感兴趣的与嵌入式相关题目四、时间安排《嵌入式系统课程设计》安排在第六学期进行,时间1周。
嵌入式课程设计报告毕业论文教案一、教学目标通过本课程的学习,学生应该能够:1.了解嵌入式系统设计的基本原理和流程2.掌握基本的嵌入式硬件和软件开发技术3.能够使用开发板和相关工具进行嵌入式系统的设计和开发4.掌握常用的接口协议和通信方式,包括串口通信、SPI、I2C、CAN等5.能够设计和开发基本的嵌入式应用程序,如LED灯的控制、按键的检测、温度传感器的读取等二、教学内容及安排1.嵌入式系统概述内容:介绍嵌入式系统的定义、特点、应用领域、市场和发展趋势等内容。
时间:2学时2.嵌入式系统设计流程内容:介绍嵌入式系统设计的主要步骤和流程,包括需求分析、硬件设计、软件设计、测试和调试等内容。
时间:4学时3.嵌入式开发环境搭建内容:介绍嵌入式开发环境的基本配置和使用,包括Keil C51软件、ST-LINK下载器、ST-FLASH工具等。
时间:4学时4.嵌入式硬件设计内容:介绍嵌入式硬件设计的基本原理和方法,包括硬件选型、电路原理图设计、PCB布局和焊接等内容。
时间:10学时5.嵌入式软件设计内容:介绍嵌入式软件设计的基本原理和方法,包括汇编语言、C语言、编译、调试和下载等内容。
同时讲解如何使用方案手册和数据手册加速学习。
时间:16学时6.嵌入式应用程序设计内容:介绍嵌入式应用程序的设计和开发,包括LED灯的控制、按键的检测、温度传感器的读取、串口通信、SPI/I2C接口的应用等内容。
时间:14学时7.嵌入式系统测试和调试内容:介绍嵌入式系统的测试和调试方法,包括硬件测试、软件测试、仿真测试和调试工具等内容。
时间:4学时三、教学方法1.理论教学与实践结合,提高学生的实际操作能力。
2.讲授代码编写方法,由浅入深、由简到难地进行讲解。
3.组织实验、调试和考试等考核环节,促进学生知识的巩固和提高。
4.引导学生通过网络、图书馆等途径自主学习和获取嵌入式技术知识,培养学生的自主学习和创新能力。
四、教学手段1.教师演示和现场演示,帮助学生理解课程内容并进行实践操作。
最小嵌入式课程设计报告一、课程目标知识目标:1. 让学生理解嵌入式系统的基础知识,掌握最小嵌入式系统的设计与搭建方法。
2. 使学生掌握常见嵌入式硬件组件的原理与使用,如微控制器、传感器等。
3. 引导学生了解嵌入式软件编程的基础,学会使用至少一种编程语言进行嵌入式开发。
技能目标:1. 培养学生具备分析问题、设计解决方案的能力,能够针对特定需求设计最小嵌入式系统。
2. 提高学生的动手实践能力,能够独立搭建最小嵌入式系统并进行调试。
3. 培养学生具备一定的编程能力,能够编写简单的嵌入式程序,实现对硬件的控制。
情感态度价值观目标:1. 激发学生对嵌入式系统的兴趣,培养其探索精神,提高学习积极性。
2. 培养学生具备良好的团队合作意识,学会与他人共同解决问题。
3. 引导学生认识到嵌入式技术在现实生活中的广泛应用,培养其创新意识和社会责任感。
本课程针对高年级学生,具有较强的实践性和综合性。
在分析课程性质、学生特点和教学要求的基础上,将课程目标分解为具体的学习成果。
通过本课程的学习,学生将能够掌握嵌入式系统的基础知识,具备设计和搭建最小嵌入式系统的能力,同时培养良好的情感态度和价值观。
为实现课程目标,后续教学设计将注重理论与实践相结合,充分调动学生的主动性和积极性。
二、教学内容1. 嵌入式系统概述:介绍嵌入式系统的基本概念、发展历程、应用领域及特点。
- 教材章节:第1章 嵌入式系统概述- 内容:嵌入式系统定义、分类、发展概况、典型应用。
2. 最小嵌入式系统硬件:讲解微控制器、传感器、执行器等硬件组件的原理与使用。
- 教材章节:第2章 嵌入式系统硬件- 内容:微控制器原理、传感器原理及应用、执行器原理及应用。
3. 嵌入式系统软件:介绍嵌入式编程基础,学习使用C语言进行嵌入式开发。
- 教材章节:第3章 嵌入式系统软件- 内容:嵌入式编程环境、C语言基础、I/O编程、中断处理。
4. 最小嵌入式系统设计与实践:结合实际案例,设计并搭建最小嵌入式系统。
嵌入式课程设计报告嵌入式课程设计报告Corte*-M3 是 ARM 公司基于 ARM V7 架构的新型芯片内核。
STM32V100-II 型是英蓓特公司新推出的一款基于 ST 意法半导体STM32 系列处理器(Corte*-M3 内核)的全功能评估板。
STM103V100-II 评估板有 USB,Motor Control,CAN,SD 卡,Smart 卡, UART,Speaker,LCD,LED,BNC,耳塞插孔等丰富的外设,有助于用户轻松开发 STM32 的强大功能。
STM32 系列运用了 ARM 最新的、先进架构 Corte*-M3 内核,本文论述了在 Keil Realview 开发环境上开发基于汇编语言的 LED 掌握程序,基于对 STM32 的 GPIO 寄存器写值配置思想,掌握EduKit-M3 试验平台的发光二极管 LED1、 LED2、 LED3、 LED4,使它们有规律地点亮。
一、设计概述1.1、设计需求Keil Realview 开发环境上,全部采纳汇编语言编程,实现对EduKit-M3 试验平台的发光二极管 LED1、LED2、LED3、LED4 的亮灭掌握,使它们有规律地点亮。
这里采纳例程提供的顺次点亮方式,根据 LED1 亮 LED2 亮 LED3 亮 LED4 亮,如此反复,要求每个 LED 亮灭之间延时一段时间,以加强可观性。
需要说明的是,这仅仅作为程序掌握 LED 的一种掌握方式,基于点亮 LED 的掌握原理,可以编程实现各种显示 LED 的亮灭模式,并提供一种通用的掌握方法,要求程序可读性强,易于修改。
1.2、设计原理〔1〕STM32 通用 GPIO 端口概述 STM32F10* 处理器上共有 7 个 I/O 端口:A、B、C、D、E、F、G,每个 16 个管脚每组端口〔寄存器需要以 32 位字形式访问〕每组端口有以下寄存器:, 32 位配置寄存器: GPIO*_CRL、GPIO*_CRH 32 为数据寄存器: GPIO*_IDR、GPIO*_ODR 32 位置位/复位寄存器: GPIO*_BSRR 16 位复位寄存器:GPIO*_BRR 32 为锁定寄存器: GPIO*_LCKR I/O 口通用输入、输出端口配置为输入时,每个 APB2 时钟周期将端口数据送输入寄存器(GPIO*_IDR),在输入模式下,输出是断开的。
嵌入式课程设计报告设计题目:电子密码锁、摘要随着科技和人们的生活水平的提高,实现防盗的问题也变得尤为突出,传统机械锁构造简单,电子锁的保密性高,使用灵活性好。
根据需要设计运用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。