由LCD12864初探嵌入式菜单设计(完全资料)

由LCD12864初探嵌入式菜单设计(完全资料)
由LCD12864初探嵌入式菜单设计(完全资料)

由LCD12864初探嵌入式系统设计

--菜单设计

声明:本文来自互联网,由于年代久远未能找到出处,现整理如下希望大家喜欢,如有侵权请联系 真的好想你QQ: 1320249827

前言往往要解释写文章的动机和原因,同时给作者一个正题以外灌水的机会——本文也不例外。

1、为什么我要写这篇文章。

不可否认,我的确受到了Armok 的利诱影响,但是最近发生的一些事情却使我觉得写这篇文章是非常有必要的。在OurA VR 上看到很多版本的LCD 驱动程序,几乎每一个版本都只是简单的将全部或部分的显示数据Cover 到LCD 的显存上,完成一个字或者是图片的显示就等着大家喊“牛”了。其实要走的路还很远。对一个工程项目来说,增加n 多的成本来提供一个点阵屏作为用户接口,不是一两幅欢迎图片和Now Loading...Please Standy By 的提示能糊弄的过去的。用户希望你提供的是友好的图形界面GUI ,虽然比不过XP 和Apple 的华丽,但是由各种基本图形组成的窗口界面还是需要的。

当我们真的想实现一个图形界面的时候,很快就会发现,我们需要的不仅仅是一个被喊了“牛”的初级驱动,我们需要的是一个图形引擎——一个自定义的图形函数包,没有DirectX 的华丽,但是能绘制一个任意的直线或是矩形就够了——结果往往发现无所适从。这个时候,我们遇到的就是一个门槛,真正的嵌入式工程师和一个业余电子爱好者之间的门槛。

2、我如何写这篇文章

考虑到本人老王卖瓜的习惯,所以请大家一定无比在吃饭前看本人写的技术文章,同时保持耐心等待续集(绝对有续集)。本人现单身,个人问题众多,学习任务重,所以可能有时候写文章象羊拉屎,不对大家

胃口,请见谅。 硬件平台:A VR Mega8级

LCD : 不带字库的12864

软件平台:ICC

规范: 符合基本的C 编程规范

3、何时开始正文

其实,本文应该算是计算机图形学的一个具体分支,所以,计算机图形学的基本要求就是本文的基本要求,考虑到各位兄弟的胃口,我就多罗嗦下。

h t

t p ://

h i

.b a i d u .c

o m

/b a l l 648500361

1、位操作

向LCD12864这种二值屏幕,我们习惯于用1个字节表示连续的8个点,1对应对应位被点亮,0表示不亮,所以对图形的操作最基本的手段就是位操作。

复习下,常用的位操作,假设Dis 表示某一个现存地址的内容 Dis = Dis~ 黑白颠倒

