嵌入式课程设计电子词典硬件设计

合集下载

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

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

目录前言 (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. 嵌入式系统硬件设计的基本流程三、嵌入式系统硬件设计的主要技术要点1. 嵌入式处理器的选择与设计a) 嵌入式处理器的分类和特点b) 嵌入式处理器的选型原则c) 嵌入式处理器的系统设计与集成2. 嵌入式系统的存储器设计a) 存储器的分类和特点b) 存储器的选型原则c) 存储器的布局与接口设计3. 嵌入式系统的外设设计a) 常见外设的功能与特点b) 外设的选型原则c) 外设的接口设计与连接方式4. 嵌入式系统的电源管理设计a) 电源管理的目标和原则b) 电源管理的方法和技术c) 电源管理的设计考虑因素四、嵌入式系统硬件设计的实践经验与案例分析1. PCB设计和布局要点a) PCB设计的基本原则b) PCB布局的注意事项2. 信号完整性与电磁兼容设计a) 信号完整性的概念和关键问题b) 电磁兼容设计的基本原则3. 故障排查与调试技巧a) 常见故障排查方法和工具b) 调试技巧和实践经验分享4. 案例分析:XXX嵌入式系统硬件设计方案a) 项目背景和需求分析b) 系统架构设计c) 硬件设计与验证d) 项目总结和经验总结五、结论本手册通过对嵌入式系统硬件设计技术的系统梳理和深入讲解,希望读者能够全面了解并掌握这一领域的核心知识和实践技巧。

嵌入式系统的硬件设计是嵌入式产品开发中至关重要的一环,只有掌握了正确的设计技术和方法,才能保证产品的高性能、稳定性和可靠性。

希望本手册能为读者在嵌入式硬件设计领域提供有益的参考和指导。

注:所标记的小节符号只是为了文章结构的清晰,实际正文中不需要出现。

嵌入式系统硬件设计样本

嵌入式系统硬件设计样本
1210
3225
3.20
2.50
0.55
1812
4832
4.50
3.20
0.55
5025
5.00
2.50
0.55
2512
6432
6.40
3.20
0.55
2.3
220V,60W焊笔、0.4mm焊锡、松香、镊子、放大镜、吸锡线等。
A.焊接时焊缝规定平滑,不得有虚焊等焊接缺陷,发现缺陷及时修补。
B.选用合理焊接顺序可以提高焊接效率。
3.1.9 数码管
电路中加入了四位共阳极数码管,公共端单片机P10-P14连接,由于单片机输出电流很小,局限性以驱动数码管,因此需要加三极管对对电流进行放大,三极管基极串联电阻进行限流;数码管负极接地,串联电阻进行限流。
3.2
3.2.1
Altium Designer是原Prote软件开发商ALitum公司推出电子产品开发系统,重要运营在Windows操作系统。这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整新分析和设计输出技术完美融合。
D.焊接引脚比较多元器件时候,可以先把对角两个引脚焊好进行固定。
图2.5 焊接练习板
3
3.1
3.1.1
单片机又称单片微型计算机,内部集成了微解决器、存储器等各种芯片,起控制作用,是电路中最重要某些。
3.1.2
D1-D8接单片机P0口,通过控制P0口输出电平高低控制LED亮灭,D9负极接地,可以显示单片机与否已经上电工作;每个发光二极管都串联了限流电阻,防止电流过大被烧坏。
3.1.3 外部晶振
单片机XTAL1和XTAL2引脚连接外部晶振,用来为电路提供振荡和精确时钟信号。

C语言课程设计之电子词典

