诺基亚液晶显示全解Word格式文档下载.docx
《诺基亚液晶显示全解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《诺基亚液晶显示全解Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
(2)如何在液晶屏控制led闪烁及A/D转换控制;
(3)如何提取字模,并在液晶屏上显示出来。
2系统分析
2.1系统组成
2.2系统工作原理
3系统硬件设计
3.1系统硬件总体设计(有几个模块,每个模块的功能)
3.2子系统(模块)一(此模块的组成器件及作用)
1.Nokia7110液晶屏电路图
组成器件:
SED1565控制芯片
作用:
可支持显示各种不同的画面,最大分辨率为132*65。
3.3子系统(模块)二
2.8051单片机
8051单片机
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:
一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
3.4子系统(模块)三
3.ADC0832
ADC0832
ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
通过DI数据输入端,可以轻易的实现通道功能的选择。
4系统软件设计
4.1系统软件总体设计
5系统使用说明
5.1系统安装及配置说明
5.1.1系统运行环境
基于8051的proteus仿真。
Proteus是电路分析与实物仿真及印制电路板软,它可以仿真、分析各种模拟电路与集成电路。
软件提供了大量模拟与数字元器件及外部设备。
各种虚拟仪器,特别是它具有对单片机及其外围电路组成的综合系统的交互仿真功能。
5.1.2系统安装及配置
5.2系统操作说明
(1)Nokia7110液晶屏简介
由图所示的Nokia7110液晶屏显示区域示意图可知,显示的起始序列映射到SED1565为第18列(即为0x12列),而不是此前类似液晶屏所默认的第0列。
这一点在设计驱动时要注意。
本例液晶屏引脚功能说明如表格所示。
(2)演示程序设计
Nokia7110液晶屏起始列为18(0x12),由于SED1565的列地址高4位设置命令为0001XXXX,低4位设置命令为0000XXXX,将起始列(18->
0x12)组合到列地址高4位与低4位命令后可得:
0001-0001与0000-0010,即0x11与0x02,因而源程序中列地址高4位与低4位设置命令的定义如下:
起始列的程序设计:
Ox12=18=00010010
00010001与00000010
0x110x02
#defineCOL_H40x11
#defineCOL_L40x01
#defineLINE0x04
(3)在显示驱动程序中,ShowChar函数负责完成5x7的点阵字符的显示功能,这部分代码要仔细阅读。
在此基础上,演示程序所完成的新任务是在液晶屏上显示菜单项设计与功能执行。
主程序中定义的菜单分别以下三项:
FlashLEDs:
执行该菜单时,连接在P3端口的3只LED将持续闪烁显示。
DispA/DValue:
执行该项菜单时,ADC0832的CH0通道模拟信号A/D转换值将刷新显示在液晶屏上。
SounderOutput:
执行该项菜单时蜂鸣器输出。
(4)在菜单显示程序中,主要提供了键盘扫描函数Scan-key()和菜单刷新函数Refresh-Menu(),前者扫描“上移键”、"
下移键"
和“执行键”,根据当前位置将当前菜单项索引保存于变量Curr-Menu,对于刷新菜单的函数Refresh-Menu(),它总是将当前选中的菜单反向显示,其它菜单显示则正常。
选择不同的菜单项后,菜单功能执行函数Execute-MENU()根据功能号Func-NO(1、2、3)分别完成“LED闪烁控制”、“A/D转换值显示”和“声音输出”。
6结论
在设计这个实验时遇到很多的问题,比如不知道SED1565的命令集,不知道如何取字模,不知道如何设置SED1565的起始地址;
程序代码中也有很多不懂的地方,虽然是书上的一个简单的例子,但是看程序的时候总是云里雾里,比如最基本的点阵都看不懂(后来才知道这时最基础的),字符显示函数时怎么回事,还有那个我认为的最难的反相显示字符那一块。
最后是在胡新同学的帮助下,整整两个晚上的耐心教导,我才算弄会了这个实验,给胡新点赞
7附录程序
程序主要分为4个模块分别为:
1.Nokia7110液晶演示
2.ADC0832模数转换程序
3.Nokia7110液晶头文件(SED1565)
4.Nokia7110显示驱动程序(SED1565)
1.名称:
Nokia7110液晶演示
//-----------------------------------------------------------------
//说明:
本例在Nokia7110液晶演示了3项菜单功能,分别是LED闪烁控制,A/D
//转换控制,蜂鸣器输出.
//
#include<
reg51.h>
intrins.h>
string.h>
stdio.h>
#include"
Nokia7110.h"
codecharText[][17]=//本例标题及菜单项等
{
"
Norkia7110DEMO"
----------------"
1.FlashLEDs"
2.DispA/DValue"
3.SounderOutput"
};
//按键引脚定义
#defineK_UP()((P0&
(1<
<
0))==0x00)//上移
#defineK_DOWN()((P0&
1))==0x00)//下移
#defineK_OK()((P0&
2))==0x00)//执行
sbitBEEP=P0^5;
//蜂鸣器
chardisp_buff[17];
//液晶显示缓冲
floatAD_Result;
volatileINT8UPre_Key=0x00,Curr_Menu=1,Pre_Menu=0,Func_NO=0;
volatileINT8UKey_Changed=0;
enum{WHITE=0,BLACK=1};
externINT8UGet_AD_Result();
//延时函数
voiddelay_ms(INT16Ux)
INT8Ut;
while(x--)for(t=0;
t<
120;
t++);
}
//按键扫描,获取当前菜单项
voidScan_Key()
//刷新菜单显示
voidRefresh_Menu()
//执行菜单功能
voidExecute_MENU()
//主程序
voidmain()
//定时器控制蜂鸣器输出
voidT0_INT()interrupt1
2.名称:
ADC0832模数转换程序
#defineINT8Uunsignedchar
#defineINT16Uunsignedint
//ADC0832引脚定义
sbitCS=P1^1;
//片选线(电路中固定连接低电平)
sbitCLK=P1^4;
//时钟钟线
sbitDIO=P1^5;
//数据线
//获取AD转换结果(0通道)
INT8UGet_AD_Result()
3.名称:
Nokia7110液晶头文件(SED1565)
#define_XTAL_FREQ4000000UL
//SEG1565显示地址控制命令
#definePAGE0xB0//页地址
//SED1565最大分辨率为132*65,在驱动Nokia7710时,其起始列为第18列,而不是0列
//由于SED1565的列地址高4位命令为0001XXXX,低3位命令为0000XXXX
//将起始列(18->
0x12)组合到列地址高4位与低4位命令后,可得:
0001-0001与0000-0010
//即0x11与0x02,故有如下定义
#defineCOL_H40x11//列地址高四位
#defineCOL_L40x02//列地址低四位
#defineLINE0x40//行地址
//函数声明
voidSPI_MasterInit();
voidNokia_Reset();
voidNokia_Init();
voidNokia_CLS();
voidWrite_Norkia_Command(INT8Ucmd);
voidWrite_Nokia_Data(INT8Ucd);
voidSet_Nokia_LCD_POS(INT8Upage,INT8Ucol);
voidShow_Char(INT8Uc,INT8Ureverse);
voidShow_String(INT8U*str,INT8Ureverse);
4.名称:
Nokia7110显示驱动程序(SED1565)(不带字库,96*64)
//SPI接口存储器引脚定义
sbitCS=P2^0;
//片选线
sbitDC=P2^1;
//数据/命令选择线
sbitRESET=P2^2;
//复位线
sbitSCLK=P2^3;
//串行时钟
sbitSDATA=P2^4;
//串行数据线
//ASCII字符5x7点阵库(每个字符5字节点阵数据)
codeINT8UASCII_FONT[]={
0x00,0x00,0x00,0x00,0x00,//20空格
0x00,0x00,0x5f,0x00,0x00,//21!
0x00,0x07,0x00,0x07,0x00,//22"
………………………………
externvoiddelay_ms(INT16Ux);
//从当前地址读取一字节数据
INT8UReadByte()
//向当前地址写入一字节数据
voidWriteByte(INT8Udat)
//清屏
voidNokia_CLS()
//复位NokiaLCD
voidNokia_Reset()
//初始化NokiaLCD
voidNokia_Init()
Nokia_Reset();
//复位NokiaLCD
Write_Norkia_Command(0xA6);
//正常显示模式(0xA7为反相模式)
Write_Norkia_Command(0xA3);
//液晶偏压设置(1/90xA2-1/70xA3)
Write_Norkia_Command(0xA1);
//段驱动方向选择,0xA1为反向,0xA0为正常)
Write_Norkia_Command(0xC0);
//行输出方向,C0为正常,C1为反向
Write_Norkia_Command(0x22);
//电阻率设置(V5电压控制)
Write_Norkia_Command(0x81);
//电量模式设置
Write_Norkia_Command(0x2F);
//设置内部电源操作模式
Write_Norkia_Command(0xE3);
//NOP操作
Write_Norkia_Command(0x40);
//起始行设为0行
Write_Norkia_Command(0xA4);
//正常显示模式
Write_Norkia_Command(0xAF);
//0xAF开显示(0xAE关显示)
//写LCD命令(DC=0选择命令寄存器)
voidWrite_Norkia_Command(INT8Ucmd)
//写LCD数据(DC=1选择数据寄存器)
voidWrite_Nokia_Data(INT8Udat)
//LCD定位函数(定位于p页c列)
//页范围0~7,列范围0~15(共16列字符,每列字符宽度为5像素,留一像素间隔,故
//每列字符宽度为6像素.全屏宽96像素,故共可显示96/6=16列字符)
voidSet_Nokia_LCD_POS(INT8Upage,INT8Ucol)
//字符显示函数,待显示字符ASCII码为c,反相标志为reverse
voidShow_Char(INT8Uc,INT8Ureverse)
//向LCD当前位置输出字符
voidShow_String(INT8U*str,INT8Ureverse)