诺基亚5110 LCD屏幕驱动程序文档格式.docx

上传人:b****6 文档编号:18626186 上传时间:2022-12-29 格式:DOCX 页数:20 大小:20.39KB
下载 相关 举报
诺基亚5110 LCD屏幕驱动程序文档格式.docx_第1页
第1页 / 共20页
诺基亚5110 LCD屏幕驱动程序文档格式.docx_第2页
第2页 / 共20页
诺基亚5110 LCD屏幕驱动程序文档格式.docx_第3页
第3页 / 共20页
诺基亚5110 LCD屏幕驱动程序文档格式.docx_第4页
第4页 / 共20页
诺基亚5110 LCD屏幕驱动程序文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

诺基亚5110 LCD屏幕驱动程序文档格式.docx

《诺基亚5110 LCD屏幕驱动程序文档格式.docx》由会员分享,可在线阅读,更多相关《诺基亚5110 LCD屏幕驱动程序文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

诺基亚5110 LCD屏幕驱动程序文档格式.docx

#defineSCLK_0()P4OUT&

=~SPI_CLK_PIN

#defineSCLK_1()P4OUT|=SPI_CLK_PIN

//P4.0---SCLK

//P4.1---DIN

//P4.2---D/C

//P4.3---/RST

//P4.4--/SCE

typedefunsignedcharbyte;

typedefunsignedintword;

//枚举D/C模式选择

typedefenum

{

DC_CMD=0,//写命令

DC_DATA=1//写数据

}LcdExecType;

//枚举画点类型选择

PIXEL_CLEAR=0,//擦除

PIXEL_DRAW=1,//画点

PIXEL_XOR=2//取反

}LcdPixelMode;

//驱动函数声明

voidLcdInit(void);

voidLcdSetContrast(bytecontrast);

voidLcdSetXY(byteX,byteY);

voidLcdExec(bytedata,LcdExecTypecd);

byteUnClear(bytedata,byten);

byteLnClear(bytedata,byten);

voidSplitByte(bytedata,bytenByLow,bytebytes[2]);

voidBufferPixelStuff(bytetype,byteindex,bytex,bytey,bytewidth,byteheight);

voidCacheEnglishString(bytex,bytey,bytewidth,byteheight,bytebWidth,byte*dataPtr);

voidCachePixel(bytex,bytey,LcdPixelModemode);

voidCommitBuffer(void);

voidClearBuffer(void);

#endif

Nokia5110Lcd.c

诺基亚5110LCD驱动源文件

#include"

Nokia5110Lcd.h"

PixelStuff.h"

//中、英文字、图片字模

//全屏缓存(6x84bytes)

byteLcdPixelBuffer[LCD_Y_RES/8][84]={{0},{0}};

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

函数名:

LcdInit

功能:

LCDSPI初始化

参数:

返回:

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

voidLcdInit(void)

P4OUT|=LCD_RST_PIN;

P4DIR|=LCD_RST_PIN|LCD_DC_PIN|LCD_CE_PIN|SPI_MOSI_PIN|SPI_CLK_PIN;

P4OUT&

=~LCD_RST_PIN;

P4OUT|=LCD_CE_PIN;

//设置LCD

LcdExec(0x21,DC_CMD);

LcdExec(0xC8,DC_CMD);

LcdExec(0x06,DC_CMD);

LcdExec(0x13,DC_CMD);

LcdExec(0x20,DC_CMD);

LcdExec(0x0C,DC_CMD);

//清屏

ClearBuffer();

CommitBuffer();

}

LcdSetContrast

设置LCD对比度

bytecontrast对比度值:

0~127

voidLcdSetContrast(bytecontrast)

LcdExec(0x80|contrast,DC_CMD);

LcdSetXY

设置LCD当前坐标

byteX横坐标:

0~83

byteY纵坐标:

0~05

voidLcdSetXY(byteX,byteY)

LcdExec(0x40|Y,DC_CMD);

//行

LcdExec(0x80|X,DC_CMD);

//列

LcdExec

执行LCD指令/数据

bytedata指令/数据值

LcdExecTypedc指令/数据选择(DC_CMD/DC_DATA)

voidLcdExec(bytedata,LcdExecTypedc)

unsignedchari=0;

=~LCD_CE_PIN;

if(dc==DC_DATA)

{

P4OUT|=LCD_DC_PIN;

}

else

=~LCD_DC_PIN;

for(i=0;

i<

8;

i++)//串行写入八位数据先写高位上升沿写入

{

if(data&

0x80)

DIN_1();

DIN_0();

SCLK_0();

data=data<

1;

SCLK_1();

//SPDR=data;

//while((SPSR&

0x80)!

=0x80);

}

UnClear

高n位清零

bytedata8位数据

byten清零多少位

byte清零后的结果

举例:

data取11111000n取3-->

00011000

byteUnClear(bytedata,byten)

bytetmpData,i;

tmpData=0;

for(i=0;

i<

n;

i++)

tmpData|=(1<

(7-i));

return(data&

(~tmpData));

LnClear

低n位清零

data取00011111n取3-->

byteLnClear(bytedata,byten)

i);

SplitByte

一个字节拆成两个字节

bytedata8位数据

bytenByLow从低位起多少位拆开

bytebytes[2]存放返回的两个字节

data取11111111nByLow取2-->

bytes[0]=11111100、bytes[1]=00000011