C语言课程设计之电子词典
4.C 语言中的单词很少,包含的术语很少。您可能认为,语言包含的关键字越多,其功 能将越强大,情况并非如此。当您使用 C 语言进行编程时将发现,它能够完成任何任务。
5.C 语言是模块化的。可以以函数的方式来编写 C 语言代码,并在其他应用或程序中再 次使用这些函数。通过将一些信息传递给函数,可以创建很有用的、可重用代码。
第四章系统功能实现…………………………………………………………....9
4.1 保存单词…………………………………………………………………………9 4.2 结束界面………………………………………………………………………..11
总结……………………………………………………………………………….. …….. ….13
五、时间进度安排
顺序
1 2 3 4 5
阶段日期
第1天 (2008.03.24 第 2—3 天 (2008.03.25—2008.03.26) 第 4—8 天 (2008.03.28—2008.04.04) 第9天 (2008.04.05) 第 10 天 (2008.04.06)
计划完成内容
阅读资料 系统分析设计 程序编制、调试及运行
态度 能够独立完成设计工作,
按期圆满完成规定的设计任务,工作量饱满,
工作量
0.2 5 4 3 2
难度适宜。
说明书立论正确,论述充分,结论严谨合理, 说明书的
文字通顺,技术用语准确,符号统一,编号齐 0.5 5 4 3 2 质量
全,图表完备,书写工整规范。
指导教师评审成绩 (加权分合计乘以 8)

加权分合计
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到 了什么,哪里遇到了困难,解决的办法以及今后的目标。

电子词典_java课程设计

电子词典_java课程设计

电子词典_java课程设计电子词典是一种为帮助人们翻译生词和掌握语言知识的电子设备,相对于传统的纸质词典或人工翻译,它的优点在于便捷性和实用性。

在Java课程设计中,我们可以借助Java语言的强大功能和开放性,开发出一个功能强大、易用且自适应的电子词典应用程序。

一、项目需求在Java课程设计中,我们需要实现一个电子词典应用程序,满足以下需求:1. 拥有搜索和翻译功能2. 可以支持中英双语3. 具备简单易用的用户界面4. 词库可通过文件导入导出5. 可以查询单词使用次数以及最近搜索记录二、实现过程1. 数据库设计我们需要设计一个简单的数据库来存储单词和其对应的含义、使用次数和最近查询时间等信息。

在Java语言中,我们可以使用JDBC(Java Database Connectivity)实现对数据库的访问。

常见的数据库管理系统包括MySQL,Oracle等。

2. 用户界面设计为了让用户更方便地使用我们的电子词典应用程序,在用户界面设计上,我们需要使用Java Swing技术实现一个简单易用的GUI(Graphical User Interface)界面。

常见的GUI组件包括Button,Label,TextField等,我们可以利用它们的特性来实现输入、输出和按钮功能等功能。

3. 实现功能模块搜索功能模块:实现单词的中英文翻译和查询。

我们可以使用JDBC方式查询数据库中存储的单词及其含义,并将其显示在用户界面上。

导入导出模块:词库的导入和导出可以使用文件I/O (Input/Output)实现。

可以使用Java自带的File类进行文件读写操作,并将文件中的内容导入到数据库中。

同样,也可以将数据库中的数据导出到文件中。

查询记录模块:用户查询记录和单词使用次数的统计,可以使用Java中的HashMap数据结构实现。

我们可以使用HashMap类,将查询记录和单词使用次数存储起来,并实现方法来更新和查询查询记录和单词使用次数。

嵌入式基础课程设计

嵌入式基础课程设计

嵌入式基础课程设计一、课程目标知识目标:1. 理解嵌入式系统的基本概念、组成和分类。

2. 掌握嵌入式系统的设计流程、开发环境和编程语言。

3. 学习嵌入式系统的硬件接口和软件模块。

技能目标:1. 能够运用所学知识进行简单的嵌入式系统设计。

2. 能够编写嵌入式程序,实现基础功能。

3. 能够分析并解决嵌入式系统开发过程中遇到的问题。

情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣和热情,提高其学习主动性和积极性。

2. 培养学生的团队协作能力,使其能够在团队中发挥积极作用。

3. 培养学生的创新意识和实践能力,使其敢于尝试,勇于探索。

本课程针对高中年级学生,结合学科特点和教学要求,旨在帮助学生掌握嵌入式系统的基础知识,培养其编程能力和实际问题解决能力。

课程目标具体、可衡量,以确保学生和教师能够清晰地了解课程的预期成果,并为后续的教学设计和评估提供依据。

通过本课程的学习,学生将能够独立完成简单的嵌入式系统设计,为今后进一步学习相关专业知识和技能打下坚实基础。

二、教学内容1. 嵌入式系统概述- 嵌入式系统的基本概念- 嵌入式系统的组成与分类- 嵌入式系统的应用领域2. 嵌入式系统设计流程- 需求分析- 系统设计- 硬件选型与接口设计- 软件开发与调试3. 嵌入式开发环境- 开发板介绍- 集成开发环境(IDE)的使用- 编程语言的选用与基础语法4. 嵌入式系统编程- 硬件抽象层(HAL)编程- 嵌入式操作系统基础- 常用软件模块及应用5. 嵌入式系统实践- 简单嵌入式系统设计案例- 程序编写与调试- 系统测试与优化本教学内容根据课程目标制定,涵盖嵌入式系统的基本知识、设计流程、开发环境、编程技巧和实践案例。

教学内容与课本紧密关联,系统性地安排了教学大纲,明确了教学内容的安排和进度。

通过本章节的学习,学生将全面了解嵌入式系统的基础知识,掌握基本的编程技能,并具备实际操作能力。

三、教学方法1. 讲授法:- 对于嵌入式系统的基本概念、组成、分类及设计流程等理论知识,采用讲授法进行教学,使学生在短时间内掌握基础知识点。

c语言课程设计电子词典

c语言课程设计电子词典

c语言课程设计电子词典随着科技的不断进步和发展,计算机技术也在不断的发展和完善。

计算机编程语言也应运而生,其中c语言成为了最为流行和广泛应用的一种编程语言。

为了更好地学习和掌握c语言,我们需要不断地进行练习和实践。

而课程设计电子词典就是一个非常好的实践项目。

本文将对c语言课程设计电子词典进行详细的介绍和分析。

一、电子词典简介电子词典是一种类似于纸质词典的电子设备。

电子词典将词典内容数字化存储在内部芯片中,通过一个屏幕显示出来。

电子词典拥有很多优点,比如存储空间更大、功能更强大、可搜索性更高等等。

今天,电子词典是很多人学习和工作必不可少的工具之一。

二、c语言课程设计电子词典的设计思路c语言课程设计电子词典是一种将词典内容和c程序功能相结合的设计项目。

他的设计思路如下:1.定义词典内容结构体在程序中需要定义一个结构体,用来存储词典内容。

结构体的成员包括单词、单词的释义、音标等。

typedef struct word{ char name[30]; // 单词名称char symbol[30]; // 单词音标charmean[400]; // 单词含义}word;2.构建词典数据将词典中的单词、释义、音标等内容保存到结构体中。

并将多个结构体数据包含在一个数组中。

word dictionary[] = { { "apple", "[ˈæpl]", "a round fruit with smooth red or yellow skin and firm white flesh" }, { "banana", "[bəˈnɑː.nə]", "a long curved fruit with a yellow skin" }, { "cat", "[kæt]", "a small animal with fur, four legs, a tail, and claws" }, { "dog", "[dɒɡ]", "a common animal with four legs, fur, and a tail" }, { "elephant", "[ˈel.ɪ.fənt]", "a very large grey animal with a long nose called a trunk" }};3.实现单词查询功能在程序中,我们需要实现一个单词查询的功能。

嵌入式课程设计--基于S3C44BOX电子词典软件开发

嵌入式课程设计--基于S3C44BOX电子词典软件开发

《嵌入式系统》课程设计说明书基于S3C44BOX电子词典软件开发系、部:计算机与信息科学系组成员:指导教师:职称专业:计算机科学与技术班级:计本0801班完成时间:2011年12月12日摘要随着电子系技术的发展,以ARM微处理器为核心的电子应用系统已经进入人们日常生产生活的各个方面,ARM以其出色的性能优势赢得了广大电子产品开发者的认可。

本文作者根据自己的课程学习,掌握了 ARM系统微处理器相关的基础知识和基本技术,而这些技术需要实地的实验设计来帮助巩固和深入。

本案例属于日常生活当中和学习研究中比较常见和熟悉的应用,不但有比较强的综合性,而且有很高的趣味性。

在我们系统学习了嵌入式系统开发与应用实践课程之后,结合对ARM微处理器的基础知识和基本技术的掌握,实现了简单电子词典设计。

本设计主要解决了基于S3C44B0X 通过I/O控制发光二极管的电子词典。

关键词:ARM微处理器;词典设计;S3C44B0XABSTRACTAlong with the electronic technology development, with ARM microprocessor as the core of the electronic application system has entered people's daily production in all aspects of life, ARM with its excellent performance advantages to win the majority of electronic product developers recognized. In this paper the authors according to their course of study, master of the ARM system related to the basic knowledge and technology, and these technologies require field experiments designed to help consolidate and development. This case belongs to the daily life and study in the more common and familiar with the application, not only have strong comprehensive, but also have high interest.In our system, learning embedded system development and application practice of course, according to the ARM microprocessor basic knowledge and basic technical mastery, the realization of a simple directory design. The design of the main solution based on S3C44B0X through I / O control led flashing.Key words: ARM microprocessor; directory; S3C44B0X目录1 前言 (1)1.1课题研究背景 (1)1.2课程研究目的和意义 (2)1.3 S3C44BOX处理器介绍 (3)2 基于S3C44BOX电子词典开发概述 (4)2.1电子词典系统定义与需求分析 (4)2.2电子词典方案设计 (7)2.2.1硬件设计方案 (7)2.2.2软件设计方案 (7)3 基于S3C4BOX电子词典的硬件开发 (8)3.1基于S3C4BOX的最小系统软件 (8)3.2显示模块 (9)3.3触摸屏及键盘模块 (10)4 基于S3C44BOX电子词典软件开发环境的建立 (10)4.1开发环境 (10)5 基于S3C44BOX电子词典的软件开发 (11)5.1电子词典各模块测试软件设计 (11)5.2电子词典应用软件开发 (13)5.3无操作系统电子词典硬件驱动程序设计 (15)5.3.1Uart驱动程序 (16)5.3.2LCD驱动程序 (16)5.3.3键盘驱动程序 (17)5.3.4触摸屏驱动程序 (17)5.4电子词典系统应用软件个功能模块设计实现 (18)5.4.1键盘接口功能软件 (18)5.4.2触摸屏接口功能软件 (18)5.4.3LCD显示接口功能软件 (18)5.4.4输入键值识别功能软件 (18)5.4.5英译汉功能软件 (21)5.4.6已查单词记忆功能软件 (23)5.4.7汉语词库编写和英语词库编写 (23)6 总结 (26)7 参考文献 (27)1 前言1.1课题研究背景随着3C融合进程和我国传统产业结构升级的加速,人们对设备越来越高的应用需要已经无法满足当前和未来高性能的应用与发展需求。

电子词典设计方案

电子词典设计方案
S3C44B0X LCD 控制器概述 LCD 控制器在嵌入式系统中的功能概述 一套完整的液晶显示系统主要由三部分组成:液晶显示屏、液晶显示 驱动器和液晶显示控制器。 液晶显示控制器具有两大作用:其一,控制器为液晶显示提供时序信 号和显示数据;其二,在计算机系统中,液晶显示控制器是一种专业 IC 芯片,专用于计算机与液晶显示系统的接口,控制器接受计算机 的直接操作,并可以脱机独立控制液晶显示驱动系统,从而解除了计 算机在显示上的繁琐工作。
硬件设计方案 根据第二章介绍的 ARM 芯片的选择原则,此处选择集成了丰富的外围 功能模块,便于低成本设计嵌入式应用系统的 S3C44B0X 处理器作为 系统的主控制器。 利用其内置的 LCD 控制器实现 LCD 控制接口; 利用 IIC 总线控制器实现键盘控制接口; 利用 ADC 转换器实现触摸屏控制接口; 利用 UART 实现调试接口; 利用 GPIO 连接 LED 灯显示有关状态。 利用其内置的 LCD 控制器实现 LCD 控制接口; 利用 IIC 总线控制器实现键盘控制接口; 利用 ADC 转换器实现触摸屏控制接口; 利用 UART 实现调试接口; 利用 GPIO 连接 LED 灯显示有关状态。
色),对于不同尺寸的 LCD,具有不同数量的垂直和水平像素,数据 接口的数据宽度,接口时序及刷新率,而 LCD 控制器可以进行编程控 制相应的寄存器值,以适应不同的 LCD 显示板
S3C44B0X LCD 控制器基本功能 S3C44B0X LCD 控制器的特性 支持彩色/灰度/单色的 LCD 板; 支持 3 种类型 LCD 板:4 位双扫描,4 位单扫描,以及 8 位单扫描的 显示类型; 支持多路虚拟显示屏(支持硬件的水平/垂直移动滚读); 系统存储器被用作显示存储器; 专用的 DMA 支持从系统存储器的视频缓冲中读取映象数据; 支持多种荧屏大小;

第3课__嵌入式系统硬件设计

第3课__嵌入式系统硬件设计
术不像其他采用MLC的闪速存储器技术那样写入性能严重下降
25
由EEPROM派生的闪速存储器
EEPROM具有很高的灵活性,可以单字节读写,但存储密
度小,单位成本高。
部分制造商生产出另一类以EEPROM做闪速存储阵列的
Flash Memory,如ATMEL、SST的小扇区结构闪速存储器( Small Sector Flash Memory)和ATMEL的海量存储器( Data-Flash Memory)。
司成立了PCI 集团,其英文全称为:Peripheral Component Interconnect Special Interest Group( 外围部件互连专业组),简称PCISIG
PCI有32位和64位两种,32位PCI 有124 引脚,64位
有188引脚,目前常用的是32位PCI
32 位PCI的数据传输率为133MB/s,大大高于ISA
ISA总线有98只引脚。其中62 线的一段基于8 位
的PC 总线,可以独立使用,连接8位的扩展卡,而 62 线与36线相加后就扩展成标准的16位ISA,连接 16位的扩展卡
29
PCI
1991 年下半年,Intel公司首先提出了PCI 的概念 并联合IBM、Compaq、AST、HP、DEC 等100 多家公
MLC技术,生产出芯片尺寸更小、存储容量更大、功耗更低的 512Mb-AND Flash Memory,再利用双密度封装技术DDP,将2片 512Mb芯片叠加在1片TSOP48的封装内,形成一片1Gb芯片
HN29V51211T具有突出的低功耗特性,读电流为2mA,待机电流
仅为1μ A
由于其内部存在与块大小一致的内部RAM 缓冲区,使得AND技
CACHE写

单片机毕业设计题目较容易的

单片机毕业设计题目较容易的

单片机毕业设计题目较容易的单片机是一种广泛应用于嵌入式系统的微型电脑,在科技产业中也扮演着重要的角色。

为了让学生更好地学习和掌握单片机技术,许多学校都会要求学生进行单片机的毕业设计。

以下是一些较为容易的单片机毕业设计题目,供大家参考:一、智能家居控制系统在单片机、传感器、通讯技术和家电控制等方面进行设计,实现智能家居的自动化管理,如温度控制、照明控制、窗帘控制等功能,实现智能家居系统的智能化、舒适化。

二、智能绿植养护系统基于单片机、传感器、液晶屏和控制器等硬件设计,将温度、湿度、光照等环境参数进行检测和记录,并通过控制器实现水肥自动喂养、光照调控、温湿度自动调节等功能,保证绿植的正常生长。

三、电子词典设计该项目主要是基于单片机和学习型记忆卡等硬件设备,以及各种词库和语音合成技术,构建一个功能完备、使用简单、体积小巧的电子词典系统,使用户可以快速查阅和记忆单词、词组、成语等语言内容。

四、智能交通信号灯控制系统结合单片机、通讯技术、图像处理等技术,实现智能交通信号灯控制,减缓城市交通拥堵,提高道路交通效率,保障行车安全。

该项目设计难度较高,需要涉及到通讯信号的处理、图像的处理及其特征提取等关键技术的研究。

五、智能医疗诊断系统基于单片机、传感器、采样电路、信号处理算法、人工智能等硬件及软件技术,构建一个智能医疗诊断系统,能够检测患者的生理指标,并根据患者的身体状况和历史病例,提供医学诊断结果和治疗建议。

六、智能家庭安防系统该系统可以通过单片机、配合传感器、通讯模块等硬件,实现对家庭室内和室外环境的实时监测,防盗报警、行程化控制、视频监控等多个功能,提高家庭的安全系数。

以上六个较容易的单片机毕业设计题目都涵盖了多个领域,并且难度不一,学生可以根据自己的兴趣和实际情况进行选择。

希望这些设计课题能对大家有所帮助。

c语言课程设计电子词典

c语言课程设计电子词典

沈阳工程学院课程设计设计题目: 电子词典系别信息工程系班级计本083学生姓名学号24指导教师姜柳、吕海华职称讲师、讲师起止日期:2009年6月15日起——至2009年6月26日止ﻬ沈阳工程学院课程设计任务书课程设计题目:电子词典(第 1 组)系别信息工程系班级计本083学生姓名张余学号200指导教师姜柳、吕海华职称讲师、讲师课程设计进行地点:实训F任务下达时间:2009年6月15日起止日期:2009年6月15日起——至2009年6月26日止教研室主任姜柳2009年6月15日批准一、课程设计的原始资料及依据在计算机中建立有限规模的电子英汉词典,利用程序实现电子英汉词典的查找、增加、删除、修改等功能。

查阅有关资料,进一步理解程序设计模块化的思想,并利用此思想编写一个简单的电子词典。

通过本设计可以加深理解利用程序设计思想开发一个系统的整个流程,提高分析问题、解决问题和实际动手的能力。

二、课程设计主要内容及要求1.认真阅读资料,掌握程序设计模块化的思想。

2.要求在设计的过程中,建立清晰的层次结构。

3.画出主要的功能结构图和主要模块的流程图。

4.实现功能:⑴查找单词。

⑵增加单词。

⑶万年历⑷修改单词。

⑸显示单词。

⑹保存单词。

⑺返回⑻帮助⑼退出5. 要求操作简单,用户界面友好。

6. 运行程序,检查结果是否和理论值一致。

7. 环境使用Windows,Turbo C环境。

三、对课程设计说明书撰写内容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。

一般不应少于3000字。

2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。

嵌入式系统课程表课程设计

嵌入式系统课程表课程设计

嵌入式系统课程表课程设计一、课程目标知识目标:1. 理解嵌入式系统的基本概念、组成及工作原理;2. 掌握嵌入式系统的硬件、软件设计方法和开发流程;3. 了解嵌入式系统在不同领域的应用及发展趋势。

技能目标:1. 能够使用嵌入式系统开发工具进行程序设计、调试与优化;2. 学会分析并解决嵌入式系统在实际应用中遇到的问题;3. 培养团队协作能力,能够与他人共同完成嵌入式项目开发。

情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发探究精神;2. 树立正确的价值观,认识到嵌入式技术对社会发展的积极作用;3. 培养学生的创新意识,敢于尝试新技术、新方法;4. 增强学生的责任感,使其明白作为一名嵌入式开发人员应承担的社会责任。

本课程针对高中年级学生,结合嵌入式系统课程性质、学生特点和教学要求,将目标分解为具体的学习成果。

通过本课程的学习,学生不仅能够掌握嵌入式系统的基本知识和技能,还能够培养良好的情感态度价值观,为未来的学习和职业发展打下坚实基础。

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

2. 嵌入式硬件系统:讲解嵌入式硬件系统的组成、架构、选型原则,包括微控制器、存储器、输入输出接口等,对应教材第二章内容。

3. 嵌入式软件系统:介绍嵌入式软件系统的设计方法、开发流程、操作系统原理,包括实时操作系统、嵌入式Linux等,对应教材第三章内容。

4. 嵌入式系统编程:学习嵌入式编程语言(如C、C++)及其编程技巧,分析典型程序案例,对应教材第四章内容。

5. 嵌入式系统设计与实践:结合实际项目案例,讲解嵌入式系统设计方法、开发流程、调试技巧,对应教材第五章内容。

6. 嵌入式系统应用案例分析:分析嵌入式系统在不同领域的应用案例,如智能家居、物联网、汽车电子等,激发学生的创新意识,对应教材第六章内容。

本章节教学内容根据课程目标制定,保证科学性和系统性。

嵌入式课程设计电子词典硬件设计

嵌入式课程设计电子词典硬件设计

嵌入式课程设计电子词典硬件设计嵌入式课程设计是现代电子技术专业中非常重要的一个课程,其作用是帮助学生掌握嵌入式系统的设计与开发技术,从而能够开发出满足实际应用需求的高性能硬件设备。

在嵌入式课程设计中,电子词典硬件设计是一个既重要又有挑战性的任务,本文将着重介绍该任务的具体内容和实现过程。

一、电子词典硬件设计所涉及的主要内容电子词典硬件设计的主要任务就是设计出一款能够实现扫描、存储、查询等功能的小型化电子设备,以帮助用户快速准确地查询词语的意义、拼音、读音以及基本用法等相关信息。

具体而言,其设计涉及以下方面:1. 控制器模块:主要作用是完成电子词典的各项控制功能,包括键盘输入、液晶显示、声音播放等操作。

2. 存储器模块:主要作用是储存待查询的词库信息,以便在查询时能够快速地提供所需信息。

3. 人机交互模块:主要作用是提供用户与电子词典之间的交互接口,包括屏幕显示、声音输出、键盘输入等操作。

4. 供电模块:主要作用是为整个电子词典提供稳定可靠的电源,以保证其正常工作。

5. 其他模块:包括外壳设计、线路板设计、软件编写等多个方面,以保证电子词典具有完整、稳定的功能。

二、电子词典硬件设计的实现过程1. 原理图设计:在完成电子词典硬件设计之前,需要根据其功能需求绘制一套完整的原理图,以确定各个电路模块的布局、连接方式等详细参数。

2. PCB设计:根据原理图设计的电路连接方式,需要完成电路板的布局、走线等设计工作。

通过点击绘制工具和观察其3D效果,我们可以查看设计的钢板与其他元件的距离是否合适。

即可进入到样板板打样的阶段。

3. 程序编写:完成硬件设计之后,还需要编写相应的软件程序,以控制各个电路模块的工作,实现电子词典的各个功能。

4. 组装调试:完成原理图设计、PCB设计以及程序编写之后,还需要组装整个电子词典,并进行调试,以确保其所有功能正常可用。

5. 产品测试:在完成组装调试之后,还需要进行一些必要的测试和评估工作,以确保电子词典的性能和品质都能够满足所需的技术要求和市场需求。

嵌入式课程设计电子词典硬件设计

嵌入式课程设计电子词典硬件设计

嵌入式课程设计电子词典硬件设计嵌入式系统是现代电子技术发展的重要分支之一,它应用于各个领域,如航空航天、军事、医疗、工业、家庭等。

随着人们对信息化的关注和需求增加,软件和硬件系统的嵌入式技术也越来越成熟和普及。

电子词典是一种便携式的电子产品,它的主要功能是存储和查询语言和文化知识,同时具备语音提示和翻译、笔画输入等多种功能特点。

电子词典在课堂教学、商务交流、旅游出行等方面都有着广泛的应用场景。

为了满足用户的需求和提高电子词典的使用效率,本文将介绍一种基于嵌入式系统的电子词典硬件设计方案。

1.方案介绍本方案采用单片机、LCD显示屏、扬声器、按键、存储卡等硬件组件,通过软件实现词典功能的设计。

电子词典具备中英文互译、生词选读、笔画输入和语音播放等多种功能。

2.硬件设计1)单片机本方案采用STM32F103ZE系列的单片机,它具备低功耗、高性能和强大的计算能力,可以支持多种接口和功能。