Dis &= ~(1<

Dis ^= (1<

2、作图原理

点是一切光栅显示设备的基本要素,所有的操作都是以点为基础的,所以学会如何利用点构成线、圆、填充就是必须掌握的——几何不能太差哦。

还有,结合屏幕的硬件特点,对算法进行优化的一些方法也是需要掌握的。比方说,如何填充之类的……后面会针对LCD12864作详细介绍的。

3、人机交互学

虽然很多人都没有实实在在学过这门功课,但是多多少少对于界面应该怎样有些许了解。如何利用手中的基本操作函数做出一些特效,如何安排窗体,如何绘制图形界面的一些基本元素如按钮,甚至如何显示汉字,都是人际交互学需要教会你的——总之,如果你没有学过这门课程,你的产品只有你自己用的话——跟着感觉走,没错的。

4、最最重要的物质基础 你要掌握一种单片机,掌握一种点阵屏幕。

A VR Inside

Not Only For LCD12864

前面已经说过,对于栅格显示设备来说,点是一切图形的基础,说白了,不会在液晶屏幕的任意位置随

心所欲的画点就不能说你已经掌握了某种液晶屏幕的使用了。事实上,根据笔者的经验,尝试画点往往能暴露出很多问题。就拿LCD12864来说吧,一段时间,笔者总是发现,在片切换的地方有一点点错误……

在说明如何画点之前先说明一个概念:显示缓冲区。

所谓显示缓冲区,顾名思义,就是显示数据的一个缓冲地带。一般情况下,我们绘图也是直接对这块缓冲区域进行操作的。

很多朋友就要提问了:我们为什么不直接对屏幕操作呢?

事实上,LCD 本身存在一块显示存储器,也可以被认为是一个显示缓存,直接写在这个存储器的数据并非直接显示出来,而多半需要一个显示指令来影射一下。我们有时候也通过这种类似的技术来实现很大的图片的显示——先画好,再拿给大家看,让人以为你是一下就画好的,当然如果你刻意需要那种图片被“画”出来的效果,则不在讨论之列。问题就在于,LCD 是片外资源,对其存储器的访问可以被认为是对片外存

h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

储器的访问,其速度显然没有对片内SRAM 的操作速度要快。如果我们使用那种常用的串行方式来作图(所谓串行方式作图,就是绘图指令的执行和系统的其他操作时串行的,指令不完成,其它操作就不回被执行),那么对于一些实时性要求高的系统来说就会造成重大隐患——甚至是不符合要求的;如果开辟一段片内存储空间和LCD 的存储器一一对应,在相同的时间段内,花费相同的资源来保持着两个存储空间的一致性,那么就可以保证实时系统的稳定和可靠,保证画面显示的正常(因为允许跳帧嘛^_^)。这就是我们为什么需要另外在片内选取一个显示缓冲区的原因。

以后,我们的操作都是针对显示缓冲区的。显示缓冲区将成为一个概念,无论这个缓冲区位于SRAM 内还是LCD 内部。比方说,我们需要一个低成本的游戏机——如做一个贪食蛇游戏机送给老师作为课程设计,或者送给小侄子,那么,M8甚至是M48成为首选,问题是,M8绝对无法开辟出一个8 * 128 = 1K 大小的数组,所以,这个时候,认定LCD 的片内存储器作为显示缓冲区就是不二的选择——好在贪食蛇速度太快了也没有办法玩哈。

绕了这么多的弯子,究竟如何画点呢?我还想多补充一个原因,关于,为什么需要显示缓冲区,由于点阵屏幕使用的是1个字节来表示8个点的,如果你想使得一个字节中的某一个点被操作而不影响别的点,你起码要知道原来这个位置是什么内容,对于有些使用595级联的LCD 设备来说,无法直接从LCD 读取现存数据,所以开辟一个缓冲区,从中获得信息加以加工以后再放回去,是这种设备处理显示图形的唯一方法——当然我们没有那么惨,但是从LCD 中获取所需点所在字节的内容还是必须的,不然你画一个点就会破坏一条线上所有的数据。 好的,那么我们实际上已经明确了如何去画一个点。

首先,根据用户给出的坐标计算出所要画的点所在现存内的地址偏移量; 然后,我们读出该地址内的数据;

再次,根据用户所需画点的类型(擦除、画点、反相点)来进行相应的操作获得一个新的数据;

最后,将该数据写回原来的地址。

---------------------------------------------

LCD12864补充知识

1、关于坐标系。很多人,包括笔者,一开始都看不懂LCD12864的内存影射方式,感觉X 、Y 似乎不是那么回事。后来才发现,只要把屏幕竖着放一切就好懂了。X 还是横轴,Y 还是竖轴……但是这显然不符合我们的习惯,我们习惯于长的那个边作为横轴,所以需要一点点坐标之间的转换。

h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

假设输入的是正常习惯的坐标 X,Y DX DY 就是LCD 上的坐标,那么转换关系是

char DX = (Y >> 3); //计算出属于哪个字节

char BX = Y - (DX << 3); //属于该字节的哪个位

char DY = X;

2、读取12864的数据的时候,一定要注意,E 信号要在一个下降延之后持续拉高,然后才能正常独处数据;假设直接拉高,的确也能读出数据,但是,等着抓头皮,发帖子“[跪求]大侠帮忙关于12864——请使用明确的大标题……”^_^

---------------------------------------------

废话少说(说的不少了),看源代码:

# define LCD12864_Graphic_Draw 0x01 # define LCD12864_Graphic_Clear 0x00 # define LCD12864_Graphic_Not 0x02

……

void LCD12864Draw(char X,char Y ,char Type) {

char DX = (Y >> 3); //计算出属于哪个字节

char BX = Y - (DX << 3); //计算出属于字节哪一位

char TempData = 0;

h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

LCD12864_ChooseBoth;

setX(DX);

if (X > 63) {

LCD12864_ChooseCS2; X -= 64; } else {

LCD12864_ChooseCS1; } setY(X); TempData = getLCD12864Data();

switch (Type) {

case LCD12864_Graphic_Clear:

TempData &= ~(1<

h t t p ://

h i .b a i d u .c

o m

/b a l l 648500361

case LCD12864_Graphic_Not:

TempData ^= (1 << BX); break; default:

TempData |= (1 << BX); }

setY(X);

sendDataToLCD(TempData); } 特别说明一下,关于贪食蛇范例的问题,这篇文章里面只会简单得提及一下。

作为嵌入式系统开发的一个范例,我会另外开一个帖子详细说明开发过程。

这个范例将作为介绍嵌入式系统开发方法的一个很好的例子,用于解释一个系统和一段表示您调通了某一个功能的代码之间有什么区别,同时也将介绍嵌入式开发系统的几种模式(超级循环、调度器),顺便侃一

侃时间驱动的系统RTOS (Real Time Operation System 实时操作系统)和RTS (Real Time System )实时系统。

— 一线天 —

[本章导读]

直线由点构成,更精确的说,直线是由靠近这条线的像素构成。这就引出一个问题,究近那些点算是靠近一条直线;哪些点不算是靠近一条直线,这必须使用一种算法作为依据。实际上,图形学算法和纯几何算法还是有很大差别的,问题就出在一个离散化上面,说白了,你画出的直线很可能是一组波动厉害的锯齿象素群而不是一条看起来有规则变化的直线。

当然,太过于理论的东西对我们是没有多少实际价值的。下面,我就介绍两种常见的画线思路,一种就是最容易被想到的直线方程计算的方法,另外一种则是被称为布兰森汉姆(Bresenham)的计算机图形学主流算法。

在介绍完这两种算法以后,我们会针对LCD12864的硬件结构为例子,介绍,具体算法的实现和优化。 h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

首先,我们从最基本的数学算法说起。

如果我们使用公式y = kx + b 来作为绘图的依据,那么就需要分3种情况:水平直线,斜率为0;垂直直线,斜率为无穷大(或者说k 不存在);普通直线。

假设我们已经知道直线的起始坐标点(Xbegin,Ybegin)和终点(Xend,Yend),x,y ,是当前的坐标点,如果我们通过增加x 反算出y 的方法的话,这个公式就可以很容易转换为伪代码。 LineMode 为直线的类型:水平,垂直,普通 if Xbegin == Xend then LineMode = 水平 elseif Ybegin = Yend then LineMode = 垂直 else k = (Yend - Ybegin) / (Xend - Xbegin)

switch LineMode case 水平

for x = Xbegin to Xend 在x,Ybegin 处画点 case 垂直

for y = Ybegin to Yend 在Ebegin,y 处画点 default:

for x = Xbegin to Xend {

y = kx + b 在x,y 处画点 }

非常简单,不是么?注意,大部分情况下,这个算法存在很多乘法和除法,对单片机系统来说,可能不是那么合适哦。画出的点也基本令人满意。 有了上面的代码垫底,我想很多人都可以放心了,因为大不了跑一个高速晶振也能快速的画出直线,否

则你还需要耐心的阅读下面的算法。

首先,我们给出这个算法的伪代码。 在(x1,y1)到(x2,y2)之间画一条直线

dx 是x 到终点横坐标的距离 dy 是y 到终点纵坐标的距离 ix 是dx 的绝对值 iy 是dy 的绝对值

inc 是dx 和dy 中较大的那个

plot 是是否要画一个点的标志位,boolean 变量

plotx 是当前点所在的横坐标 ploty 是当前点所在的纵坐标

plotx = x1 ploty = y1

h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

x = 0 y = 0

在 plotx,ploty 画一个点——起点

for i = 0 to inc 增量1 x += ix y += iy plot = false

if x > inc then plot = true x -= inc

if dx > 0 then plotx ++ if dx < 0 then plotx --

if y > inc then plot = true y -= inc

if dy > 0 then ploty ++ if dy < 0 then ploty --

if plot == true then 在(plotx,ploty )处画点

这就是计算机图形学中流行的布兰森汉姆(Bresenham)算法,他的意图就是采用离散的整数增量来代替斜

率增量计算,学习这个算法,最好的方法不是看多少理论,而是按照上面的伪代码自己完成一条直线的绘制工作,你就能心领神会了——不是小弟我偷懒。

所有的计算都是简单得整数计算,代码效率自然不用小弟我罗嗦哈。

俗语说,巧妇难为无米之炊,有了点再有了直线算法,距离窗体的绘制不远了,But Stop! “没有最好,但求更好”这是我们做系统开发应该谨记的一条准则。

有了上面的算法还不够,毕竟,他们只是一些伪代码,针对不同的屏幕——准确地说,是针对不同的显存映射方式,有不同的算法优化方法。究竟有哪些优化方法暂且不论,其实他们都是一个原理,我想先解释一下,为什么我们需要优化算法,或者说,我们需要先弄清楚是什么地方产生了冗余。

还记得黑白点阵屏幕的显存映射方式么?它简单的使用1个字节表示8个坐标点,同时这1个字节是沿着屏幕的短边方向映射的,所以当我们想画一条垂直的直线时,对于每一个牵涉到的字节都有可能要重复的操作8次之多,这种操作不是简单的画线,而是要先读取再计算最后再写这样的复合操作,重复8次只是为了把整个字节变黑显然是一种超级不可容忍的冗余——大家都知道,直接把这个字节读取一次,计算一次,再写一次就完成了。基于这种思想,我们需要把这种特殊情况单独提取出来,重新优化代码……具体优化代码就留给大家做作业了哈。

同时补充一下,这样做,不是只对画线作了优化,事实上,在后面,矩形的填充里面,这种优化会极大地提高速度,因为填充的本质就是画线(点)……

h t t p ://

h i .b a i d u .c

o m

/b a l l 648500361

------------------------

例子程序:(这里就不附送了,为了大家不偷懒哈,最后一起会都给大家的) — Windows 的世界 —

[本章导读]

有一种技术被众人传说为GUI ,神秘高深的程度不可言表,就连书店里面的电脑书籍封面上一旦印刷上这几个字就会身价百倍——当然,也不乏像笔者这样买回去以后大呼上当的。我们今天不说桌面系统(Desktop System ),笔者只是想戳穿一下GUI 的虚伪表面,让书店生意冷淡下——方解心头之恨。 那么什么是GUI 呢?就是图形界面接口(Graphic User Interface),说得通俗就是,一个方便人们和电脑打交道的傻瓜工具。一个简单的道理大家都懂得,文字说不清楚的事情,往往图形和表格能够让人一目了然。所以GUI 对于电脑和人类交往起到一个平台的作用。

说了这么多,我想说明一个问题,就是什么时候我们需要GUI 系统。 1、需要表达的信息和数据相当众多,关系用文字很难表达清楚; 2、本身就存在大量图形的系统; 3、没有任何追求花哨目的的系统开发;

4、用户群体复杂,非固定群体,或者这一群体需要有好清晰的用户界面。

苏东坡写诗文尚且追求让家里的老婆婆能懂得一二,何况我们花费大量心血的嵌入式系统(Embedded System )呢?大部分时候,一个由花哨的窗体和图标组成的窗口远不及一个句请稍候让人心中要坦然的许多。

本章的内容,我们将首先介绍窗体的基本实现方法;然后我们将介绍一种非常适合LCD 系统的美术窗体;最后我们将针对LCD12864举例说明窗体里面的一些实现的细节。

首先,我们来看看一个立体的窗口是如何组成的,请看图片:

这就是一个GUI 系统中经典窗口风格的原理——被放大了N 倍的事实:只不过是一些表现明暗效果的线条和表示窗体轮廓的边框罢了。没有了这些神秘,那么我们如何在LCD12864这样的二值屏幕上面实现这一效果呢?首先,我要说,因人而异,每个人的审美观不同,各有各的设计思路,我只说说我的建议和看法。

因为LCD12864这样的屏幕时二值屏,只有两种颜色,亮或者灭,那么,就无法通过灰度的颜色来表现

h t

t p ://

h i .b a i d u .c

o m

/b

a l l 648500361

窗口的实体,那么一个表现窗口轮廓的方框就是必须的,同时,通过简单的画黑色线条来表现明暗就已经足够了。甚至有些时候,窗口方框可以直接忽略,只要一个表现明暗的黑色线条就可以了。实际上,窗口和按钮是一个同一个东西(从绘图角度来说),当按钮被按下的时候,就改变黑色线条的位置就可以了——Very Easy ,isn`t it?

然而,以我个人的脾气来说,什么样的系统配合什么等级的Interface (接口)。一块使用12864点阵屏幕的图形系统往往使用简单的框框和反相显示的黑色条条就已经能够实现功能而且美观大方了,一个有明暗效果的窗体不仅浪费资源而且,会给用户一个画面拥挤的感觉。 下面我们就简单说一下适用于二值屏幕的一种常用图形界面风格。

不管您相信与否,这种菜单实现仅仅是一个函数多次使用的结果(除了显示汉字的) 我们将使用伪代码的形式写一下这个函数的声明形式:

void BOX(char Xbegin,char Ybegin,char Xend,char Yend,char BoxModel,char FillType)

我们一一来说明一下函数的各个参数: Xbegin 方框左上角横坐标 Ybegin 方框左上角纵坐标 Xend 方框右下角横坐标 Yend 方框右下角纵坐标 BoxModel 画方框的模式 其中 画方框有以下的宏定义表示的模式 # define BoxModel_Draw 0x01 //画边框 # define BoxModel_NoBox 0x03 //无边框 # define BoxModel_Clear 0x00 //画白色边框 # define BoxModel_Not 0x02 //边框反显 FillType 矩形填充模式 其中,矩形填充模式有以下的宏定义 # define FillType_Fill 0x01 //填充黑色 # define FillType_Clear 0x00 //填充白色 # define FillType_Not 0x02 //填充反色 h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

# define FillType_NoFill 0x03 //不填充

为了方便说明图片上的效果是如何实现的,我使用伪代码简单举个例子,同时假设,我们拥有一个函数可以显示汉字Print(char x,char y,"String");

窗体:

Box(2,2,100,64,BoxModel_NoBox,FillType_Clear); //清扫出一片空地 Box(2,2,100,64,BoxModel_Draw,FillType_NoFill); //窗体轮廓 Print(4,4,"标题栏");

Box(3,3,99,22,BoxModel_NoBox,FillType_Not); //反显效果,注意坐标的细节 ……具体如法炮制

说明窗口:

关于说明窗口,我想,我们可以写一个函数了,就像Windows 编程中的控件一样来用。

void Window(char X,char Y ,char Width,char Height) {

Box(X+6,Y+6,X+Width+6,Y+Height+6,BoxModel_NoBox,FillType_Fill); //黑色阴影 Box(X,Y ,Width+X,Height+Y ,BoxModel_NoBox,FillType_Clear); //清扫空地 Box(X,Y ,Width+X,Height+Y ,BoxModel_Draw,FillType_NoFill); //画框框 }

大功告成,是不是很简单啊?^_^

前面说了那么多的废话,所有问题似乎都集中到一个函数Box 的编写上了。那么在LCD12864和其他同类

屏幕上如何实现这个函数呢?我们把这个问题分成两个小的问题来解决:一个是矩形边框的绘制;另外一个问题自然就是填充了。

依然是那句老话,像素点是构成光栅图形的基本元素,如果不考虑速度的问题,那么直接使用画点的方法来实现边框和填充也是毫无问题的,但嵌入式系统中最终要的恰恰就是效率。

首先,我们来说说画外框的问题。还记得我们之前的画线函数么?我想很多人应该都试验成功了吧。同样,我们在这就先不给出源代码了,但是我们需要一个便于交流的函数声明,在这里我就自作主张的规定一个画线函数:

void Line(char Xbegin,char Ybegin,char Xend,char Yend,char LineModel) 同样对应LineModel 我们规定一下宏定义 # define LineModel_Draw 0x01 //画线 # define LineModel_Clear 0x00 //清除直线 # define LineModel_Not 0x02 //反相直线

很显然这些参数对应着原先的画点函数和优化过的画线函数。那么,Box 函数的一个片断就可以写成下面的模式

if (BoxModel == BoxModel_NoBox) {

if (FillType == FillType_NoFill) {

//运行到这里说明我们被程序员耍了……什么不做到这里干什么? return ;

h t t p ://

h i .b a i d u .c

o m

/b a l l 648500361

}

BoxModel = FillType; }

Line(Xbegin,Ybegin,Xend,Ybegin,BoxModel); Line(Xbegin,Ybegin,Xbegin,Yend,BoxModel); Line(Xbegin,Yend,Xend,Yend,BoxModel); Line(Xend,Ybegin,Xend,Yend,BoxModel);

这样我们就完成了边框的绘制,而且显然这个函数由于Line 函数本身就是经过优化的,那么这个函数也可以说是拥有初步速度优化的。

下面,我们来说说简单的矩形填充,关于矩形填充,应该是填充技术中最简单的一种,因为填充对象的形状属性和显存的布局属性具有相似性,所以我们可以略过复杂的边界检测,直接对显存进行填充。废话少说,直接看代码:

//假定前面我们已经声明了一个临时变量n for(n = Xbegin;n<=Xend;n++) { Line(n,Ybegin+1,n,Yend -1 ,FillType); //至于为什么画竖线而不是横线,你们可以考虑下下 }

现在真相大白,也许你突然明白原先几何书上关于“点动成线,线动成面”的道理了吧。哈哈哈哈…… 顺便说一句,这段代码存在明显可以优化的地方,具体是什么呢?大家留作思考题吧。 -------------------------------------------------------- [源代码]:为了大家不偷懒,我就先不具体给出了,大家加油哦。

— 从“壁画”记事到“甲骨文” —

不得不承认,到目前为止,似乎如果我们要想做一个电话号码记事本之类的电子助手已经万事俱备了,但真正开始做的时候才发现,我们还没有教会A VR 如何去写字。如果说,我们前面已经能在LCD 上画出“壁画”的话,那么要想让别人看懂你记录的到底是什么鬼画符还需要一点点关于“甲骨文”的扫盲。事实上,大家约定俗成的固定大小的图片集或其子集就是一个被尊称为字库的神圣典籍。在这个圣经里面记录的是一

种被称之为“字模码”的东西,对于我们,这种信息可能相当抽象,但是借助LCD ,那么字模码就是一个我们能看懂的字符在显存中存在的模式。

关于这些字模码是如何排列的,自古以来就有数不清的模式。终于有一天,一群中国人伴随着新中国站了起来,制定了一个叫做国标的标准(GB),根据这个标准,祖国大地的字模码才有了统一的目录,而查询这个目录的方法已经逐渐被人们所淡忘,吹落那源自电报码的书籍红色封皮上的沧桑,用手轻轻抚摸封皮上的的文字:“区位码”,我们发现,其实他包含了6000个汉字的一级字库其他一些由非常用字组成的多级字库。

在西方,埃尼阿克的故乡,一群依靠技术侵略世界的疯子根据自己半通不同的习惯制定了一个由128个字符组成的交换标准称之为ASCII 码,由于技术大潮的冲击,世界妥协了。 ……

这一切的一切都无法改变字库只不过是图片集和的本质。所以,敢于抵抗强权的人们在自己的领土上坚持着自己的信念——我们称之为“小字库技术”。甚至有些人坚持使用图片记事,那么自然的被视作是“无字库技术”。

世界在前进,即便后来世界技术的格局发生了怎样的变化,即便一些曾经约定的不合理的东西也会作为最底层的协议支持者新世界,就像是乌龟驼着的世界。任何触动这些底层的行为都会受到世界的背叛,所h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

以,抛弃情感上的东西,我们来研究一下ACSII 的构成原理和实现方法。

对不起大家,我写这些东西的目的就是面向初学者。事实上,如各位所说,我并非高手,所以很多地方漏出了类似“内存映射”之类的马脚。这里我只想做一点解释,只有我弄懂了的东西,我才能用通俗的方法和大家解释,我一窍不通的东西就只好原样照搬打肿脸充胖子了。呵呵。还请原谅。事实上,就拿“内存映射”这个问题来说,我使用的大段大段的文字来解释这个概念,因为即便是罗嗦,我也最多只能用“屏幕的一块区域对应内存的一块区域”这样仍然抽象的话语来解释,反而显得我骗稿费一般,所以不如先提出一个名词,把解释溶化在后面的文字中。

本来,开篇就说得很清楚,我写这些东西的目的不是等大家来喊牛,姑妄言之,姑妄听之,水平有限,没有刻意去追求什么文本格式上的东西,自然可能不对大家胃口,我以后注意就是了。但是,说回来,写这些东西的心情和大家写伯克的时候差不多,多半是吐吐心中不吐不快的东西罢了,所以,由着性子,演绎也罢,说明书也罢,文档整理稿也罢,那要看那一阵子我正在看什么书了,如果哪天我不幸开始看小说,来一个欲知后事请听下回分解也说不定。

我的专业本来就是软件工程,所以写出这些文字,非常自然。 3.1 ASCII 字符集

ASCII (American Standard Code for Information InterChange )——美国通用信息交换编码。他是现在流行的众多编码的榜样,虽然使用仅仅7位二进制表示(通常用一个字节表示),但是却是众多编码系统的基础,比方说16位二进制为组成的Unicode 编码,证据就是,只要在ASCII 码前面加9个零就成完成了转换。当然,仍然有不听话的,比方说IBM 老大的EBCDIC 码(大型计算机系统上用的)。

大家都注意到了7位二进制表示的编码显然只能有128个字符的容量,那么,用一个字节256个字符的容量岂不是造成了浪费?于是,现在PC 机上普遍通用的IBM 扩展ASCII 码从128~255开始扩展了128个字符——注意,这128个字符并不是通用的,即便在我们能接触的大部分场合他们都有效,但是记住他们的“非常任理事国”的身份是拥有重大意义的。

比方说,我们的显示系统只需要显示E 文字母和数字还有一些标点符号,那么,干什么要这些无用的字符充数呢?要知道,一个字母存储起来需要至少8*7的点阵(7个字节)啊!事实上,由于几乎所有通用单片机内部都不带有ASCII 字库(字模码),所以,我们必须把他们存储起来,并且还不能打破原有的存储模式,不然通过ASCII 码作为索引我们就找不到他们了。为了完成对字模库的简化,我们需要知道他们的构成方式,然后再考虑如何去获取一个已知的标准字模库,并按照我们设计的方法去简化他……可怜的A VR ,存

储器又要吃紧了。

从古老的教科书上,很容易获得一张ASCII 编码表。因为大家都是搞Embedded System 开发的(为了显示大家工作的高深程度,请允许我掉书袋),所以,这里我更多的要讲述一下ASCII 编码一些不太被人注意的特性,一些只有从二进制角度才容易看出的特性。 1)ASCII 码由7位二进制组成; [6][5][4][3][2][1][0]

2)[6:5]为用来表示ASCII 编码的组分类 0 0 控制字符组(显示不需要显示的东西) 0 1 数字字符和标点符号组 1 0 大写字符和特殊字符 1 1 小写字符和特殊字符

3)只要把大写字母的第6位也就是[5]置位就是现了到小写字母的转换,反之亦然; 4)数字的ASCII 码[3:0]位的值与它要表示的数值相同; 例如: “0” 0x30

h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

“1” 0x31 ……

依照上面的编码规则,ASCII 码的字模码文件存储的方式为: char c; ……

fAddress = c * 8 * 16;//超级简单哈,这是计算机系统上标准8*16的ASCII 字符集 fAddress = c * 8 * 8; //这是计算机系统使用的8*8小字符集

聪明的大家已经知道如何在存储器中获得字模码了吧? 就是访问存储的“基地址+fAddress ”就可以了。

为了便于后面大家实现汉字显示时候的代码移植(回避全角和半角问题),我们使用8*16的大字符集,至于你想使用小字符集,那么就看你的爱好了。 3.2 How to get them ?

这里我们来顺手说说字模码获得的问题。

不可否认,现在网上很多兄弟写的字模制作软件水平之高,已经到了令人叹为观止的地步,只可惜当时我学习字库问题的时候,尚且没有解决温饱,更不用说上网了。而且,这些字模软件无不在客观上支持了字模的“无政府主义”,小字库和无字库技术在一些不恰当的场合也被大量滥用,严重影响了接着写你代码同志的心情……鬼知道原来跳槽的家伙如何定义那该死的字库的,所以,提倡在何时的场合使用标准的字模库还是非常有必要的。

首先说说一种简单的获取字模的方法。

不知道还有多少人记得UCDOS ,中国汉字操作系统的“希望”。金山WPS ,CCED ……https://www.360docs.net/doc/04616207.html, ,这些东西让人难忘啊。我们的字模库很容易从这样具有我国独立知识产权的系统中获得。所有的东西都放在

UCDOS\ 目录下面。我们选取这次需要的文件“ASC16”。顺手说下,汉字库也可以从里面获得“HZK16”。其他的

字模库在 UCDOS\FNT 目录下面。

还有一种BT 的方法可以获得8*8的字库。大家记得BIOS 吧……呵呵,利用TC 写一个中断程序,直接读出来……哈哈。后面有机会我会附上代码,如果我能记得地址的话。

------------------------------------------------------

(本章待续)接下来,我将来聊聊对这些字库减肥。

Gorgon Meducer 来点实际的吧。

我们这些学生都等不急了。在这里读帖子的电子爱好者都不是闲着没事逛逛的。 我来加点东西这是钻石生成图:有大液晶的朋友可以看看。

//**************************************************************************** //测试椭圆的图形驱动函数

//*************************************************************************** //显示渐渐形成的钻石

h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

void test_elli(void) { Uchar i,j; for(j=0;j<0x5;j++) { ClrScr();

for(i=0;i<100;i=i+2) {

ellispeMidpoint(220,120,100,i); // ellispeMidpoint(220,120,i,100); delay_nms(500); } }

}//****************************************************************************** //合并四分椭圆点

//入口参数:中心点xc,yc 和长短轴 rx,ry //*****************************************************************************

void ellipsePlotPoints(int xc,int yc,int x,int y) {

setPixel(xc+x,yc+y); setPixel(xc-x,yc+y); setPixel(xc+x,yc-y); setPixel(xc-x,yc-y); }

//****************************************************************************** //中点椭圆算法

//入口参数:中心点xc,yc 和长短轴 rx,ry

//***************************************************************************** void ellispeMidpoint(int xc,int yc,int rx,int ry) {

int rx2=rx*rx; int ry2=ry*ry; int tworx2=2*rx2; int twory2=2*ry2; int p; int x=0; int y=ry; int px=0; int py=tworx2*y;

void ellipsePlotPoints(int,int,int,int); //plot the first set of points ellipsePlotPoints(xc,yc,x,y); //region1

h t t p ://

h i .b a i d u .c

o m

/b a l l 648500361

p=round(ry2-(rx2*ry)+(0.25*rx2)); while(px

ellipsePlotPoints(xc,yc,x,y); } //region2 p=round(ry2*(x+0.5)*(x+0.5)+rx2*(y-1)*(y-1)-rx2*ry2);

while(y>0) { y--; py-=tworx2; if(p>0) p+=rx2-py; else { x++; px+=twory2; p+=rx2-py+px; } ellipsePlotPoints(xc,yc,x,y);

} }

3.3 字库减肥

查看一下Mega8的Datasheet ,上面赫然写着8K Flash ,再看看ASC16的大小4K ,我不知道有多少人不会打寒颤。更不用说260多K 的汉字库了,看来要么外扩存储器,要么只能选择西文显示,并且对ASC16库进行减肥。

其实,减肥并不是一个可以称之为技术的行为,总原则就是丢弃无用的部分,同时修改索引方式以保证外界使用减肥前方文字魔窟文件的索引方式不至于出错就可以了。就拿ASC16的减肥工作来说吧,很显然,我们并不需要扩展字符128~255的那个部分,可以减小大小为16*128 = 2K 的大小,再加上基本字符基的四个区中,控制字符区显然也是可以舍弃的,所以,还可以减少16*32 = 512B 的大小,也就是说,剩下的文件只有1.5K 大小了,哈哈,总算可以接受了。当然如果你选择了8*8的字模,就更小了。

以上完成的只是第一步,借助类似UltraEdit 这样的编辑工具都可以做到,然后我们再把字模库写成书组的形式,比方说:

h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

const char ASC_Lib[][16] = { ……

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, …… }

包含入头文件,就可以了。

下面我们需要一个访问函数,用来安全的有效的访问到我们需要的字模库: char *getASCLIB(char ASC) {

if ((ASC <32 ) || (ASC > 127)) {

return ASC_Lib[CharStringNULL]; //需要一个空字符串作为安全返回 }

return ASC_Lib[ASC]; }

配合12864头文件中公版中都有的那个显示图片的函数,就可以显示字符了。例如: void DispBITMap(const char *String,char StringLength,char X,char Y ,char DispModel);

我们还可以再对这个函数包装一下,实现16 * 4的文本模式。使用CLocate(x,y)来定位字符,用Print("")来显示字符串,用PrintN()来显示数字……哈哈。这一部分就留给大家自己来做了,不过是几个函数加宏定义罢了,相信自己简单的。

至于如何实现任意位置显示字符,还有一些字符特效的实现,在下一节里面具体说明。 这是我写的函数

/********************************************************

* 函数说明:读取显示数据指令 * * 输出: 显示数据 *

********************************************************/ char getLCD12864Data(void) {

char TempData = 0; char a = 0;

LCD12864_SetModel_Data; LCD12864_SetModel_Read;

LCD12864_SetEnable; LCD12864_SetDisable; LCD12864_SetEnable; asm("nop");

h t t p ://

h i .b a i d u .c

o m

/b a l l 648500361

TempData = ReadDataPORT;

return TempData; }

/******************************************************** * 函数说明:12864画点函数 * * 输入: 坐标(横向),点类型:画点/清点/反相 *

********************************************************/ void LCD12864Draw(char X,char Y ,char Type) {

char DX = (Y >> 3); //计算出属于哪个字节 char BX = Y - (DX << 3); //计算出属于字节哪一位 char TempData = 0;

LCD12864_ChooseBoth;

setX(DX); if (X > 63) {

LCD12864_ChooseCS2; X -= 64; } else {

LCD12864_ChooseCS1; } setY(X); TempData = getLCD12864Data();

switch (Type) {

case LCD12864_Graphic_Clear: TempData &= ~(1<

case LCD12864_Graphic_Not: TempData ^= (1 << BX); break; default:

TempData |= (1 << BX); }

h t t p ://

h i .b a i d u .c

o m

/b a l l 648500361

setY(X);

sendDataToLCD(TempData); }

3.4 我行我素

前面我们说过一个函数:

void DispBITMap(const char *String,char StringLength,char X,char Y ,char DispModel);

借助这个函数,我们很容易把一个定义好的图片(字模)显示出来。但是,这显然太中规中矩了一点。简单的应用,如果我们想做一个图片在屏幕上来回弹的经典屏保效果就很恼火(恼火是四川话麻烦的意思)。显然,在屏幕的任意位置显示图片就成了急需解决的问题。

一种基本思想就是,我们在系统的某一个地方再开辟一个显示缓冲区,通过一点点计算,把图片影响到的地方都改写好,然后直接把这块缓冲区影射到原先的显示缓冲中,或者干脆直接显示出来。怎么,还是不懂?好吧,这样给你打一个比方:12864的现存结构是以纵向的8个点为一个字节,如果我们想在以8为倍数的行开始(单位是像素)显示一个8*n 的字模,那么只需要简单得调用本节开始时后提到的函数把字模送过去就可以了;But,如果我们想在别的位置(显然只有行是问题,对于12864来说,列是很容易设置的),显示这个字符呢? 你可以自己先思考下下。

对于一个只有1K 大小连基本显示缓冲区都开不起的M8来说,你别指望他还能再凭空找出一块地方给你做什么预处理缓冲,问题是,有必要么?实际上,我们每次进行图片变换牵涉到的显存是有限的。比方说,我们要处理一个8*n 的字符,那么每次需要参与处理的字节最多只有(8/8)+1个;我们需要处理一个16*n 的字符,那么每次需要参与处理的字节最多只有(16/8)+1个。如果需要图片在任意位置显示,那么需要参与计算的字节只有(Y/8)+1个。那么我很容易把缓冲用的显示存储单元数量减少到一个可以接受的范围,比方说12864的8个。

计算的原理很简单,我们可以很容易写出他的通用函数(以下函数只是伪代码): # define DISP_Model_Draw 0x01 //覆盖 # define DISP_Model_AND 0x00 //印花 # define DISP_Model_Not 0x02 //反相 void showPicture(const char *String,char Length,char Height,char X,char Y ,DispModel)

{

char TempRAM[2] = {0,0}; //声明一个显示缓冲,因为是一个一个的处理,所以最多只需要2个字节,但是对于画线函数,就不是这样了 char a = 0,b = 0,n = 0; char Temp = 0;

if (Y - (Y >> 3 <<3)) {

//普通情况 ……代码忽略 return ; }

h t

t p ://

h i .b a i d u .c

o m

/b a l l 648500361

//需要处理的情况 for (a = 0;a

for (b = 0;b

Temp = (Y+a) - ((Y+a) >> 3 <<3); //求余数

TempRAM[0] = getRAM(X,(Y+a)>>3); //这一行明显示伪代码哈 TempRAM[1] = getRAM(X,((Y+a)>>3)+1); switch (DispModel) {

case DISP_Model_Draw: for (n = 0;n<8-Temp;n++) {

if (String[n]<<(7-n)>>7) {

TempRAM[0] |= (1<<(n+Temp)); } else { TempRAM[0] &= ~(1<<(n+Temp));

} }

for (n = 0;n>7) { TempRAM[1] |= (1<

{ TempRAM[1] &= ~(1<

} } n++; break; ……以下略 }

把TempRAM[0]和TempRAM[1]写入到现存中 } } }

h t t p ://

h i .b a i d u .c

o m

/b a l l 648500361

LCD12864显示程序

本例程为通过用A T89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j

LCD12864显示程序

;实验目的:熟悉12864LCD的使用 ;12864LCD带中文字库 ;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“0975”,公司传真“6”;硬件设置: ;关断所有拨码开关。 #include<> ;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC ;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择 #DEFINE RW PORTA,4 ;读/写选择 #DEFINE E PORTA,3 ;使能信号 #DEFINE PSB PORTA,2 ;并口/串口选择(H/L) #DEFINE RST PORTA,0 ;复位信号 ;----------------------------------------------- LCD_X EQU 30H ;页地址 LCD_Y EQU 31H ;Y地址 COUNT EQU 32H ;循环计数用 COUNT1 EQU 33H ;循环计数用 COUNT2 EQU 34H ;循环计数用 POINT EQU 35H ;查表偏移地址 POINT1 EQU 36H ;查表偏移地址 POINT2 EQU 37H ;查表偏移地址 TEMP EQU 38H ;临时寄存器 TEMP1 EQU 39H ;临时寄存器 ;----------------------------------------------- ORG 0000H ;复位地址 NOP ;ICD需要的空指令 GOTO MAIN ;跳转到主程序 ;**********************主程序************************ MAIN BANKSEL TRISA CLRF TRISA ;A口输出 CLRF TRISD ;D口输出 BANKSEL ADCON1 MOVLW 06H MOVWF ADCON1 ;A口全为数字口 CLRF STATUS

12864液晶显示图片原理(完整版)

51单片机综合学习 12864液晶原理分析1 辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理…… 芯片:YM12864R P-1 控制芯片:ST7920A带中文字库 初步小结: 1、控制芯片不同,寄存器定义会不同 2、显示方式有并行和串行,程序不同 3、含字库芯片显示字符时不必对字符取模了 4、对芯片的结构地址一定要理解清楚

5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚 6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚 7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚 8、显示图片时的二级单元(一级为八位数据写入单元)要清楚 12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入

到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8个液晶点的显示信息。

网页设计大作业word模板

伊犁师范学院《网页设计》期末课程设计 设计题目:我的个人网页 学号:018 姓名:马建武 院系:电子与信息工程学院 专业班级:计科08-2 指导老师:王雪峰 日期:2011-6-20

一、设计思想 随着网络技术的飞速发展,网络已经遍及每个人的身边,通过个人网页把自己展示在网络上,不仅可以获得更多的朋友,有用的信息,也是跟随时代发展,做走在时代前沿的一个有效方式,本网站旨在设计一个个性化的个人网站,展现自己的生活,学习,爱好等等信息,通过本网站把自己展示出来。 二、开发环境及软件 Windows XP,Macromedia Dreamweaver 8,photoshop等 三、系统结构功能图、页面结构草图及部分页面截图 四、部分代码(主要添加CSS代码) 1.添加首页背景音乐 2.运用框架

3.图片滚动 <td colspan="5" valign="top"> <marquee direction="left" loop="-1"><img src="../photos/图像" width="134" height="133"><img src="../photos/图像" width="134" height="133"><img src="../photos/图像" width="134" height="133"> </marquee> </td> 4.文本css样式 .s1 { font-family: "宋体"; font-size: 18px; font-weight: bold; color: #3333CC; text-decoration: blink; text-align: center;</p><h2>玩转12864液晶(1)--显示字符</h2><p>在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108 T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C) 关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。 我们先来了解一下它的并行连接情况。 下面是电路连接图</p><p>从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W 是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。 通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。 看看并行模式下的写时序图:</p><p>根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。 读时序图如下: 根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章节中讲的画点函数等都要用到读时序。有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。 下面让我们根据这些编写出它的驱动程序吧。 我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C 实际显示效果图片如下: 程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。[p][/p] #include "reg52.h" #include "intrins.h" sbit io_LCD12864_RS = P1^0 ;</p><h2>网页设计大作业</h2><p>网页设计与制作报告书 课程名称:网页设计与制作 报告题目:几米的空间 专业班级:旅管1002班 学号:100104110221 姓名:杨玉颖 指导教师:胡一波</p><p>目录 一、................................. 开发背景 二、................................. 网页设计技巧 三、................................. 网站结构 四、................................. 应用工具方案 五、................................. 频道栏目划分 六、................................. 测试 七、................................. 周期与成本估算 八、................................. 结论</p><p>摘要: 在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。因此网站建设在Internet应用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。 关键字:网页制作;制作方法;设计要素;网页测试</p><p>一、网页制作开发背景 Dreamweaver以其功能强大、容易上手、界面亲切而著称。它采用所见即所得的方式编辑网页,利用它可以轻松的组织、编辑网页并将其发布到指定的站点上,而且在发布之后还能对更新情况进行监控以更新站点的内容。现在流行的网页制作软件有很多,如Macromedia 公司的Dreamweaver、微软公司的Dreamweaver、还有Adobe Pagemill 3.0--制作多框架,表单和Image map 图像的网页工具、Netscape等等。其中Dreamweaver更以其功能强大、容易上手、界面亲切而著称。它采用所见即所得的方式编辑网页,利用它可以轻松的组织、编辑网页并将其发布到指定的站点上,而且在发布之后还能对更新情况进行监控以更新站点的内容。工具准备好了,可根据你的个人喜好来选择一些素材,如图片、喜欢的文章等。 二、网页制作设计技巧 首先,我们来看一下创建一个只包含一个网页的站点。选择“文件”菜单的“新建”选项,单击“站点”命令,这时新建站点对话框就弹出来了,在“指定新站点位置”文本框中输入新站点的位置,单击“只有一个网页的站点”图标,单击“确定”按钮。这就建立好站点了,我们现在来看一下新的站点里有什么,单击“视图”工具条的“文件夹”按钮。在文件夹列表里有一个网页文件,名字叫做“index.htm”。我们知道,每</p><h2>LCD12864写字符串程序及其头文件</h2><p>/****************************** 2012年5月19日 调试成功 编辑环境:ICCAVR 功能:用LCD12864显示汉字 ********************************/ #include<iom16v.h> #include<macros.h> #include"LCD_12864.c" /************************************** 端口初始化 **************************************/ void port_init() { DDRA=0XFF; PORTA=0XFF; DDRC=0XFF; PORTC=0XFF; } /****************************************** 主函数 *******************************************/ void main() { uchar i; port_init(); delay(100);// port_init();// LCD_init(); write_string(0,0,"zheng Zunggui"); delay(200); write_string(0,1,"I Love微电子!"); delay(200); write_string(0,2,"Working Hard !"); delay(200); //write_string(0,3,"I Love English!"); //write_string(0,3,"做电子设计大赛!");//包含了汉字字符串中有汉字输入方式/************************************** 此为单独操作汉字字符的方法 ****************************************/ LocateXY(1,3);//单独写汉字时,要一个字节一个字节写入,分开地址不重合 //先高字节后低字节与ASCCII不冲突 write_data(0xD5);// D5C5 D4F6 B9F0</p><h2>LCD显示程序</h2><p>本例程为通过用AT89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include<reg52.h> #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include<reg52.h> #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j<x;j++) { for(i=0;i<120;i++); //延时X乘以120 } } /********************************************* LCD12864液晶测忙子程序(读状态) *********************************************/ void Busy()</p><h2>12864显示图形</h2><p>看到工具箱旁边那个LCD12864很久没用了(当初买回来用的时候只是简单地测试了一下),于是萌生了重新写一次接口程序的想法(而且这次要给它加个图片显示的功能),好,说做就做,就用Atmega16和ICCAVR来做吧,最近这MCU和平台用得比较熟练。 马上从书堆里把当初打印出来的中文datasheet给翻了出来,依葫芦画瓢地写了个初始化程序。好,OK。编译通过。于是又写了一个可以自定义从XY坐标值开始输出显示的函数,再次编译,也通过,OK。于是呼马上写了四行简单的字符烧到单片机上试了一下,嘿嘿,一次通过。如下图: 后来在进一步测试的时候也出了点小问题。就是我是使用USBISP烧写器把程序烧写进AVR的(此时实验板由USBISP烧写器供电),想要实现从第一行的第一个字符开始连续显示"0123456789"。刚烧写完程序后能看到LCD12864上正常显示"0123456789",但是把烧写器从实验板上断开连接,单独用USB给实验板供电的时候,LCD的第一行只是显示"123456789",第一个字符消失了……,左思右想地弄了一个多小时后,终于把问题给解决了,就是把初始化程序的延时适当增加了些,真是奇怪。刚开始一直想不通为什么在烧写器供电的情况下就正常显示,而换到USB供电后就出了问题。后来再想想,估计是跟供电有关。在使用USBISP烧写器供电的时候,LCD的背光灯明显比用USB供电的时候来得亮,而且对比度也高很多,看来是因为换到USB供电后,供电不怎么充足,以至于LCD在上电初始化的时候花上了更多的时间去初始化(因为供电低了,功率小了,跑起来有点力不从心,用的时间就久了嘛……我是觉得可以这样去理解的 接下来呢,就到了有点难度的画图了。当初刚买到12864的时候只是简单测试了字符显示功能,除了因为画图还不需要用到,另外一个原因就是那datasheet上关于画图那部分的内容不怎么看得懂…。现在重新拿起来看,依然一头雾水……。马上上网百度了一下“12864 7920 显示图片”,看到了不少的例子程序,可是……就是没看到有关于这部分功能实现的详细思路和讲解……下载下来的那些程序,基本上没注释,不是说晦涩难懂,但是至少看起来一团糟,让人家不想继续看下去……于是还是硬着头皮去啃那datasheet。上面对于画图这部分的内容是这样讲解的:</p><h2>网页设计_期末报告</h2><p>2014-2015学年上学期 《网页设计》课程期末大作业说明 1.题目:*****网站设计与实现(根据学期初自已的选题确定) 其中应包含以下内容: (1)网站设计概述 ?需要掌握的基本技术及它们的作用 ?平台的搭建和开发工具的选择 ?你的设计目标:解释你设计的主题和目标 (2)典型网站设计分析及学习 ?以期中作业为基础,分析经典网站的设计 ?强调两点:文档标记的标准化与格式化,布局方式 ?从中你学到了什么?文件的组织结构、图片的大小、命名等,请自己 思考展开 (3)设计与实现 ?完成你自己的设计 ?整体布局思路:流式布局或固定布局?布局采用什么技术? ?包含适当的代码及截图 ?代码请保持良好的格式 ?页面中的支撑文本可以任取样本文字 (4)总结 ?从这门课你学到了什么? ?还有什么需要在今后的学习中加以拓展? ?WEB上的一些新的发展趋势,如HTML5你如何看? 2.请提交: (1)设计报告(A4纸打印) ?word文档 ?格式和基本内容要求(见附件1) (2)电子文件(以下文件压缩打包,以“学号_姓名”方式命名) ?HTML文档:index.html ?CSS文件:final.css ?图片文件夹img: ?设计报告的电子版:学号_姓名.doc 3.提交时间和方式: (1)完成时间表: ?2015年1月8日:提交最后完成的版本 (2)地点: ?上课地点 4.附件:报告格式</p><p>《网页设计》期末课程设计报告 题目:灵异世界网站 姓名:许蕾 学号:12990255 日期:2014年12月30日 摘要 请解释在这门课程的学习过程中,你学到了哪些知识?以及如何运用这些知识,来进行设计与实现的。 随着大三上学期正式的开始,抱着懵懂的心态,选择了网页设计与制作这门课程,曾记得第一节的课的时候,老师让每一位同学提一个问题,上完第一节课似乎我应该大概明白我们这学期学习网站关于哪方面的知识,接下来,在听完老师讲课的基础上,自己学习w3Cschool在线学习网站上关于html标记语言和css样式方面的教程。对此感觉这学期更加明白了网站标记与设计方面的理解,也增添了我对于网站学习的热情。 本学期学习到的知识有: 1.简单的html标记;例如 ; <h1></h1>; <pre></pre>; <frameset></frameset>;等等方面的标签,利用这些标签基本上可以实现了一些网页上的 基本功能,对于他们分别的属性也有所了了解,在设计你网页的时候,应用的更加得心应手。 2.布局方式上从原有的知识结构中只能用表格来规划整个网页的思想中解脱出来,了解了关于 div标签的浮动布局,“层”的应用,使整个网页布局显得不那么呆板,而是更加的灵活。因 此受益匪浅啊。 3.css样式 基于对于css样式的初步了解,使我在网页设计上减少了很多不必要时间的浪费,而且很多 功能实现起来比以前的方式更加的方便与灵活。但是关于css样式只是处于基本的了解层面, 更多的知识,我想我以后会在仔细的钻研。 你最初的目标是设计一个***类型的网站,以此为目标,你做了哪些工作?最终是否完成了既定目标? 我最初的目标是设计一个关于灵异世界方面的网站,以此为目标,我首先展开了对于灵异世界方面知识的收集,刚开始的时候是想按照自己的想法来设计的,后来觉得应该先有模仿,再有创新。因此接下来开始收集各种关于灵异世界网站,研究他们采用的布局和样式,在此期间,遇到了很多的问题,由于对网页代码,以及动态网站的了解是一片空白,因此在研究的时候真是白爪挠心,非常的痛苦,后来恍然大悟,学术这个东西是需要时间来慢慢研究的,不能急于求成,因此对此暂且放弃。开始着重关注css样式和页面设计这方面的东西,根据老师的推荐——禅意花园,在这个很好的学习css样式的网站中遨游,最终做出了自己还是比较满意的网站了吧。</p><h2>基于STM32--LCD12864驱动程序</h2><p>基于STM32--LCD12864驱动程序</p><p>STM32 LCD12864驱动程序(头文件)(2012-05-29 21:25:08)转载▼ 标签:杂谈 #ifndef LCD12864_H #define LCD12864_H #define LCD_CONTROL GPIOD //默认LCD12864的控制口在PD口 #define LCD_DATAPORT GPIOD //默认LCD12864的数据口在PD口 #define LCD_RESET_Pin GPIO_Pin_12 //默认LCD12864的复位引脚连接到PD.12 也可不用 #define LCD_RS_Pin GPIO_Pin_13 //默认LCD12864 RS -- PD.13 #define LCD_RW_Pin GPIO_Pin_14 //默认LCD12864 RW -- PD.14 #define LCD_EN_Pin GPIO_Pin_15 //默认LCD12864 E -- PD.15 #define LCD_CONTROL_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的控制口时钟</p><p>#define LCD_DATAPORT_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的数据口时钟 #define LCD_RS_1 LCD_CONTROL->BSRR &=~LCD_RS_Pin;LCD_CONTROL->BSRR |=LCD_RS_Pin //RS置高电平 #define LCD_RS_0 LCD_CONTROL->BRR &=~LCD_RS_Pin;LCD_CONTROL->BRR |=LCD_RS_Pin //RS置低电平 #define LCD_RW_1 LCD_CONTROL->BSRR &=~LCD_RW_Pin;LCD_CONTROL->BSRR |=LCD_RW_Pin //RW置高电平 #define LCD_RW_0 LCD_CONTROL->BRR &=~LCD_RW_Pin;LCD_CONTROL->BRR |=LCD_RW_Pin //RW置低电平 #define LCD_EN_1 LCD_CONTROL->BSRR &=~LCD_EN_Pin;LCD_CONTROL->BSRR |=LCD_EN_Pin //EN置高电平 #define LCD_EN_0 LCD_CONTROL->BRR &=~LCD_EN_Pin;LCD_CONTROL->BRR |=LCD_EN_Pin //EN置低电平</p><h2>在12864显示任意图片及参考程序</h2><p>用12864显示单色图片 首先介绍本12864液晶显示器: 型号:QC12864B 因为单片机读取的是数据,而不是直接的图片。得将图片进行取模,图片应该是单色图片,像素128*64。 下面我为大家介绍个实例。 ①、在电脑附件画图,首先设置属性</p><p>开始画图 保存文件,注意格式: ②、然后进行取模。</p><p>③、编程: #include<reg51.h> #define uchar unsigned char #define uint unsigned int //宏定义 #define lcd P2 //数据端口 sbit rs=P1^2; //指令/数据选择信号 sbit rw=P1^1; //读写选择信号 sbit e=P1^0; //使能端 sbit psb=P1^3; //串并选择端,高电平为并行,低电平为串行 uchar code ai[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xCE,0x00,0x00,0x00,0x00,0x00,0x01,0xC1,0xE0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x00,0x00,0x03,0x31,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x0E,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x9B,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x78,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0xF8,0xEF,0x00,0x00,0x00,0x00,0x00,0x1B,0xFC,0x1E,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0xFE,0x00,0x00,0x00,0x00,0x00,0x1E,0x60,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x38,0x70,0x20,0x00,0x00,0x00,</p><h2>LCD12864原理与应用(源程序+原理图+proteus仿真)</h2><p>LCD12864原理与应用 1、LCD12864简介: LCD12864分为两种,带字库的和不带字库的,不带字库的液晶显示汉字的时候可以选择自己喜欢的字体。而带字库的液晶,只能显示GB2312字体,当然也可以显示其他的字体,不过是用图片的形式显示。 下面介绍不带字库的LCD12864,以Proteus中的AMPIRE128×64为例,如下图所示,它的液晶驱动器为KS0108。 与带字库的液晶不同,此块液晶含有两个液晶驱动器,每块驱动器都控制64*64个点,分为左右两个屏幕显示,总共为128*64个点(即有128×64个点)。这就是为什么AMPIRE128*64有CS1和CS2两个片选端的原因。此液晶有8页,一页有8行点阵点,左右各64列,共128列。如下图所示:</p><p>2、LCD12864中的几条重要指令 (一)行(line)设置命令: 由此可见显示的起始行地址为0XC0,共64行,有规律地改变起始行号,可以实现滚屏效果。(二)页(page)设置指令: 起始页地址为0XB8,因为液晶有64行点,分为8页,每页就有8行点。 (三)列(column)地址设置指令 每块驱动器的列地址都是从0X40到0X7F,共64列,所以此液晶共有128列点。 (四)读状态指令</p><p>3、用LCD12864显示汉字(一) 由于这块液晶不带字库,我们就要自己编写字库,编写字库所用的字模提取软件为Zimo21(软件下载地址https://www.360docs.net/doc/04616207.html,/),LCD1602显示自定义字符的时候也是用它。在取模之前我们要进行一些设定,根据此液晶的显示原理,设置为“纵向取模,字节倒序”,如下图所示:(若不是这样,则取模得到的数据不是我们想要的,将会出现乱码,同样可以在https://www.360docs.net/doc/04616207.html,/下载到关于字模提取原理文档) 字体选择默认的“宋体,常规,小四号”,小四号为16*16大小,如下图所示:</p><h2>LCD12864图形液晶并口显示</h2><p>LCD12864图形液晶并口显示 【教学引入】 液晶屏,在生活中很常见,我们常见的液晶显示器,如电脑的显示器,电视机,手机等等。 液晶屏在生活中已得到了普遍应用,它显示个各种各样的画面。 【教学目标】 1、掌握LCD12864液晶屏的用法; 2、编写LCD12864液晶屏的指令代码; 【知识目标】 1、掌握LCD12864液晶屏的用法; 2、掌握LCD12864液晶屏指令代码; 【教学准备】 电脑、Proteus、Keil 【教学方法】 教法:讲授法、讨论法 学法:练习法、探究法 【教学课时】 四课时 【教学过程】 一、12864液晶介绍 (1)12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。12864点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。12864M汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。</p><p>12864引脚说明 查阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集 1、指令表1:(RE=0:基本指令表),如下图,讲解了12864的基本指令集和扩充指令集。</p><p>当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0。“RE”为基本指令集与扩充指令集的选择控制位元,往后的指令集将维持在最后的状态。 当选择G=0 :绘图显示OFF,汉字显示的时,12864屏只能显示8X4=32个汉字,下面是汉字显示的坐标</p><p>二、12864液晶屏驱动电路 原件名称所属类(Category) 所属子类(Sub-category) AT89C52 Microprocessor ICs 8051 Family POT-HG Resistors Variable RESPACK-8 Resistors Resistor Packs LCD12864A 自制- AT89C52的P0口连接12864的并行数据口,RP1为P0口的上拉排阻。 三、52代码编写 (1)打开keil uVision4,建立一个新的工程,工程名为"12864 graphic LCD parallel display",保存类型*.uvproj,单片机型号AT89C52。在工程中添加12864 graphic LCD parallel display.c文件,如下图</p><h2>web期末设计大作业经典作品</h2><p>网站开发技术课程设计报告 题目:兄弟依旧 专业: 班级: 学号: 姓名: 老师: 成绩:_____________________</p><p>一、网站设计要求 ?站点题目:自定 ?具体内容自行设计; ?具体要求: 按照Fireworks作效果图—〉切图—〉页面布局的过程进行; 须提交完整的Fireworks页面效果图; 必须用CSS+DIV页面布局; 页面中必须包含JavaScript编程; 页面中必须包含Flash动画(须提交Flash源文件.fla); 二、信息等相关素材收集 基于设计网站的的要求,其内所包含的图片与文字信息皆来自互联网。并且其选材比较贴合电影说体现的主题,再加上其内的色彩调用,很会让人为之动容并有一种身临其境的感觉。 三、个人网站的总体规划和步骤 1、设计的目的 又一年毕业季,又是一个让彼此动容的季节,在向这段充满欢笑、充满浪漫、充满豪情壮志、也充满酸涩与淡淡忧郁的学生时代告别之际。为此做了个网站以怀念曾经的你和我、曾经一起奋斗的日子、以及那个他或者她。还有此刻的美丽,以及无限的未来向往。 2、设计布局 在网站的右上角有一个音乐播放器,重复播放着BEYONGD的代表作(光辉岁月),在其下面有一个利用JavaScript制作的一个图片轮显效果的界面。写满了对大学四年的怀念图片。网站的左上角用flash制作的一个标题,并在其下方有一个用户登录栏,主要是为了方便用户对网页进行操作。最后一个网站的右下角是主题介绍的大学毕业的微电影链接。 3、网站具体设计过程 首先选定本网页制作工具是网页三剑客:Adobe Dreamweaver CS3+Adobe Fireworks CS3+Adobe Flash CS3</p><h2>网页设计与制作大作业试卷A卷</h2><p>宁波大红鹰学院 2012-2013学年第一学期 2010级本科市场营销专业《网页设计与制作》(A卷) 期末考试试卷 考核方式:大作业 题目:制作完成一个中小型的电子商务网站 要求: 此次期末考试大作业上交期限为第18周星期三(2013年6月26日),必须按时上交否则无期末考试成绩。同学们一定要自己独立完成,发现他人制作或抄袭者,无期末考试成绩。(允许项目组同学合作完成,完成页面为:人数*5,由组长进行分工,上交一份详细页面制作分工说明,同时组内人员所有页面必须在一个站点下并管理好) 1、书写学生制作的电子商务网站规划书和设计书。内容包括:市场分析、建设网站目的及功能定位、网站的内容规划、网站设计过程中知识点运用情况说明,字数为800字以上。(20分) 2、学生上交的文件夹以班级、姓名进行命名,如10营销X班XXX。文件夹内不能有无用的图片、文章等,站点目录清晰,首页必须以index.html命名。(5分) 3、工作量考核:学生的电子商务网站制作中网页数至少为5页,1页为网站首页,1页是用户注册页,1页是个人介绍页。除个人介绍页外,其余页面需使用框架或模版,整体风格统一,效果美观,信息量适中,主题鲜明,主页至少包含5个以上栏目进行具体设计,5个页面中有2个独立网页介绍栏目。(25分) 4、网页中所有的文字及链接均要使用CSS样式表精确控制,能够实现许多网页的同时更新,提高网页下载速度,页面中制作至少使用2个CSS特效。(10分) 5、页面格式:(15分) (1)使用表格、布局表格和图层对网页元素进行排版。 (2)页面布局合理,体现主题,色彩均衡,整体协调。 (3)在主页中选择合适的文字或图像设置超级链接,其他页面中必须设置“返回主页”的超级链接,相关内容必须有返回相关主题内容的链接,浏览线路顺畅。</p><h2>12864液晶显示程序(图案+文字)</h2><p>#include <REG52.H> sbit LCD12864_RS = P2^0; //RS控制引脚 sbit LCD12864_RW = P2^1; //RW控制引脚 sbit LCD12864_EN = P2^2; //EN控制引脚 sbit LCD12864_PSB = P2^3; //模式选择引脚,ST7920控制器,1为8位并行接口,0为串行接口 #define LCDPORT P0//数据引脚 void LCD12864_Init(void); //LCD12864初始化函数 void LCD12864_WriteInfomation(unsigned char ucData,bit bComOrData); //向LCD12864写入数据,bComOrData为1时写入的是数据,0时写入的是命令 void LCD12864_CheckBusy(void);//忙检测函数 void LCD12864_DisplayImage(unsigned char code *ucImage); void Delay(unsigned int uiCount); unsigned char code ucPic1[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x30,0x01,0xE0,0x00,0x00,0x2A,0x00,0x00,0xD8,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0x7B,0x63,0xE0,0x00,0x00,0x22,0x00,0x01,0x24,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xFB,0x63,0x07,0x34,0x00,0x14,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x0D,0xDB,0x63,0x01,0xBC,0x00,0x08,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x1B,0x63,0x07,0xB0,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x1B,0x63,0xED,0xB0,0xDB,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x05,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0A,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0A,0x00,0x00,0xFF,0xF8,0xE0,0x05,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0xC0,0x15,0x00,0x1F,0xFF,0xFF,0xC0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x09,0x20,0x11,0x00,0xFB,0xFF,0xE1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x08,0x20,0x0A,0x03,0x9F,0x00,0x9E,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x40,0x04,0x0E,0x70,0x00,0x81,0xC7,0x80,0x01,0x40,0x00,0x00,0x00,0x00, 0x00,0x02,0x80,0x00,0x1D,0x80,0x00,0xE0,0x61,0xE0,0x02,0xA0,0x00,0x00,0x00,0x00, 0x00,0x01,0x00,0x00,0x77,0x9F,0xFC,0xF0,0x18,0xF8,0x02,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xDF,0x00,0x00,0xF3,0x0C,0x3C,0x01,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03,0x9E,0x00,0x00,0xF8,0x06,0x1E,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0x83,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0F,0xFD,0xFF,0xFF,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,</p></div> <div class="rtopicdocs"> <div class="coltitle">相关主题</div> <div class="relatedtopic"> <div id="tabs-section" class="tabs"> <ul class="tab-head"> <li id="20725944"><a href="/topic/20725944/" target="_blank">嵌入式设计大作业</a></li> <li id="9751214"><a href="/topic/9751214/" target="_blank">lcd12864程序</a></li> <li id="15702795"><a href="/topic/15702795/" target="_blank">lcd12864显示图片程序</a></li> <li id="2726143"><a href="/topic/2726143/" target="_blank">网页设计期末大作业</a></li> <li id="13374989"><a href="/topic/13374989/" target="_blank">lcd12864显示程序</a></li> </ul> </div> </div> </div> </div> <div id="rightcol" class="viewcol"> <div class="coltitle">相关文档</div> <ul class="lista"> <li><a href="/doc/636225850.html" target="_blank">嵌入式系统大作业</a></li> <li><a href="/doc/a12748106.html" target="_blank">18年度6月考试嵌入式系统期末大作业</a></li> <li><a href="/doc/c82156792.html" target="_blank">2018年下学期嵌入式系统设计大作业</a></li> <li><a href="/doc/092726437.html" target="_blank">大作业设计报告书(嵌入式系统原理与开发)</a></li> <li><a href="/doc/fd16397693.html" target="_blank">嵌入式程序设计大作业</a></li> <li><a href="/doc/3f11986546.html" target="_blank">嵌入式系统大作业</a></li> <li><a href="/doc/8211833074.html" target="_blank">期末课题关于嵌入式设计洗衣机</a></li> <li><a href="/doc/a910912715.html" target="_blank">嵌入式大作业报告</a></li> <li><a href="/doc/da9156828.html" target="_blank">嵌入式系统设计课程大作业范文</a></li> <li><a href="/doc/124349282.html" target="_blank">2016年下学期嵌入式系统设计大作业</a></li> <li><a href="/doc/5a18560022.html" target="_blank">2016年下半学期西电嵌入式系统设计大作业解析</a></li> <li><a href="/doc/a32145340.html" target="_blank">“嵌入式系统设计”大作业要求</a></li> <li><a href="/doc/b917773296.html" target="_blank">嵌入式系统设计大作业</a></li> <li><a href="/doc/0b880872.html" target="_blank">嵌入式系统设计大作业</a></li> <li><a href="/doc/f31730459.html" target="_blank">嵌入式操作系统及开发大作业</a></li> <li><a href="/doc/2a6230281.html" target="_blank">嵌入式系统设计期末大作业</a></li> <li><a href="/doc/87205564.html" target="_blank">嵌入式大作业</a></li> <li><a href="/doc/aa9566349.html" target="_blank">嵌入式Linux大作业实现2048</a></li> <li><a href="/doc/d05175642.html" target="_blank">嵌入式系统大作业</a></li> <li><a href="/doc/163492483.html" target="_blank">嵌入式系统模拟试题及答案</a></li> </ul> <div class="coltitle">最新文档</div> <ul class="lista"> <li><a href="/doc/0f19509601.html" target="_blank">幼儿园小班科学《小动物过冬》PPT课件教案</a></li> <li><a href="/doc/0119509602.html" target="_blank">2021年春新青岛版(五四制)科学四年级下册 20.《露和霜》教学课件</a></li> <li><a href="/doc/9b19184372.html" target="_blank">自然教育课件</a></li> <li><a href="/doc/3019258759.html" target="_blank">小学语文优质课火烧云教材分析及课件</a></li> <li><a href="/doc/d819211938.html" target="_blank">(超详)高中语文知识点归纳汇总</a></li> <li><a href="/doc/a419240639.html" target="_blank">高中语文基础知识点总结(5篇)</a></li> <li><a href="/doc/9d19184371.html" target="_blank">高中语文基础知识点总结(最新)</a></li> <li><a href="/doc/8a19195909.html" target="_blank">高中语文知识点整理总结</a></li> <li><a href="/doc/8519195910.html" target="_blank">高中语文知识点归纳</a></li> <li><a href="/doc/7f19336998.html" target="_blank">高中语文基础知识点总结大全</a></li> <li><a href="/doc/7119336999.html" target="_blank">超详细的高中语文知识点归纳</a></li> <li><a href="/doc/6619035160.html" target="_blank">高考语文知识点总结高中</a></li> <li><a href="/doc/6719035161.html" target="_blank">高中语文知识点总结归纳</a></li> <li><a href="/doc/4a19232289.html" target="_blank">高中语文知识点整理总结</a></li> <li><a href="/doc/3b19258758.html" target="_blank">高中语文知识点归纳</a></li> <li><a href="/doc/2619396978.html" target="_blank">高中语文知识点归纳(大全)</a></li> <li><a href="/doc/2b19396979.html" target="_blank">高中语文知识点总结归纳(汇总8篇)</a></li> <li><a href="/doc/1419338136.html" target="_blank">高中语文基础知识点整理</a></li> <li><a href="/doc/ed19066069.html" target="_blank">化工厂应急预案</a></li> <li><a href="/doc/bd19159069.html" target="_blank">化工消防应急预案(精选8篇)</a></li> </ul> </div> </div> <script> var sdocid = "0079e843a8956bec0975e387"; </script> <div class="clearfloat"></div> <div id="footer"> <div class="ft_info"> <a href="https://beian.miit.gov.cn">闽ICP备16038512号-3</a>&nbsp;<a href="/tousu.html" target="_blank">侵权投诉</a> &nbsp;&copy;2013-2023 360文档中心,www.360docs.net | <a target="_blank" href="/sitemap.html">站点地图</a><br /> 本站资源均为网友上传分享,本站仅负责收集和整理,有任何问题请在对应网页下方投诉通道反馈 </div> <script type="text/javascript">foot()</script> </div> </body> </html>