诺基亚5110 LCD屏幕驱动程序.docx

上传人:b****6 文档编号:5639083 上传时间: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

诺基亚5110LCD屏幕驱动程序

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

文件名:

Nokia5110Lcd.h

描述:

诺基亚5110LCD驱动头文件

作者:

xylch101

编辑器:

Notepad2

日期:

2008年06月27日

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

#ifndefNOKIA_5110_LCD_H

#defineNOKIA_5110_LCD_H

//宽高像素

#defineLCD_X_RES84

#defineLCD_Y_RES48

//管脚配置(atmega16L)自行修改

#defineLCD_DC_PIN(1<<2)//P4.2D/C

#defineLCD_CE_PIN(1<<4)//P4.4/SCE

#defineSPI_MOSI_PIN(1<<1)//P4.1DIN

#defineLCD_RST_PIN(1<<3)//P4.3/RST

#defineSPI_CLK_PIN(1<<0)//P4.0/SCLK

#defineDIN_0()P4OUT&=~SPI_MOSI_PIN

#defineDIN_1()P4OUT|=SPI_MOSI_PIN

#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;

//枚举画点类型选择

typedefenum

{

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驱动源文件

作者:

xylch101

编辑器:

Notepad2

日期:

2008年06月27日

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

#include"Nokia5110Lcd.h"

#include"PixelStuff.h"//中、英文字、图片字模

//全屏缓存(6x84bytes)

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

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

函数名:

LcdInit

功能:

LCDSPI初始化

参数:

返回:

编辑器:

Notepad2

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

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_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

返回:

编辑器:

Notepad2

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

voidLcdSetContrast(bytecontrast)

{

LcdExec(0x21,DC_CMD);

LcdExec(0x80|contrast,DC_CMD);

LcdExec(0x20,DC_CMD);

}

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

函数名:

LcdSetXY

功能:

设置LCD当前坐标

参数:

byteX横坐标:

0~83

byteY纵坐标:

0~05

返回:

编辑器:

Notepad2

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

voidLcdSetXY(byteX,byteY)

{

LcdExec(0x40|Y,DC_CMD);//行

LcdExec(0x80|X,DC_CMD);//列

}

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

函数名:

LcdExec

功能:

执行LCD指令/数据

参数:

bytedata指令/数据值

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

返回:

编辑器:

Notepad2

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

voidLcdExec(bytedata,LcdExecTypedc)

{

unsignedchari=0;

P4OUT&=~LCD_CE_PIN;

if(dc==DC_DATA)

{

P4OUT|=LCD_DC_PIN;

}

else

{

P4OUT&=~LCD_DC_PIN;

}

for(i=0;i<8;i++)//串行写入八位数据先写高位上升沿写入

{

if(data&0x80)

DIN_1();

else

DIN_0();

SCLK_0();

data=data<<1;

SCLK_1();

}

//SPDR=data;

//while((SPSR&0x80)!

=0x80);

P4OUT|=LCD_CE_PIN;

}

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

函数名:

UnClear

功能:

高n位清零

参数:

bytedata8位数据

byten清零多少位

返回:

byte清零后的结果

举例:

data取11111000n取3-->00011000

编辑器:

Notepad2

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

byteUnClear(bytedata,byten)

{

bytetmpData,i;

tmpData=0;

for(i=0;i

{

tmpData|=(1<<(7-i));

}

return(data&(~tmpData));

}

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

函数名:

LnClear

功能:

低n位清零

参数:

bytedata8位数据

byten清零多少位

返回:

byte清零后的结果

举例:

data取00011111n取3-->00011000

编辑器:

Notepad2

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

byteLnClear(bytedata,byten)

{

bytetmpData,i;

tmpData=0;

for(i=0;i

{

tmpData|=(1<

}

return(data&(~tmpData));

}

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

函数名:

SplitByte

功能:

一个字节拆成两个字节

参数:

bytedata8位数据

bytenByLow从低位起多少位拆开

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

返回:

举例:

data取11111111nByLow取2-->bytes[0]=11111100、bytes[1]=00000011

编辑器:

Notepad2

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

voidSplitByte(bytedata,bytenByLow,bytebytes[2])

{

bytes[0]=data<

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横坐标:

0~83

bytey纵坐标:

0~47

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

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

返回:

编辑器:

Notepad2

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

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

{

tmpRow=row;

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

for(i=0;i

{

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

{

byteTmp|=bytes[0];

}

else

{

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横坐标:

0~83

bytey纵坐标:

0~47

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

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

bytebWidth字符间距

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

"Helloworld!

")

返回:

编辑器:

Notepad2

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

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横坐标:

0~83

bytey纵坐标:

0~47

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

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

LcdPixelModemode画点方式(PIXEL_CLEAR-->擦除、PIXEL_DRAW-->画点、PIXEL_XOR-->取反)

返回:

编辑器:

Notepad2

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

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<

}

elseif(mode==PIXEL_DRAW)

{

data|=(0x01<

}

elseif(mode==PIXEL_XOR)

{

data^=(0x01<

}

LcdPixelBuffer[row][x]=data;

}

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

函数名:

CommitBuffer

功能:

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

参数:

返回:

编辑器:

Notepad2

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

voidCommitBuffer(void)

{

byterow,col;

LcdSetXY(0x00,0x00);

for(row=0;row

{

for(col=0;col

{

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

}

}

}

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

函数名:

ClearBuffer

功能:

清空缓存

参数:

返回:

编辑器:

Notepad2

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

voidClearBuffer(void)

{

byterow,col;

for(row=0;row

{

for(col=0;col

{

LcdPixelBuffer[row][col]=0x00;

}

}

}

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

文件名:

PixelStuff.h

描述:

点阵数据

作者:

xylch101

编辑器:

Notepad2

日期:

2008年06月27日

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

#ifndefPIXEL_STUFF_H

#definePIXEL_STUFF_H

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

数组名:

PIXEL_ENGLISH_CHAR

功能:

5X7ASCII点阵数据

编辑器:

Notepad2

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

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

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

当前位置:首页 > PPT模板 > 其它模板

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

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