完整的NOKIA 5110液晶51单片机驱动程序Word文档格式.docx
《完整的NOKIA 5110液晶51单片机驱动程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《完整的NOKIA 5110液晶51单片机驱动程序Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
voidLCD_Init(void);
voidLCD_WriteByte(unsignedchardat,unsignedcharcommand);
voidLCD_Set_XY(unsignedcharX,unsignedcharY);
voidLCD_Clear(void);
voidLCD_WriteChar(unsignedcharx,unsignedchary,unsignedcharc);
voidLCD_WriteString(unsignedcharX,unsignedcharY,char*s);
voidLCD_WriteNum(unsignedcharX,unsignedcharY,unsignedintnum);
voidLCD_Write_12X16Font(unsignedcharx,unsignedchary,unsignedcharc[2]);
voidLCD_DrawPicture(unsignedcharX,unsignedcharY,unsignedcharconst*map,
unsignedcharPix_x,unsignedcharPix_y);
*函数名:
LCD_Init
*功能:
初始化LCD
*参数:
无
*返回值:
*备注:
voidLCD_Init(void)
{
unsignedchari;
LCD_RST=0;
//复位
for(i=0;
i<
150;
i++);
LCD_RST=1;
LCD_WriteByte(0x21,0);
//使用扩展命令设置LCD模式
LCD_WriteByte(0xc0,0);
//设置偏置电压,修改可改变5110点阵显示的亮度
/*5110接5V时偏置电压改为(0xa7,0),接3.3V时改为(0xc0,0)*/
LCD_WriteByte(0x20,0);
//使用基本命令。
并设置V=0,水平寻址
LCD_Clear();
//清屏
LCD_WriteByte(0x0c,0);
//设定显示模式,正常显示(普通显示)
LCD_CE=0;
}
LCD_WriteByte
模拟SPI接口时序写数据/命令LCD
data:
写入的数据;
command:
写数据
(1)/命令选择(0);
voidLCD_WriteByte(unsignedchardat,unsignedcharcommand)
//5110片选有效,允许输入数据
if(command==0)//写命令
LCD_DC=0;
else
LCD_DC=1;
//写数据
8;
i++)//传送8bit数据
{
if(dat&
0x80)
LCD_DIN=1;
else
LCD_DIN=0;
LCD_CLK=0;
dat=dat<
<
1;
LCD_CLK=1;
}
LCD_CE=1;
//禁止5110
LCD_Set_XY
设置LCD坐标
X:
0-83Y:
0-5
voidLCD_Set_XY(unsignedcharX,unsignedcharY)
LCD_WriteByte(0x40|Y,0);
//column列
LCD_WriteByte(0x80|X,0);
//row行
}
LCD_Clear
LCD清屏函数
无
voidLCD_Clear(void)
unsignedchart;
unsignedchark;
LCD_Set_XY(0,0);
//设置RAM起始地址
for(t=0;
t<
6;
t++)
for(k=0;
k<
84;
k++)
LCD_WriteByte(0x00,1);
}
LCD_WriteChar
LCD写一个6X8的字符
c
备注:
voidLCD_WriteChar(unsignedcharx,unsignedchary,unsignedcharc)
c-=32;
//数组的行号
LCD_Set_XY(x,y);
i<
12;
i++)
{
LCD_WriteByte(font6x12[c][i],1);
if(i==5)
y++;
LCD_WriteString
LCD写6X8的字符串
X,Y,S
voidLCD_WriteString(unsignedcharX,unsignedcharY,char*s)
while(*s)
LCD_WriteChar(X,Y,*s);
s++;
X+=6;
LCD_WriteNum(unsignedintnum)
写入数字
num
****************************************************************
voidLCD_WriteNum(unsignedcharX,unsignedcharY,unsignedintnum)
unsignedcharstr[8],i=0,len=0;
unsignedinttemp;
temp=num;
while(temp)
temp/=10;
len++;
if(!
num)
str[0]=0x30;
str[len]=0;
while(num)
str[len-i-1]=num%10+0x30;
num/=10;
i++;
LCD_WriteString(X,Y,(char*)str);
LCD_Write_16X16Font
写一个16X16的汉字
x,y,c[2]x:
0-83y:
voidLCD_Write_12X16Font(unsignedcharx,unsignedchary,unsignedcharc[2])
unsignedchari,k;
k<
25;
k++)//K的值表示汉字库最多存放的字的数量(可改大)
if((font12x16[k].Index[0]==c[0])&
&
(font12x16[k].Index[1]==c[1]))
24;
LCD_WriteByte(font12x16[k].Msk[i],1);
if(i==11)
LCD_DrawPicture
绘图
X、Y:
位图绘制的起始X、Y坐标;
*map:
位图点阵数据;
Pix_x:
位图像素(长)<
=84
Pix_y:
位图像素(宽)<
=48
unsignedcharPix_x,unsignedcharPix_y)
unsignedinti,n;
unsignedcharrow;
//计算位图所占行数
if(Pix_y%8==0)//如果为位图所占行数为整数
row=Pix_y/8;
row=Pix_y/8+1;
//如果为位图所占行数不是整数
LCD_Set_XY(X,Y);
for(n=0;
n<
row;
n++)//换行
for(i=0;
Pix_x;
i++)
{
LCD_Set_XY(X+i,Y+n);
LCD_WriteByte(map[i+n*Pix_x],1);
}
-------main函数--------
主函数
voidmain()
{
LCD_Init();
while
(1)
LCD_WriteNum(0,0,123);
//写入数字int型的
LCD_WriteNum(18,0,7);
LCD_WriteNum(24,0,9);
LCD_WriteChar(48,0,'
I'
);
//写一个6X8的字符
LCD_WriteChar(54,0,'
J'
LCD_WriteChar(60,0,'
K'
LCD_WriteString(0,2,"
jhf"
//写6X8的字符串
LCD_DrawPicture(32,2,gImage_1,16,16);
//绘图
LCD_Write_12X16Font(12,4,"
我"
//写一个16X16的汉字
LCD_Write_12X16Font(24,4,"
是"
LCD_Write_12X16Font(36,4,"
中"
LCD_Write_12X16Font(48,4,"
国"
LCD_Write_12X16Font(60,4,"
银"
/////////////////////////////////////////以下是font.h的内容///////////////////////////////////////////////////
该font.h文件中包含的是5110显示所用的ASCII、部分汉字、
及图片字模。
取模软件使用“PCtoLCD2002”,取模方式选项:
阴码、逆向、列行式、十六进制数。
汉字取模:
宽12、高12
//6x8font
//1pixelspaceatleftandbottom
//index=ASCII-32
codeunsignedcharfont6x12[][12]=
/*--文字:
--*/
/*--宋体9;
此字体下对应的点阵为:
宽x高=6x12--*/
/*--高度不是8的倍数,现调整为:
宽度x高度=6x16--*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
!
{0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},
"
{0x00,0x0C,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
#--*/
{0x90,0xD0,0xBC,0xD0,0xBC,0x90,0x00,0x03,0x00,0x03,0x00,0x00},
$--*/
{0x18,0x24,0xFE,0x44,0x8C,0x00,0x03,0x02,0x07,0x02,0x01,0x00},
%--*/
{0x18,0x24,0xD8,0xB0,0x4C,0x80,0x00,0x03,0x00,0x01,0x02,0x01},
&
{0xC0,0x38,0xE4,0x38,0xE0,0x00,0x01,0x02,0x02,0x01,0x02,0x02},
'
{0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
(--*/
{0x00,0x00,0x00,0xF8,0x04,0x02,0x00,0x00,0x00,0x01,0x02,0x04},
)--*/
{0x00,0x02,0x04,0xF8,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0x00},
*--*/
{0x90,0x60,0xF8,0x60,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00},
+--*/
{0x20,0x20,0xFC,0x20,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00},
--*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00},
---*/
{0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
.--*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},
/--*/
{0x00,0x80,0x60,0x1C,0x02,0x00,0x04,0x03,0x00,0x00,0x00,0x00},
0--*/
{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},
1--*/
{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},
2--*/
{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00},
3--*/
/*--高度不是8