嵌入式课程设计电子词典硬件设计
嵌入式课程设计报告完整版

目录前言 (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) 项目总结和经验总结五、结论本手册通过对嵌入式系统硬件设计技术的系统梳理和深入讲解,希望读者能够全面了解并掌握这一领域的核心知识和实践技巧。
嵌入式系统的硬件设计是嵌入式产品开发中至关重要的一环,只有掌握了正确的设计技术和方法,才能保证产品的高性能、稳定性和可靠性。
希望本手册能为读者在嵌入式硬件设计领域提供有益的参考和指导。
注:所标记的小节符号只是为了文章结构的清晰,实际正文中不需要出现。
嵌入式系统硬件设计样本

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语言课程设计之电子词典

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课程设计中,我们需要实现一个电子词典应用程序,满足以下需求: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程序功能相结合的设计项目。
他的设计思路如下: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电子词典软件开发系、部:计算机与信息科学系组成员:指导教师:职称专业:计算机科学与技术班级:计本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融合进程和我国传统产业结构升级的加速,人们对设备越来越高的应用需要已经无法满足当前和未来高性能的应用与发展需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。