voidSplitByte(bytedata,bytenByLow,bytebytes[2])

bytes[0]=data<

nByLow;

bytes[1]=data>

>

(8-nByLow);

//注意该函数在绘图时会覆盖原来的内容

BufferPixelStuff

把图片、文字点阵写入全屏缓存(精确定位,右上角坐标可以为LCD上任意位置。

字符大小不限,自行修改数组点阵数据,单个字符的宽高参数不要传错了,16号

字模不要传成12,12了,12号字模不要传成16,16了)

bytetypetype=1-->

图片点阵/type=2-->

ascii字符/type=3-->

中文字符

byteindex数据在数组中的位置(当type=2时,直接传ascii字符,如:

'

A'

bytex横坐标:

bytey纵坐标:

0~47

bytewidth点阵数据的宽度(位数)如果是字符就为一个字符的宽度、如果是图片就为整个图片的宽度

byteheight点阵数据的高度(位数)如果是字符就为一个字符的高度、如果是图片就为整个图片的高度

voidBufferPixelStuff(bytetype,byteindex,bytex,bytey,bytewidth,byteheight)

bytei,j,tmpRow;

byterow=y/8;

byteoffset=y%8;

bytelevel=(height%8==0?

height/8:

(height/8+1));

bytebytes[2]={0};

bytebyteTmp;

for(j=0;

j<

width;

j++)

tmpRow=row;

byteTmp=UnClear(LcdPixelBuffer[tmpRow][x+j],8-offset);

for(i=0;

level;

{

if(type==1)

{

SplitByte(PIXEL_BMP[index][i*width+j],offset,bytes);

}

elseif(type==2)

SplitByte(PIXEL_ENGLISH_CHAR[index-32][i*width+j],offset,bytes);

elseif(type==3)

SplitByte(PIXEL_CHINESE_CHAR[index][i*width+j],offset,bytes);

else

return;

/*if((offset<

height%8)&

&

(i==level-1))

byteTmp|=bytes[0];

LcdPixelBuffer[tmpRow++][x+j]=byteTmp|bytes[0];

byteTmp=bytes[1];

}*/

LcdPixelBuffer[tmpRow++][x+j]=byteTmp|bytes[0];

byteTmp=bytes[1];

}

LcdPixelBuffer[tmpRow][x+j]=byteTmp|LnClear(LcdPixelBuffer[tmpRow][x+j],(offset+height)%8);

CacheEnglishString

把ascii字符串写入全屏缓存(精确定位,右上角坐标可以为LCD上任意位置)

bytex横坐标:

bytewidth一个字符的宽度(位数)

byteheight一个字符的高度(位数)

bytebWidth字符间距

byte*dataPtr要显示的字符串(如:

"

Helloworld!

voidCacheEnglishString(bytex,bytey,bytewidth,byteheight,bytebWidth,byte*dataPtr)

bytei=0;

while(*dataPtr)

BufferPixelStuff(2,*dataPtr++,x+i*(width+bWidth),y,width,height);

i++;

CachePixel

画一个点到入全屏缓存中(精确定位,坐标可以为LCD上任意位置)

bytex横坐标:

bytey纵坐标:

bytewidth一个字符的宽度(位数)

byteheight一个字符的高度(位数)

LcdPixelModemode画点方式(PIXEL_CLEAR-->

擦除、PIXEL_DRAW-->

画点、PIXEL_XOR-->

取反)

voidCachePixel(bytex,bytey,LcdPixelModemode)

byterow;

byteoffset;

bytedata;

if(x>

LCD_X_RES)return;

if(y>

LCD_Y_RES)return;

row=y/8;

offset=y%8;

data=LcdPixelBuffer[row][x];

if(mode==PIXEL_CLEAR)

data&

=(~(0x01<

offset));

elseif(mode==PIXEL_DRAW)

data|=(0x01<

offset);

elseif(mode==PIXEL_XOR)

data^=(0x01<

LcdPixelBuffer[row][x]=data;

CommitBuffer

提交缓存,把当前缓存上的数据写到LCD上

voidCommitBuffer(void)

byterow,col;

LcdSetXY(0x00,0x00);

for(row=0;

row<

LCD_Y_RES/8;

row++)

for(col=0;

col<

LCD_X_RES;

col++)

LcdExec(LcdPixelBuffer[row][col],DC_DATA);

}

ClearBuffer

清空缓存

voidClearBuffer(void)

byterow,col;

for(row=0;

for(col=0;

LcdPixelBuffer[row][col]=0x00;

PixelStuff.h

点阵数据

#ifndefPIXEL_STUFF_H

#definePIXEL_STUFF_H

数组名:

PIXEL_ENGLISH_CHAR

5X7ASCII点阵数据

constunsignedcharPIXEL_ENGLISH_CHAR[][5]=

{0x00,0x00,0x00,0x00,0x00},//sp

{0x00,0x00,0x2f,0x00,0x00},//!

{0x00,0x07,0x00,0x07,0x00},//"

{0x14,0x7f,0x14,0x7f,0x14},//#

{0x24,0x2a,0x7f,0x2a,0x12},//$

{0xc4,0xc8,0x10,0x26,0x46},//%

{0x36,0x49,0x55,0x22,0x50},//&

{0x00,0x05,0x03,0x00,0x00},//'

{0x00,0x1c,0x22,0x41,0x00},//(

{0x00,0x41,0x22,0x1c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1