单片机主要负责处理和控制硬件组件的运行,如LCD显示、按键输入、存储卡读取等。

2)LCD显示屏本方案采用3.5英寸LCD显示屏,分辨率为320*240,具备较高的清晰度和亮度,显示速度也很快。

显示屏可以显示中英文字符和图形,同时还支持触摸屏输入和反光功能。

3)扬声器本方案采用比较小的扬声器,主要负责音频播放和提示功能。

扬声器可以播放中英文发音和语音提示,同时还支持音量调节和多种音效。

4)按键本方案采用5个按键,主要负责电子词典的输入和控制功能。

按键分别为菜单键、返回键、上翻键、下翻键和确认键,在电子词典的操作中起到了关键作用。

5)存储卡本方案采用TF存储卡,可以存放大量的词库和语音信息,具有较高的存储容量和数据传输速度。

存储卡可以实现电子词典的离线使用和在线更新,满足不同用户的需求。

3.软件设计本方案采用C语言编程,结合Keil嵌入式开发环境,充分利用STM32F103ZE单片机的资源和功能,完成了电子词典的软件设计和编程。

网络电子词典课程设计

网络电子词典课程设计

网络电子词典课程设计一、课程目标知识目标:1. 学生掌握网络电子词典的基本概念、功能与操作方法。

2. 学生了解网络电子词典在语言学习中的应用及优势。

3. 学生掌握利用网络电子词典进行词汇查找、词义辨析、例句学习等技巧。

技能目标:1. 学生能够熟练使用网络电子词典进行自主词汇学习。

2. 学生能够运用网络电子词典进行跨学科词汇拓展和语言运用。

3. 学生通过网络电子词典提高自己的语言表达能力和词汇记忆能力。

情感态度价值观目标:1. 学生培养对网络电子词典的积极态度,认识到其在学习中的辅助作用。

2. 学生树立正确的语言学习观念,意识到词汇积累对提高语言素养的重要性。

3. 学生在学习过程中,培养合作精神,学会分享和交流学习心得。

课程性质:本课程为信息技术与语言学习的融合课程,旨在提高学生的词汇学习能力和语言运用能力。

学生特点:六年级学生已具备一定的词汇基础和信息技术操作能力,对新鲜事物充满好奇心,善于合作与分享。

教学要求:结合学生特点和课程性质,课程设计应注重实践操作,鼓励学生自主探究和合作交流,以提高学生的词汇学习兴趣和效果。

通过具体的学习成果分解,使学生在课程学习中获得实际收益。

二、教学内容1. 网络电子词典概述- 网络电子词典的定义与分类- 网络电子词典的发展与应用2. 网络电子词典的功能与操作- 基本功能介绍:词汇查找、词义辨析、例句学习等- 操作方法指导:界面导航、搜索技巧、词汇收藏等3. 网络电子词典在语言学习中的应用- 词汇学习:拓展词汇量、提高词汇记忆- 语言运用:句型模仿、口语表达、写作辅助4. 网络电子词典的优势与局限- 优势分析:便捷性、实时更新、个性化学习等- 局限性讨论:准确性、依赖性、版权问题等5. 跨学科词汇拓展- 结合教材内容,运用网络电子词典进行跨学科词汇学习- 各学科常见词汇、短语及专业术语的查找与应用教学大纲安排:第一课时:网络电子词典概述与功能介绍第二课时:网络电子词典操作方法与词汇查找技巧第三课时:网络电子词典在语言学习中的应用与优势分析第四课时:跨学科词汇拓展与网络电子词典的局限性讨论教学内容与进度根据课程目标和学生的学习实际情况进行调整,确保教学内容与课本紧密关联,提高学生的实际操作能力和词汇应用水平。

嵌入式课程设计 - 电子词典硬件设计.

嵌入式课程设计 - 电子词典硬件设计.

上海电力学院嵌入式系统课程设计报告题目:电子词典的设计姓名:学号:院系:专业年级:同组成员:年月日一、实验内容及要求在LCD屏幕左侧绘制出单词输入框和释义显示框以及一个搜索键,右侧绘制4*4键盘按钮,模拟出简易电子词典的功能,按钮操作用触摸屏或键盘实现均可。

实现功能:(1)LCD屏幕上显示4*4键盘,显示单词及其翻译、例句。

(2)一个键可完成2个英文字母的输入,如左上角第一个键可实现输入a,b两个字母,第一次按下时为输入a,如果需输入b,只需连续快速按键两次即可。

(3)在输入完单词后,点击搜索键,即可在释义显示框中显示该单词的词性、中文解释、示例词组和句子等。

(4)当发现输入的单词在库中不存在时,可实现将该单词添加入库的操作。

二、设计思路(1)通过LCD显示模块画出电子词典操作界面。

(2)对应界面中各键的位置设置键盘对应键值。

(3)设定功能键,实现以下3个功能:①退格键:删除最后一位字母;②搜索∕保存键:对输入框的单词进行判断,若单词存在于词库中,则显示单词词性、词义、例句;若单词不存在则自动进行保存;③转换键:按下后,字母键输出对应的第二个字母。

(4)按键后赋值并显示。

三、软件构架开始LCD模块键盘模块结束四、模块分析(1)键盘模块流程图:源代码:/********************************************************************************************** File : keyboard.c* Author: embest* Desc : keyboard source code* History:*********************************************************************************************//*--- include files ---*/ 开始 键盘初始化 键盘是否按下 Y 读取键值 是否是功能键 Y N 执行功能赋值 显示 结束 N#include "44b.h"#include "44blib.h"#include "def.h"#include "keyboard.h"#include "lcd.h"#include "dict.h"#ifndef KEY_INT#define KEY_INT#endif#ifndef BUT_INT#define BUT_INT#endif/*--- global variables ---*/int input_char,n=0;char word[20];int wordIndex=0;int x = 15;int num=0;int counter=0;/* keyboard control address */volatile UCHAR *keyboard_base = (UCHAR *)0x06000000;/*--- function declare ---*/void init_keyboard();void close_keyboard();void KeyboardInt(void);// __attribute__ ((interrupt ("IRQ")));void Eint4567Isr(void);// __attribute__ ((interrupt ("IRQ")));/*--- function code ---*//****************************************************************************** **************** name: Test_Keyboard* func: test keyboard* para: none* ret: none* modify:* comment:******************************************************************************* *************/void Test_Keyboard(){Uart_Printf("\n Keyboard Test Example\n");Uart_Printf("\n Please press one key on keyboard and look at LED ...\n");// init keyboardinit_keyboard();while(1);// close keyboard// close_keyboard();}/****************************************************************************** **************** name: init_keyboard* func: init keyboard interrupt* para: none* ret: none* modify:* comment:******************************************************************************* *************/extern void isrEINT1(void);extern void isrEint4567(void);void init_keyboard(){/* enable interrupt */rINTMOD = 0x0;rINTCON = 0x1;/* set EINT1 interrupt handler */rINTMSK =~(BIT_GLOBAL|BIT_EINT1|BIT_EINT4567);pISR_EINT1 = (int)isrEINT1;pISR_EINT4567 = (int)isrEint4567;/* PORT G */rPCONG = 0xffff; // EINT7~0rPUPG = 0x0; // pull up enablerEXTINT = rEXTINT|0x20; // EINT1 falling edge moderI_ISPC = BIT_EINT1|BIT_EINT4567; // clear pending bitrEXTINTPND = 0xf; // clear EXTINTPND reg}/****************************************************************************** **************** name: close_keyboard* func: close keyboard interrupt* para: none* ret: none* modify:* comment:******************************************************************************* *************/void close_keyboard(){pISR_EINT1 = NULL;pISR_EINT4567 = NULL;/* Mask interrupt */rINTMSK = rINTMSK | BIT_EINT1 | BIT_EINT4567;}/****************************************************************************** **************** name: KeyboardInt* func: keyboard interrupt handler function* para: none* ret: none* modify:* comment:******************************************************************************* *************/void KeyboardInt(void){int nTemp,i,j,k,m=0;char bbyte;rI_ISPC = BIT_EINT1; // clear pending bitchar pbyte[10];nTemp = key_read();if(nTemp > -1){// Lcd_Draw_HLine(10, 310, 80, WHITE, 50);input_char = nTemp;Lcd_DspAscII8x16(15,45,WHITE,word);switch(input_char){case 0:num=1;break;case 1:num=2;break;case 2:num=3;break;case 3:num=4;break;case 4:num=5;break;case 5:num=6;break;case 6:num=7;break;case 7:num=8;break;case 8:num=9;break;case 9:counter=1;break;case 10:counter=2;break;case 11:counter=3;break;case 12:m=1;Lcd_Draw_HLine(15+n-10, 15+n, 45, WHITE, 16); n-=10;word[wordIndex]='\0';wordIndex--;break;/*if(n==0){word[20]=0;wordIndex=0;Lcd_Draw_HLine(10, 310,85, WHITE, 160);}break;*/case 13:word[wordIndex]='\0';wordIndex=0;for(i=0;i<20;i++){if(strcmp(word,vocab[i].c)==0){j=0;k=i;break;}elsej=1;}if(j==0){//#ifdef Eng_vLcd_DspAscII8x16(15,40,BLUE,vocab[k].c);Lcd_DspAscII8x16(15,60,BLUE,vocab[k].d);Lcd_DspAscII8x16(15,80,BLUE,vocab[k].f);//#elseLcd_DspHz16(15,100,BLUE,vocab[k].e);//#endif}else{Lcd_DspHz16(15,120,BLUE,"未找到相应的单词");DelayMs(600);Lcd_DspHz16(15,120,WHITE,"未找到相应的单词"); }break;case 14:word[wordIndex]='\0';wordIndex=0;for(i=0;i<20;i++){if(strcmp(word,vocab[i].c)==0){j=0;k=i;break;}elsej=1;}if(j==0){//#ifdef Eng_vLcd_DspAscII8x16(15,40,BLUE,vocab[k].c);Lcd_DspAscII8x16(15,60,BLUE,vocab[k].d);Lcd_DspAscII8x16(15,80,BLUE,vocab[k].f);//#elseLcd_DspHz16(15,100,BLUE,vocab[k].e);//#endif}else{if(20>x>0){for(i = 0; i < 20; i++)vocab[x].c[i]=word[i];word[i]='\0';Lcd_DspAscII8x16(15,40,BLUE,vocab[x].c);x++;}elsex=15;//Lcd_DspAscII8x16(15,45,BLUE,word);for(i = 0; i < 20; i++)word[i]='\0';}break;case 15://Lcd_Draw_Box(10,40,310,80,GREEN);break;}if(num!=0&&counter!=0){switch(3*(num-1)+counter-1){case 0:bbyte='a';break;case 1:bbyte='b';break;case 2:bbyte='c';break;case 3:bbyte='d';break;case 4:bbyte='e';break;case 5:bbyte='f';break;case 6:bbyte='g';break;case 7:bbyte='h';break;case 8:bbyte='i';break;case 9:bbyte='j';break;case 10:bbyte='k';break;case 11:bbyte='l';break;case 12:bbyte='m';break;case 13:bbyte='n';break;case 14:bbyte='o';break;case 15:bbyte='p';break;case 16:bbyte='q';break;case 17:bbyte='r';break;case 18:bbyte='s';break;case 19:bbyte='t';break;case 20:bbyte='u';break;case 21:bbyte='v';break;case 22:bbyte='w';break;case 23:bbyte='x';break;case 24:bbyte='y';break;case 25:bbyte='z';break;case 26:bbyte='y';break;}num=0;counter=0;if(m==0){word[wordIndex]=bbyte; wordIndex++;//n+=10;}Lcd_DspAscII8x16(15,210,BLUE,word);// Uart_Printf("Key is:%x \r",input_char);}}/****************************************************************************** **************** name: key_read* func: read key value* para: none* ret: key value, -1 -- error* modify:* comment:******************************************************************************* *************/inline int key_read(){int value;char temp;/* read line 1 */temp = *(keyboard_base+0xfd);/* not 0xF mean key down */if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 )value = 3;else if( (temp&0x2) == 0 )value = 2;else if( (temp&0x4) == 0 )value = 1;else if( (temp&0x8) == 0 )value = 0;while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // releasetemp = *(keyboard_base+0xfd);return value;}/* read line 2 */temp = *(keyboard_base+0xfb);/* not 0xF mean key down */if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 )value = 7;else if( (temp&0x2) == 0 )value = 6;else if( (temp&0x4) == 0 )value = 5;else if( (temp&0x8) == 0 )value = 4;while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // release temp = *(keyboard_base+0xfb);return value;}/* read line 3 */temp = *(keyboard_base+0xf7);/* not 0xF mean key down */if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 )value = 0xb;else if( (temp&0x2) == 0 )value = 0xa;else if( (temp&0x4) == 0 )value = 9;else if( (temp&0x8) == 0 )value = 8;while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // release temp = *(keyboard_base+0xf7);return value;}/* read line 4 */temp = *(keyboard_base+0xef);/* not 0xF mean key down */if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 )value = 0xf;else if( (temp&0x2) == 0 )value = 0xe;else if( (temp&0x4) == 0 )value = 0xd;else if( (temp&0x8) == 0 )value = 0xc;while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // releasetemp = *(keyboard_base+0xef);return value;}return -1;}/****************************************************************************** **************** name: Eint4567Isr* func:* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Eint4567Isr(void){unsigned char which_int;Uart_Printf("\n SB2 or SB3 had pressed and light LED.");which_int=rEXTINTPND;rEXTINTPND=0xf; //clear EXTINTPND reg.rI_ISPC=BIT_EINT4567; //clear pending_bitif(which_int == 4) // SB2{Led_Display(0x0);Led_Display(0x1);}else if(which_int == 8) // SB3{Led_Display(0x0);Led_Display(0x2);}}(2)LCD模块流程图:开始LCD初始化显示开机画面显示操作界面结束源代码:/****************************************************************************** **************** File:lcd.c* Author: embest* Desc: LCD control and display functions* History:******************************************************************************* **************//*--- include files ---*/#include "lcd.h"//#include "bmp.h"#include "44b.h"/*--- global variables ---*/INT32U aLcdActiveBuffer[LCD_YSIZE][LCD_XSIZE/4];/*--- extern variables ---*/extern const INT8U aucTempBitmap[][76800];/*--- function code ---*//****************************************************************************** **************** name: Lcd_Init()* func: Initialize LCD Controller* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Init (void){rDITHMODE=0x12210;rDP1_2 =0xa5a5;rDP4_7 =0xba5da65;rDP3_5 =0xa5a5f;rDP2_3 =0xd6b;rDP5_7 =0xeb7b5ed;rDP3_4 =0x7dbe;rDP4_5 =0x7ebdf;rDP6_7 =0x7fdfbfe;// disable,8B_SNGL_SCAN,WDL Y=16clk,WLH=16clk,rLCDCON1=(0x0)|(2<<5)|(MV AL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<< 12);// LINEBLANK=10 (without any calculation)rLCDCON2=(LINEV AL)|(HOZV AL_COLOR<<10)|(10<<21);rLCDCON3=0;// 256-color, LCDBANK, LCDBASEUrLCDSADDR1= (0x3<<27) | ( ((unsigned int)aLcdActiveBuffer>>22)<<21 ) | M5D((unsigned int)aLcdActiveBuffer>>1);rLCDSADDR2= M5D((((unsigned int)aLcdActiveBuffer+(SCR_XSIZE*LCD_YSIZE))>>1)) | (MV AL<<21);rLCDSADDR3= (LCD_XSIZE/2) | ( ((SCR_XSIZE-LCD_XSIZE)/2)<<9 );//The following value has to be changed for better display.rREDLUT =0xfdb96420; // 1111 1101 1011 1001 0110 0100 0010 0000rGREENLUT=0xfdb96420; // 1111 1101 1011 1001 0110 0100 0010 0000rBLUELUT =0xfb40; // 1111 1011 0100 0000rLCDCON1=(0x1)|(2<<5)|(MV AL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<< 12);// rPDATE=rPDATE&0x0e;rPDATE=0xfe;Lcd_Clr();}/****************************************************************************** **************** name: Lcd_Clr()* func: clear LCD screen* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Clr(void){INT32U i;INT32U *pDisp = (INT32U*)aLcdActiveBuffer;for (i = 0; i < (SCR_XSIZE * SCR_YSIZE / 4); i++){*pDisp++ = ALLWHITE;}}/****************************************************************************** **************** name: LcdClrRect()* func: fill appointed area with appointed color* para: usLeft,usTop,usRight,usBottom -- area's rectangle acme coordinate* ucColor -- appointed color value* ret: none* modify:* comment: also as clear screen function******************************************************************************* **************/void LcdClrRect(INT16 usLeft, INT16 usTop, INT16 usRight, INT16 usBottom, INT8U ucColor) {INT32U i, j;INT8U *pDisp = (INT8U*)aLcdActiveBuffer;for(i=usTop;i<=usBottom;i++){for(j=usLeft;j<=usRight;j++){LCD_PutPixel(j, i, ucColor);}}}#ifdef MON_LCD/****************************************************************************** **************** name: LcdClrRect()* func: fill appointed area with appointed color* para: usLeft,usTop,usRight,usBottom -- area's rectangle acme coordinate* ucColor -- appointed color value* ret: none* modify:* comment: also as clear screen function******************************************************************************* **************/void LcdClrRect(INT16 usLeft, INT16 usTop, INT16 usRight, INT16 usBottom, INT8U ucColor) {INT16 i=0;INT16 k,l;INT16 m;INT32U ulColor = (ucColor << 28) | (ucColor << 24) | (ucColor << 20) | (ucColor << 16) |(ucColor << 12) | (ucColor << 8) | (ucColor << 4) | ucColor;if((usRight-usLeft)<=8){for(i=usTop;i<=usBottom;i++){for(m=usLeft;m<=usRight;m++){LCD_PutPixel(m, i, ucColor);}}return;}if((usLeft%8)==0)k=usLeft;else{k=(usLeft/8)*8+8;}if(( usRight%8)==0)l= usRight;else{l=( usRight/8)*8;}for(i=usTop;i<=usBottom;i++){for(m=usLeft;m<=(k-1);m++){LCD_PutPixel(m, i, ucColor);}for(m=k;m<l;m+=8){(*(INT32U*)(aLcdActiveBuffer + i * SCR_XSIZE / 2 + m / 2)) = ulColor;}for(m=l;m<=usRight;m++){LCD_PutPixel(m, i, ucColor);}}}#endif/****************************************************************************** **************** name: Lcd_Draw_Box()* func: Draw rectangle with appointed color* para: usLeft,usTop,usRight,usBottom -- rectangle's acme coordinate* ucColor -- appointed color value* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Draw_Box(INT16 usLeft, INT16 usTop, INT16 usRight, INT16 usBottom, INT8UucColor){Lcd_Draw_HLine(usLeft, usRight, usTop, ucColor, 1);Lcd_Draw_HLine(usLeft, usRight, usBottom, ucColor, 1);Lcd_Draw_VLine(usTop, usBottom, usLeft, ucColor, 1);Lcd_Draw_VLine(usTop, usBottom, usRight, ucColor, 1);}/****************************************************************************** **************** name: Lcd_Draw_Line()* func: Draw line with appointed color* para: usX0,usY0 -- line's start point coordinate* usX1,usY1 -- line's end point coordinate* ucColor -- appointed color value* usWidth -- line's width* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Draw_Line(INT16 usX0, INT16 usY0, INT16 usX1, INT16 usY1, INT8U ucColor, INT16U usWidth){INT16 usDx;INT16 usDy;INT16 y_sign;INT16 x_sign;INT16 decision;INT16 wCurx, wCury, wNextx, wNexty, wpy, wpx;if( usY0 == usY1 ){Lcd_Draw_HLine (usX0, usX1, usY0, ucColor, usWidth);return;}if( usX0 == usX1 ){Lcd_Draw_VLine (usY0, usY1, usX0, ucColor, usWidth);return;}usDx = abs(usX0 - usX1);usDy = abs(usY0 - usY1);if( ((usDx >= usDy && (usX0 > usX1)) ||((usDy > usDx) && (usY0 > usY1))) ){GUISWAP(usX1, usX0);GUISWAP(usY1, usY0);}y_sign = (usY1 - usY0) / usDy;x_sign = (usX1 - usX0) / usDx;if( usDx >= usDy ){for( wCurx = usX0, wCury = usY0, wNextx = usX1,wNexty = usY1, decision = (usDx >> 1);wCurx <= wNextx; wCurx++, wNextx--, decision += usDy ) {if( decision >= usDx ){decision -= usDx;wCury += y_sign;wNexty -= y_sign;}for( wpy = wCury - usWidth / 2;wpy <= wCury + usWidth / 2; wpy++ ){LCD_PutPixel(wCurx, wpy, ucColor);}for( wpy = wNexty - usWidth / 2;wpy <= wNexty + usWidth / 2; wpy++ ){LCD_PutPixel(wNextx, wpy, ucColor);}}}else{for( wCurx = usX0, wCury = usY0, wNextx = usX1,wNexty = usY1, decision = (usDy >> 1);wCury <= wNexty; wCury++, wNexty--, decision += usDx ) {if( decision >= usDy ){decision -= usDy;wCurx += x_sign;wNextx -= x_sign;}for( wpx = wCurx - usWidth / 2;wpx <= wCurx + usWidth / 2; wpx++ ){LCD_PutPixel(wpx, wCury, ucColor);}for( wpx = wNextx - usWidth / 2;wpx <= wNextx + usWidth / 2; wpx++ ){LCD_PutPixel(wpx, wNexty, ucColor);}}}}/****************************************************************************** **************** name: Lcd_Draw_HLine()* func: Draw horizontal line with appointed color* para: usX0,usY0 -- line's start point coordinate* usX1 -- line's end point X-coordinate* ucColor -- appointed color value* usWidth -- line's width* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Draw_HLine(INT16 usX0, INT16 usX1, INT16 usY0, INT8U ucColor, INT16U usWidth){INT16 usLen;if( usX1 < usX0 ){GUISWAP (usX1, usX0);}while( (usWidth--) > 0 ){usLen = usX1 - usX0 + 1;while( (usLen--) > 0 ){LCD_PutPixel(usX0 + usLen, usY0, ucColor);}usY0++;}}/****************************************************************************** **************** name: Lcd_Draw_VLine()* func: Draw vertical line with appointed color* para: usX0,usY0 -- line's start point coordinate* usY1 -- line's end point Y-coordinate* ucColor -- appointed color value* usWidth -- line's width* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Draw_VLine (INT16 usY0, INT16 usY1, INT16 usX0, INT8U ucColor, INT16U usWidth){INT16 usLen;if( usY1 < usY0 ){GUISWAP (usY1, usY0);}while( (usWidth--) > 0 ){usLen = usY1 - usY0 + 1;while( (usLen--) > 0 ){LCD_PutPixel(usX0, usY0 + usLen, ucColor);}usX0++;}}/*--- extern variables ---*/extern INT8U g_auc_Ascii8x16[];/****************************************************************************** **************** name: Lcd_DspAscII8x16()* func: display 8x16 ASCII character string* para: usX0,usY0 -- ASCII character string's start point coordinate* ForeColor -- appointed color value* pucChar -- ASCII character string* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_DspAscII8x16(INT16U x0, INT16U y0, INT8U ForeColor, INT8U * s){INT16 i,j,k,x,y,xx;INT8U qm;INT32U ulOffset;INT8 ywbuf[16],temp[2];for( i = 0; i < strlen((const char*)s); i++ ){if( (INT8U)*(s+i) >= 161 ){temp[0] = *(s + i);temp[1] = '\0';return;}else{qm = *(s+i);ulOffset = (INT32U)(qm) * 16; //Here to be changed tomorrowfor( j = 0; j < 16; j ++ ){ywbuf[j] = g_auc_Ascii8x16[ulOffset + j];}for( y = 0; y < 16; y++ ){for( x = 0; x < 8; x++ ){k = x % 8;if( ywbuf[y] & (0x80 >> k) ){xx = x0 + x + i*8;LCD_PutPixel(xx, y + y0, (INT8U)ForeColor);}}}}}}/*--- extern variables ---*/extern INT8U g_auc_Ascii6x8[];#define XWIDTH 6/****************************************************************************** **************** name: Lcd_DspAscII6x8()* func: display 6x8 ASCII character string* para: usX0,usY0 -- ASCII character string's start point coordinate* ForeColor -- appointed color value* pucChar -- ASCII character string* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_DspAscII6x8(INT16U usX0, INT16U usY0,INT8U ForeColor, INT8U* pucChar) {INT32U i,j;INT8U ucTemp;while( *pucChar != 0 ){for( i=0; i < 8; i++ ){ucTemp = g_auc_Ascii6x8[(*pucChar) * 8 + i];for( j = 0; j < 8; j++ ){if( (ucTemp & (0x80 >> j)) != 0 ){LCD_PutPixel(usX0 + i, usY0 + 8 - j, (INT8U)ForeColor);}}}usX0 += XWIDTH;pucChar++;}}#ifndef Eng_v/****************************************************************************** **************** name: Lcd_DspHz16()* func: display chinese character string in 16x16 dot array* para: usX0,usY0 -- ASCII character string's start point coordinate* ForeColor -- appointed color value* pucChar -- ASCII character string* ret: none* modify:* comment:******************************************************************************* **************/extern const INT8U g_auc_HZK16[];void Lcd_DspHz16(INT16U x0, INT16U y0, INT8U ForeColor, INT8U *s){INT16 i,j,k,x,y,xx;INT8U qm,wm;INT32U ulOffset;INT8 hzbuf[32],temp[2];for( i = 0; i < strlen((const char*)s); i++ ){if( ((INT8U)(*(s+i))) < 161 ){temp[0] = *(s+i);temp[1] = '\0';break;}else{qm = *(s+i) - 161;wm = *(s + i + 1) - 161;ulOffset = (INT32U)(qm * 94 + wm) * 32;for( j = 0; j < 32; j ++ ){hzbuf[j] = g_auc_HZK16[ulOffset + j];}for( y = 0; y < 16; y++ ){for( x = 0; x < 16; x++ ){k = x % 8;if( hzbuf[y * 2 + x / 8] & (0x80 >> k) ){xx = x0 + x + i * 8;LCD_PutPixel( xx, y + y0, (INT8U)ForeColor);}}}i++;}}}#endif/****************************************************************************** **************** name: Lcd_Test()* func: LCD test function* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Test(void){int i, j;Uart_Printf("\n LCD display Test Example(please look at LCD screen)\n");/* initial LCD controller */Lcd_Init();/* clear screen */Lcd_Clr();/* draw rectangle pattern */#ifdef Eng_v // english versionLcd_DspAscII8x16(10,0,BLUE,"Embest S3CEV40");#elseLcd_DspAscII8x16(100, 50, RED, "2009073 20091989 ");Lcd_DspHz16(155, 70, RED, "马一鸣");Lcd_DspAscII8x16(100, 90, BLACK, "2009073 20091993 ");Lcd_DspHz16(155, 110, BLACK, "邓家坤");Lcd_DspAscII8x16(100, 130, BLUE, "2009073 20092022 ");Lcd_DspHz16(155, 150, BLUE, "蒋赵睿");DelayMs(500);Lcd_DspHz16( 100, 100, BLUE, "欢迎使用电子词典");Lcd_DspAscII8x16(100, 50, WHITE, "2009073 20091989 ");Lcd_DspHz16(155,70, WHITE, "马一鸣");Lcd_DspAscII8x16(100, 90, WHITE, "2009073 20091993 ");Lcd_DspHz16(155, 110, WHITE, "邓家坤");Lcd_DspAscII8x16(100, 130, WHITE, "2009073 20092022 ");Lcd_DspHz16(155, 150, WHITE, "蒋赵睿");DelayMs(500);Lcd_Clr();Lcd_DspHz16(15,15,BLUE,"电子词典");#endif//Lcd_DspAscII8x16(10,24,GREEN-55,"ShenZhen Embest Info&Tech Co.,LTD");Lcd_Draw_Box(5,30,115,180,GREEN);/*显示窗口*/Lcd_Draw_Box(5,190,75,230,GREEN);/*输入窗口*/Lcd_Draw_Box(75,190,115,230,GREEN);/*搜索键*/Lcd_Draw_Box(120,30,165,75,GREEN);/*abc*/Lcd_Draw_Box(170,30,215,75,GREEN);/*def*/Lcd_Draw_Box(220,30,265,75,GREEN);/*ghi*/Lcd_Draw_Box(270,30,315,75,GREEN);/*jkl*/Lcd_Draw_Box(120,80,165,125,GREEN);/*mno*/Lcd_Draw_Box(170,80,215,125,GREEN);/*pqr*/Lcd_Draw_Box(220,80,265,125,GREEN);/*stu*/Lcd_Draw_Box(270,80,315,125,GREEN);/*vwx*/Lcd_Draw_Box(120,130,165,175,GREEN);/*yz*/Lcd_Draw_Box(170,130,215,175,GREEN);/*选择1*/Lcd_Draw_Box(220,130,265,175,GREEN);/*选择2*/Lcd_Draw_Box(270,130,315,175,GREEN);/*选择3*/Lcd_Draw_Box(120,180,165,225,GREEN);/*back*/Lcd_Draw_Box(170,180,215,225,GREEN);/*ent*/Lcd_Draw_Box(220,180,265,225,GREEN);/*save*/Lcd_Draw_Box(270,180,315,225,GREEN);/* output ASCII symbol */Lcd_DspAscII6x8(90,210,BLACK,"scan");Lcd_DspAscII6x8(140,50,BLACK,"abc");Lcd_DspAscII6x8(190,50,BLACK,"def");Lcd_DspAscII6x8(240,50,BLACK,"ghi");Lcd_DspAscII6x8(290,50,BLACK,"jkl");Lcd_DspAscII6x8(140,100,BLACK,"mno");Lcd_DspAscII6x8(190,100,BLACK,"pqr");Lcd_DspAscII6x8(240,100,BLACK,"stu");Lcd_DspAscII6x8(290,100,BLACK,"vwx");Lcd_DspAscII6x8(140,150,BLACK,"yz");Lcd_DspAscII6x8(190,150,BLACK,"ch1");Lcd_DspAscII6x8(240,150,BLACK,"ch2");Lcd_DspAscII6x8(290,150,BLACK,"ch3");Lcd_DspAscII6x8(140,200,BLACK,"back");Lcd_DspAscII6x8(190,200,BLACK,"ent");Lcd_DspAscII6x8(240,200,BLACK,"save");Lcd_DspAscII6x8(290,200,BLACK," ");/*for (j = 0; j < 1000000 * 5; j++);while (1){for (i = 0; i < 5; i++){BitmapView320x240x256((INT8U*)(aucTempBitmap[i]));for (j = 0; j < 1000000 * 5; j++);}}*/}/****************************************************************************** **************** name: Lcd_Test_board()* func: LCD test function for board all test* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Test_board(void){int i, j;/* initial LCD controller */Lcd_Init();/* clear screen */Lcd_Clr();/* draw rectangle pattern */#ifdef Eng_v // english versionLcd_DspAscII8x16(10,0,BLUE,"Embest S3CEV40 ");#elseLcd_DspHz16(10,10,BLUE,"英蓓特三星实验平台");#endif。

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

嵌入式课程设计电子词典硬件设计————————————————————————————————作者:————————————————————————————————日期:上海电力学院嵌入式系统课程设计报告题目:电子词典的设计姓名:学号:院系:专业年级:同组成员:年月日一、实验内容及要求在LCD屏幕左侧绘制出单词输入框和释义显示框以及一个搜索键,右侧绘制4*4键盘按钮,模拟出简易电子词典的功能,按钮操作用触摸屏或键盘实现均可。

实现功能:(1)LCD屏幕上显示4*4键盘,显示单词及其翻译、例句。

(2)一个键可完成2个英文字母的输入,如左上角第一个键可实现输入a,b两个字母,第一次按下时为输入a,如果需输入b,只需连续快速按键两次即可。

(3)在输入完单词后,点击搜索键,即可在释义显示框中显示该单词的词性、中文解释、示例词组和句子等。

(4)当发现输入的单词在库中不存在时,可实现将该单词添加入库的操作。

二、设计思路(1)通过LCD显示模块画出电子词典操作界面。

(2)对应界面中各键的位置设置键盘对应键值。

(3)设定功能键,实现以下3个功能:①退格键:删除最后一位字母;②搜索∕保存键:对输入框的单词进行判断,若单词存在于词库中,则显示单词词性、词义、例句;若单词不存在则自动进行保存;③转换键:按下后,字母键输出对应的第二个字母。

(4)按键后赋值并显示。

三、软件构架开LCD模块键盘结四、模块分析(1)键盘模块流程图:源代码:/********************************************************************************************** File : keyboard.c* Author: embest* Desc : keyboard source code* History:*********************************************************************************************//*--- include files ---*/ 开键盘初始键盘是Y 读取是否是功Y N 执行赋显结束 N#include "44b.h"#include "44blib.h"#include "def.h"#include "keyboard.h"#include "lcd.h"#include "dict.h"#ifndef KEY_INT#define KEY_INT#endif#ifndef BUT_INT#define BUT_INT#endif/*--- global variables ---*/int input_char,n=0;char word[20];int wordIndex=0;int x = 15;int num=0;int counter=0;/* keyboard control address */volatile UCHAR *keyboard_base = (UCHAR *)0x06000000;/*--- function declare ---*/void init_keyboard();void close_keyboard();void KeyboardInt(void);// __attribute__ ((interrupt ("IRQ")));void Eint4567Isr(void);// __attribute__ ((interrupt ("IRQ")));/*--- function code ---*//****************************************************************************** **************** name: Test_Keyboard* func: test keyboard* para: none* ret: none* modify:* comment:******************************************************************************* *************/void Test_Keyboard(){Uart_Printf("\n Keyboard Test Example\n");Uart_Printf("\n Please press one key on keyboard and look at LED ...\n");// init keyboardinit_keyboard();while(1);// close keyboard// close_keyboard();}/****************************************************************************** **************** name: init_keyboard* func: init keyboard interrupt* para: none* ret: none* modify:* comment:******************************************************************************* *************/extern void isrEINT1(void);extern void isrEint4567(void);void init_keyboard(){/* enable interrupt */rINTMOD = 0x0;rINTCON = 0x1;/* set EINT1 interrupt handler */rINTMSK =~(BIT_GLOBAL|BIT_EINT1|BIT_EINT4567);pISR_EINT1 = (int)isrEINT1;pISR_EINT4567 = (int)isrEint4567;/* PORT G */rPCONG = 0xffff; // EINT7~0rPUPG = 0x0; // pull up enablerEXTINT = rEXTINT|0x20; // EINT1 falling edge moderI_ISPC = BIT_EINT1|BIT_EINT4567; // clear pending bitrEXTINTPND = 0xf; // clear EXTINTPND reg}/****************************************************************************** **************** name: close_keyboard* func: close keyboard interrupt* para: none* ret: none* modify:* comment:******************************************************************************* *************/void close_keyboard(){pISR_EINT1 = NULL;pISR_EINT4567 = NULL;/* Mask interrupt */rINTMSK = rINTMSK | BIT_EINT1 | BIT_EINT4567;}/****************************************************************************** **************** name: KeyboardInt* func: keyboard interrupt handler function* para: none* ret: none* modify:* comment:******************************************************************************* *************/void KeyboardInt(void){int nTemp,i,j,k,m=0;char bbyte;rI_ISPC = BIT_EINT1; // clear pending bitchar pbyte[10];nTemp = key_read();if(nTemp > -1){// Lcd_Draw_HLine(10, 310, 80, WHITE, 50);input_char = nTemp;Lcd_DspAscII8x16(15,45,WHITE,word);switch(input_char){case 0:num=1;break;case 1:num=2;break;case 2:num=3;break;case 3:num=4;break;case 4:num=5;break;case 5:num=6;break;case 6:num=7;break;case 7:num=8;break;case 8:num=9;break;case 9:counter=1;break;case 10:counter=2;break;case 11:counter=3;break;case 12:m=1;Lcd_Draw_HLine(15+n-10, 15+n, 45, WHITE, 16); n-=10;word[wordIndex]='\0';wordIndex--;break;/*if(n==0){word[20]=0;wordIndex=0;Lcd_Draw_HLine(10, 310,85, WHITE, 160);}break;*/case 13:word[wordIndex]='\0';wordIndex=0;for(i=0;i<20;i++){if(strcmp(word,vocab[i].c)==0){j=0;k=i;break;}elsej=1;}if(j==0){//#ifdef Eng_vLcd_DspAscII8x16(15,40,BLUE,vocab[k].c);Lcd_DspAscII8x16(15,60,BLUE,vocab[k].d);Lcd_DspAscII8x16(15,80,BLUE,vocab[k].f);//#elseLcd_DspHz16(15,100,BLUE,vocab[k].e);//#endif}else{Lcd_DspHz16(15,120,BLUE,"未找到相应的单词");DelayMs(600);Lcd_DspHz16(15,120,WHITE,"未找到相应的单词"); }break;case 14:word[wordIndex]='\0';wordIndex=0;for(i=0;i<20;i++){if(strcmp(word,vocab[i].c)==0){j=0;k=i;break;}elsej=1;}if(j==0){//#ifdef Eng_vLcd_DspAscII8x16(15,40,BLUE,vocab[k].c);Lcd_DspAscII8x16(15,60,BLUE,vocab[k].d);Lcd_DspAscII8x16(15,80,BLUE,vocab[k].f);//#elseLcd_DspHz16(15,100,BLUE,vocab[k].e);//#endif}else{if(20>x>0){for(i = 0; i < 20; i++)vocab[x].c[i]=word[i];word[i]='\0';Lcd_DspAscII8x16(15,40,BLUE,vocab[x].c);x++;}elsex=15;//Lcd_DspAscII8x16(15,45,BLUE,word);for(i = 0; i < 20; i++)word[i]='\0';}break;case 15://Lcd_Draw_Box(10,40,310,80,GREEN);break;}if(num!=0&&counter!=0){switch(3*(num-1)+counter-1){case 0:bbyte='a';break;case 1:bbyte='b';break;case 2:bbyte='c';break;case 3:bbyte='d';break;case 4:bbyte='e';break;case 5:bbyte='f';break;case 6:bbyte='g';break;case 7:bbyte='h';break;case 8:bbyte='i';break;case 9:bbyte='j';break;case 10:bbyte='k';break;case 11:bbyte='l';break;case 12:bbyte='m';break;case 13:bbyte='n';break;case 14:bbyte='o';break;case 15:bbyte='p';break;case 16:bbyte='q';break;case 17:bbyte='r';break;case 18:bbyte='s';break;case 19:bbyte='t';break;case 20:bbyte='u';break;case 21:bbyte='v';break;case 22:bbyte='w';break;case 23:bbyte='x';break;case 24:bbyte='y';break;case 25:bbyte='z';break;case 26:bbyte='y';break;}num=0;counter=0;if(m==0){word[wordIndex]=bbyte; wordIndex++;//n+=10;}Lcd_DspAscII8x16(15,210,BLUE,word);// Uart_Printf("Key is:%x \r",input_char);}}/****************************************************************************** **************** name: key_read* func: read key value* para: none* ret: key value, -1 -- error* modify:* comment:******************************************************************************* *************/inline int key_read(){int value;char temp;/* read line 1 */temp = *(keyboard_base+0xfd);/* not 0xF mean key down */if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 )value = 3;else if( (temp&0x2) == 0 )value = 2;else if( (temp&0x4) == 0 )value = 1;else if( (temp&0x8) == 0 )value = 0;while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // releasetemp = *(keyboard_base+0xfd);return value;}/* read line 2 */temp = *(keyboard_base+0xfb);/* not 0xF mean key down */if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 )value = 7;else if( (temp&0x2) == 0 )value = 6;else if( (temp&0x4) == 0 )value = 5;else if( (temp&0x8) == 0 )value = 4;while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // release temp = *(keyboard_base+0xfb);return value;}/* read line 3 */temp = *(keyboard_base+0xf7);/* not 0xF mean key down */if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 )value = 0xb;else if( (temp&0x2) == 0 )value = 0xa;else if( (temp&0x4) == 0 )value = 9;else if( (temp&0x8) == 0 )value = 8;while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // release temp = *(keyboard_base+0xf7);return value;}/* read line 4 */temp = *(keyboard_base+0xef);/* not 0xF mean key down */if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 )value = 0xf;else if( (temp&0x2) == 0 )value = 0xe;else if( (temp&0x4) == 0 )value = 0xd;else if( (temp&0x8) == 0 )value = 0xc;while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // releasetemp = *(keyboard_base+0xef);return value;}return -1;}/****************************************************************************** **************** name: Eint4567Isr* func:* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Eint4567Isr(void){unsigned char which_int;Uart_Printf("\n SB2 or SB3 had pressed and light LED.");which_int=rEXTINTPND;rEXTINTPND=0xf; //clear EXTINTPND reg.rI_ISPC=BIT_EINT4567; //clear pending_bitif(which_int == 4) // SB2{Led_Display(0x0);Led_Display(0x1);}else if(which_int == 8) // SB3{Led_Display(0x0);Led_Display(0x2);}}(2)LCD模块流程图:开LCD初显示开机显示操作结束源代码:/****************************************************************************** **************** File:lcd.c* Author: embest* Desc: LCD control and display functions* History:******************************************************************************* **************//*--- include files ---*/#include "lcd.h"//#include "bmp.h"#include "44b.h"/*--- global variables ---*/INT32U aLcdActiveBuffer[LCD_YSIZE][LCD_XSIZE/4];/*--- extern variables ---*/extern const INT8U aucTempBitmap[][76800];/*--- function code ---*//****************************************************************************** **************** name: Lcd_Init()* func: Initialize LCD Controller* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Init (void){rDITHMODE=0x12210;rDP1_2 =0xa5a5;rDP4_7 =0xba5da65;rDP3_5 =0xa5a5f;rDP2_3 =0xd6b;rDP5_7 =0xeb7b5ed;rDP3_4 =0x7dbe;rDP4_5 =0x7ebdf;rDP6_7 =0x7fdfbfe;// disable,8B_SNGL_SCAN,WDL Y=16clk,WLH=16clk,rLCDCON1=(0x0)|(2<<5)|(MV AL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<< 12);// LINEBLANK=10 (without any calculation)rLCDCON2=(LINEV AL)|(HOZV AL_COLOR<<10)|(10<<21);rLCDCON3=0;// 256-color, LCDBANK, LCDBASEUrLCDSADDR1= (0x3<<27) | ( ((unsigned int)aLcdActiveBuffer>>22)<<21 ) | M5D((unsigned int)aLcdActiveBuffer>>1);rLCDSADDR2= M5D((((unsigned int)aLcdActiveBuffer+(SCR_XSIZE*LCD_YSIZE))>>1)) | (MV AL<<21);rLCDSADDR3= (LCD_XSIZE/2) | ( ((SCR_XSIZE-LCD_XSIZE)/2)<<9 );//The following value has to be changed for better display.rREDLUT =0xfdb96420; // 1111 1101 1011 1001 0110 0100 0010 0000rGREENLUT=0xfdb96420; // 1111 1101 1011 1001 0110 0100 0010 0000rBLUELUT =0xfb40; // 1111 1011 0100 0000rLCDCON1=(0x1)|(2<<5)|(MV AL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<< 12);// rPDATE=rPDATE&0x0e;rPDATE=0xfe;Lcd_Clr();}/****************************************************************************** **************** name: Lcd_Clr()* func: clear LCD screen* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Clr(void){INT32U i;INT32U *pDisp = (INT32U*)aLcdActiveBuffer;for (i = 0; i < (SCR_XSIZE * SCR_YSIZE / 4); i++){*pDisp++ = ALLWHITE;}}/****************************************************************************** **************** name: LcdClrRect()* func: fill appointed area with appointed color* para: usLeft,usTop,usRight,usBottom -- area's rectangle acme coordinate* ucColor -- appointed color value* ret: none* modify:* comment: also as clear screen function******************************************************************************* **************/void LcdClrRect(INT16 usLeft, INT16 usTop, INT16 usRight, INT16 usBottom, INT8U ucColor) {INT32U i, j;INT8U *pDisp = (INT8U*)aLcdActiveBuffer;for(i=usTop;i<=usBottom;i++){for(j=usLeft;j<=usRight;j++){LCD_PutPixel(j, i, ucColor);}}}#ifdef MON_LCD/****************************************************************************** **************** name: LcdClrRect()* func: fill appointed area with appointed color* para: usLeft,usTop,usRight,usBottom -- area's rectangle acme coordinate* ucColor -- appointed color value* ret: none* modify:* comment: also as clear screen function******************************************************************************* **************/void LcdClrRect(INT16 usLeft, INT16 usTop, INT16 usRight, INT16 usBottom, INT8U ucColor) {INT16 i=0;INT16 k,l;INT16 m;INT32U ulColor = (ucColor << 28) | (ucColor << 24) | (ucColor << 20) | (ucColor << 16) |(ucColor << 12) | (ucColor << 8) | (ucColor << 4) | ucColor;if((usRight-usLeft)<=8){for(i=usTop;i<=usBottom;i++){for(m=usLeft;m<=usRight;m++){LCD_PutPixel(m, i, ucColor);}}return;}if((usLeft%8)==0)k=usLeft;else{k=(usLeft/8)*8+8;}if(( usRight%8)==0)l= usRight;else{l=( usRight/8)*8;}for(i=usTop;i<=usBottom;i++){for(m=usLeft;m<=(k-1);m++){LCD_PutPixel(m, i, ucColor);}for(m=k;m<l;m+=8){(*(INT32U*)(aLcdActiveBuffer + i * SCR_XSIZE / 2 + m / 2)) = ulColor;}for(m=l;m<=usRight;m++){LCD_PutPixel(m, i, ucColor);}}}#endif/****************************************************************************** **************** name: Lcd_Draw_Box()* func: Draw rectangle with appointed color* para: usLeft,usTop,usRight,usBottom -- rectangle's acme coordinate* ucColor -- appointed color value* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Draw_Box(INT16 usLeft, INT16 usTop, INT16 usRight, INT16 usBottom, INT8UucColor){Lcd_Draw_HLine(usLeft, usRight, usTop, ucColor, 1);Lcd_Draw_HLine(usLeft, usRight, usBottom, ucColor, 1);Lcd_Draw_VLine(usTop, usBottom, usLeft, ucColor, 1);Lcd_Draw_VLine(usTop, usBottom, usRight, ucColor, 1);}/****************************************************************************** **************** name: Lcd_Draw_Line()* func: Draw line with appointed color* para: usX0,usY0 -- line's start point coordinate* usX1,usY1 -- line's end point coordinate* ucColor -- appointed color value* usWidth -- line's width* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Draw_Line(INT16 usX0, INT16 usY0, INT16 usX1, INT16 usY1, INT8U ucColor, INT16U usWidth){INT16 usDx;INT16 usDy;INT16 y_sign;INT16 x_sign;INT16 decision;INT16 wCurx, wCury, wNextx, wNexty, wpy, wpx;if( usY0 == usY1 ){Lcd_Draw_HLine (usX0, usX1, usY0, ucColor, usWidth);return;}if( usX0 == usX1 ){Lcd_Draw_VLine (usY0, usY1, usX0, ucColor, usWidth);return;}usDx = abs(usX0 - usX1);usDy = abs(usY0 - usY1);if( ((usDx >= usDy && (usX0 > usX1)) ||((usDy > usDx) && (usY0 > usY1))) ){GUISWAP(usX1, usX0);GUISWAP(usY1, usY0);}y_sign = (usY1 - usY0) / usDy;x_sign = (usX1 - usX0) / usDx;if( usDx >= usDy ){for( wCurx = usX0, wCury = usY0, wNextx = usX1,wNexty = usY1, decision = (usDx >> 1);wCurx <= wNextx; wCurx++, wNextx--, decision += usDy ) {if( decision >= usDx ){decision -= usDx;wCury += y_sign;wNexty -= y_sign;}for( wpy = wCury - usWidth / 2;wpy <= wCury + usWidth / 2; wpy++ ){LCD_PutPixel(wCurx, wpy, ucColor);}for( wpy = wNexty - usWidth / 2;wpy <= wNexty + usWidth / 2; wpy++ ){LCD_PutPixel(wNextx, wpy, ucColor);}}}else{for( wCurx = usX0, wCury = usY0, wNextx = usX1,wNexty = usY1, decision = (usDy >> 1);wCury <= wNexty; wCury++, wNexty--, decision += usDx ) {if( decision >= usDy ){decision -= usDy;wCurx += x_sign;wNextx -= x_sign;}for( wpx = wCurx - usWidth / 2;wpx <= wCurx + usWidth / 2; wpx++ ){LCD_PutPixel(wpx, wCury, ucColor);}for( wpx = wNextx - usWidth / 2;wpx <= wNextx + usWidth / 2; wpx++ ){LCD_PutPixel(wpx, wNexty, ucColor);}}}}/****************************************************************************** **************** name: Lcd_Draw_HLine()* func: Draw horizontal line with appointed color* para: usX0,usY0 -- line's start point coordinate* usX1 -- line's end point X-coordinate* ucColor -- appointed color value* usWidth -- line's width* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Draw_HLine(INT16 usX0, INT16 usX1, INT16 usY0, INT8U ucColor, INT16U usWidth){INT16 usLen;if( usX1 < usX0 ){GUISWAP (usX1, usX0);}while( (usWidth--) > 0 ){usLen = usX1 - usX0 + 1;while( (usLen--) > 0 ){LCD_PutPixel(usX0 + usLen, usY0, ucColor);}usY0++;}}/****************************************************************************** **************** name: Lcd_Draw_VLine()* func: Draw vertical line with appointed color* para: usX0,usY0 -- line's start point coordinate* usY1 -- line's end point Y-coordinate* ucColor -- appointed color value* usWidth -- line's width* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Draw_VLine (INT16 usY0, INT16 usY1, INT16 usX0, INT8U ucColor, INT16U usWidth){INT16 usLen;if( usY1 < usY0 ){GUISWAP (usY1, usY0);}while( (usWidth--) > 0 ){usLen = usY1 - usY0 + 1;while( (usLen--) > 0 ){LCD_PutPixel(usX0, usY0 + usLen, ucColor);}usX0++;}}/*--- extern variables ---*/extern INT8U g_auc_Ascii8x16[];/****************************************************************************** **************** name: Lcd_DspAscII8x16()* func: display 8x16 ASCII character string* para: usX0,usY0 -- ASCII character string's start point coordinate* ForeColor -- appointed color value* pucChar -- ASCII character string* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_DspAscII8x16(INT16U x0, INT16U y0, INT8U ForeColor, INT8U * s){INT16 i,j,k,x,y,xx;INT8U qm;INT32U ulOffset;INT8 ywbuf[16],temp[2];for( i = 0; i < strlen((const char*)s); i++ ){if( (INT8U)*(s+i) >= 161 ){temp[0] = *(s + i);temp[1] = '\0';return;}else{qm = *(s+i);ulOffset = (INT32U)(qm) * 16; //Here to be changed tomorrowfor( j = 0; j < 16; j ++ ){ywbuf[j] = g_auc_Ascii8x16[ulOffset + j];}for( y = 0; y < 16; y++ ){for( x = 0; x < 8; x++ ){k = x % 8;if( ywbuf[y] & (0x80 >> k) ){xx = x0 + x + i*8;LCD_PutPixel(xx, y + y0, (INT8U)ForeColor);}}}}}}/*--- extern variables ---*/extern INT8U g_auc_Ascii6x8[];#define XWIDTH 6/****************************************************************************** **************** name: Lcd_DspAscII6x8()* func: display 6x8 ASCII character string* para: usX0,usY0 -- ASCII character string's start point coordinate* ForeColor -- appointed color value* pucChar -- ASCII character string* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_DspAscII6x8(INT16U usX0, INT16U usY0,INT8U ForeColor, INT8U* pucChar) {INT32U i,j;INT8U ucTemp;while( *pucChar != 0 ){for( i=0; i < 8; i++ ){ucTemp = g_auc_Ascii6x8[(*pucChar) * 8 + i];for( j = 0; j < 8; j++ ){if( (ucTemp & (0x80 >> j)) != 0 ){LCD_PutPixel(usX0 + i, usY0 + 8 - j, (INT8U)ForeColor);}}}usX0 += XWIDTH;pucChar++;}}#ifndef Eng_v/****************************************************************************** **************** name: Lcd_DspHz16()* func: display chinese character string in 16x16 dot array* para: usX0,usY0 -- ASCII character string's start point coordinate* ForeColor -- appointed color value* pucChar -- ASCII character string* ret: none* modify:* comment:******************************************************************************* **************/extern const INT8U g_auc_HZK16[];void Lcd_DspHz16(INT16U x0, INT16U y0, INT8U ForeColor, INT8U *s){INT16 i,j,k,x,y,xx;INT8U qm,wm;INT32U ulOffset;INT8 hzbuf[32],temp[2];for( i = 0; i < strlen((const char*)s); i++ ){if( ((INT8U)(*(s+i))) < 161 ){temp[0] = *(s+i);temp[1] = '\0';break;}else{qm = *(s+i) - 161;wm = *(s + i + 1) - 161;ulOffset = (INT32U)(qm * 94 + wm) * 32;for( j = 0; j < 32; j ++ ){hzbuf[j] = g_auc_HZK16[ulOffset + j];}for( y = 0; y < 16; y++ ){for( x = 0; x < 16; x++ ){k = x % 8;if( hzbuf[y * 2 + x / 8] & (0x80 >> k) ){xx = x0 + x + i * 8;LCD_PutPixel( xx, y + y0, (INT8U)ForeColor);}}}i++;}}}#endif/****************************************************************************** **************** name: Lcd_Test()* func: LCD test function* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Test(void){int i, j;Uart_Printf("\n LCD display Test Example(please look at LCD screen)\n");/* initial LCD controller */Lcd_Init();/* clear screen */Lcd_Clr();/* draw rectangle pattern */#ifdef Eng_v // english versionLcd_DspAscII8x16(10,0,BLUE,"Embest S3CEV40");#elseLcd_DspAscII8x16(100, 50, RED, "2009073 20091989 ");Lcd_DspHz16(155, 70, RED, "马一鸣");Lcd_DspAscII8x16(100, 90, BLACK, "2009073 20091993 ");Lcd_DspHz16(155, 110, BLACK, "邓家坤");Lcd_DspAscII8x16(100, 130, BLUE, "2009073 20092022 ");Lcd_DspHz16(155, 150, BLUE, "蒋赵睿");DelayMs(500);Lcd_DspHz16( 100, 100, BLUE, "欢迎使用电子词典");Lcd_DspAscII8x16(100, 50, WHITE, "2009073 20091989 ");Lcd_DspHz16(155,70, WHITE, "马一鸣");Lcd_DspAscII8x16(100, 90, WHITE, "2009073 20091993 ");Lcd_DspHz16(155, 110, WHITE, "邓家坤");Lcd_DspAscII8x16(100, 130, WHITE, "2009073 20092022 ");Lcd_DspHz16(155, 150, WHITE, "蒋赵睿");DelayMs(500);Lcd_Clr();Lcd_DspHz16(15,15,BLUE,"电子词典");#endif//Lcd_DspAscII8x16(10,24,GREEN-55,"ShenZhen Embest Info&Tech Co.,LTD");Lcd_Draw_Box(5,30,115,180,GREEN);/*显示窗口*/Lcd_Draw_Box(5,190,75,230,GREEN);/*输入窗口*/Lcd_Draw_Box(75,190,115,230,GREEN);/*搜索键*/Lcd_Draw_Box(120,30,165,75,GREEN);/*abc*/Lcd_Draw_Box(170,30,215,75,GREEN);/*def*/Lcd_Draw_Box(220,30,265,75,GREEN);/*ghi*/Lcd_Draw_Box(270,30,315,75,GREEN);/*jkl*/Lcd_Draw_Box(120,80,165,125,GREEN);/*mno*/Lcd_Draw_Box(170,80,215,125,GREEN);/*pqr*/Lcd_Draw_Box(220,80,265,125,GREEN);/*stu*/Lcd_Draw_Box(270,80,315,125,GREEN);/*vwx*/Lcd_Draw_Box(120,130,165,175,GREEN);/*yz*/Lcd_Draw_Box(170,130,215,175,GREEN);/*选择1*/Lcd_Draw_Box(220,130,265,175,GREEN);/*选择2*/Lcd_Draw_Box(270,130,315,175,GREEN);/*选择3*/Lcd_Draw_Box(120,180,165,225,GREEN);/*back*/Lcd_Draw_Box(170,180,215,225,GREEN);/*ent*/Lcd_Draw_Box(220,180,265,225,GREEN);/*save*/Lcd_Draw_Box(270,180,315,225,GREEN);/* output ASCII symbol */Lcd_DspAscII6x8(90,210,BLACK,"scan");Lcd_DspAscII6x8(140,50,BLACK,"abc");Lcd_DspAscII6x8(190,50,BLACK,"def");Lcd_DspAscII6x8(240,50,BLACK,"ghi");Lcd_DspAscII6x8(290,50,BLACK,"jkl");Lcd_DspAscII6x8(140,100,BLACK,"mno");Lcd_DspAscII6x8(190,100,BLACK,"pqr");Lcd_DspAscII6x8(240,100,BLACK,"stu");Lcd_DspAscII6x8(290,100,BLACK,"vwx");Lcd_DspAscII6x8(140,150,BLACK,"yz");Lcd_DspAscII6x8(190,150,BLACK,"ch1");Lcd_DspAscII6x8(240,150,BLACK,"ch2");Lcd_DspAscII6x8(290,150,BLACK,"ch3");Lcd_DspAscII6x8(140,200,BLACK,"back");Lcd_DspAscII6x8(190,200,BLACK,"ent");Lcd_DspAscII6x8(240,200,BLACK,"save");Lcd_DspAscII6x8(290,200,BLACK," ");/*for (j = 0; j < 1000000 * 5; j++);while (1){for (i = 0; i < 5; i++){BitmapView320x240x256((INT8U*)(aucTempBitmap[i]));for (j = 0; j < 1000000 * 5; j++);}}*/}/****************************************************************************** **************** name: Lcd_Test_board()* func: LCD test function for board all test* para: none* ret: none* modify:* comment:******************************************************************************* **************/void Lcd_Test_board(void){int i, j;/* initial LCD controller */Lcd_Init();/* clear screen */Lcd_Clr();/* draw rectangle pattern */#ifdef Eng_v // english versionLcd_DspAscII8x16(10,0,BLUE,"Embest S3CEV40 ");#elseLcd_DspHz16(10,10,BLUE,"英蓓特三星实验平台");#endif。

相关文档
最新文档