一步一步学MSP430FR5739之LCD.docx

上传人:b****4 文档编号:26926345 上传时间:2023-06-24 格式:DOCX 页数:17 大小:949.61KB
下载 相关 举报
一步一步学MSP430FR5739之LCD.docx_第1页
第1页 / 共17页
一步一步学MSP430FR5739之LCD.docx_第2页
第2页 / 共17页
一步一步学MSP430FR5739之LCD.docx_第3页
第3页 / 共17页
一步一步学MSP430FR5739之LCD.docx_第4页
第4页 / 共17页
一步一步学MSP430FR5739之LCD.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

一步一步学MSP430FR5739之LCD.docx

《一步一步学MSP430FR5739之LCD.docx》由会员分享,可在线阅读,更多相关《一步一步学MSP430FR5739之LCD.docx(17页珍藏版)》请在冰豆网上搜索。

一步一步学MSP430FR5739之LCD.docx

一步一步学MSP430FR5739之LCD

一步一步学MSP430FR5739之LCD5110

OS:

Windows8Pro32bit

IDE:

CodeComposerStudiov5.1.1

Board:

TIMSP430FR5739

今天要做的就是给MSP430FR5739配一个LCD。

第一步WDTCTL=WDTPW+WDTHOLD;//StopWDT

1、首先定义好相应管教

P2DIR=BIT5+BIT6;//设置I/O口的方向

P1DIR=BIT0+BIT1+BIT2;

#defineDIN_HP1OUT|=BIT1

#defineDIN_LP1OUT&=~BIT1

#defineCLK_HP1OUT|=BIT0

#defineCLK_LP1OUT&=~BIT0

#defineDC_HP1OUT|=BIT2

#defineDC_LP1OUT&=~BIT2

#defineCE_HP2OUT|=BIT5

#defineCE_LP2OUT&=~BIT5

#defineRST_HP2OUT|=BIT6

#defineRST_LP2OUT&=~BIT6

2、调用LCD初始化程序

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

**名称:

LCD_Init(void)

**功能:

初始化液晶

**说明:

**备注:

**日期:

2011年2月27日

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

voidLCD_Init(void)

{

P2DIR=BIT5+BIT6;//+BIT4+BIT0+BIT1;//设置P4口的方向

P1DIR=BIT0+BIT1+BIT2;

RST_L;//复位

RST_H;

write_command(0x21);//工作模式,水平寻址,扩展指令

write_command(0x13);//设置偏置系统(BSx)1:

48

write_command(0xc8);//设置电压VLCD=3.06+0.06*Vop,对比度调整

write_command(0x06);//VLCD温度系数2

write_command(0x20);//工作模式,水平寻址,常规指令

write_command(0x0c);//普通模式

write_command(0x40);//起始页地址0

write_command(0x80);//起始列地址0

LCD_clear();//清全屏

}

3、调用其他需要的函数

display_chinese_string_huanhang(1,0,4,Characters[0]);

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

**名称:

display_chinese_string_huanhang(ucharx,uchary,ucharn,constuchar*str)

**功能:

输出一串16*16的汉字

**说明:

x:

0-4

y:

0-2

n:

要显示汉字的个数

str:

汉字的首地址

**备注:

每行最多只能显示5个汉字(n*16<=84)并且可以换行显示

**日期:

2011年2月27日

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

voiddisplay_chinese_string_huanhang(ucharx,uchary,ucharn,constuchar*str)

{

uchari;

for(i=0;i

{

display_chinese(x++,y,str+i*32);

if(x==5)

{

x=0;

y++;

}

}

}

代码:

 

LCD5110说明:

]

(申明以下内容部分来自Baidu文库)

Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。

使用Nokia5110液晶的四大理由

1)    性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。

Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD12864一般50~70元。

2)    接口简单,仅四根I/O线即可驱动,LCD1602需11根I/O线,LCD12864需12根。

3)    速度快,是LCD12864的20倍,是LCD1602的40倍。

4)    Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。

 

Nokia5110原理图:

 

商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。

Nokia5110和Nokia3110是兼容的,用的都是同一款驱动芯片PHILIPSPCD8544。

(1)  SPI接口时序写数据/命令

Nokia5110(PCD8544)的通信协议是一个没有MISO只有MOSI的SPI协议,如果单片机有富裕的SPI接口,也可以利用硬件SPI,但通常没有必要,只需要软件程序模拟即可。

 

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

**名称:

write_command(ucharcmd)

**功能:

向液晶中写命令

**说明:

cmd:

要写的命令

**备注:

**日期:

2011年2月27日

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

voidwrite_command(ucharcmd)

{

uchari;

CE_L;//允许写入数据

DC_L;//DC=0写入命令

for(i=0;i<8;i++)

{

if(cmd&0x80)

DIN_H;

else

DIN_L;

CLK_L;//上升沿采样

cmd<<=1;

CLK_H;

}

CE_H;//禁止写入

}

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

**名称:

write_data(uchardat)

**功能:

向液晶中写入数据

**说明:

dat:

待写入的数据

**备注:

参考数据手册

**日期:

2011年2月27日

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

voidwrite_data(uchardat)

{

uchari;

CE_L;//

DC_H;

for(i=0;i<8;i++)

{

if(dat&0x80)

DIN_H;

else

DIN_L;

CLK_L;

dat<<=1;

CLK_H;

}

CE_H;

}

(2)  Nokia5110的初始化

接通电源后,内部寄存器和RAM的内容是不确定的,这需要一个RES低电平脉冲复位一下。

当VDD变为高电平,达到VDDmin(或更高)之后,最多100ms,RST输入低电平(电平幅度<0.3VDD)。

 

5110复位时序

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

**名称:

LCD_Init(void)

**功能:

初始化液晶

**说明:

**备注:

**日期:

2011年2月27日

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

voidLCD_Init(void)

{

P2DIR=BIT5+BIT6;//+BIT4+BIT0+BIT1;//设置P4口的方向

P1DIR=BIT0+BIT1+BIT2;

RST_L;//复位

RST_H;

write_command(0x21);//工作模式,水平寻址,扩展指令

write_command(0x13);//设置偏置系统(BSx)1:

48

write_command(0xc8);//设置电压VLCD=3.06+0.06*Vop,对比度调整

write_command(0x06);//VLCD温度系数2

write_command(0x20);//工作模式,水平寻址,常规指令

write_command(0x0c);//普通模式

write_command(0x40);//起始页地址0

write_command(0x80);//起始列地址0

LCD_clear();//清全屏

}

(3)设置Nokia5110液晶的坐标

Nokia5110(PCD8544)的命令集:

 

命令字符解释:

要注意的是“功能设置”命令的“H”和“V”。

H=0使用基本指令集命令,H=1使用扩展指令集命令。

V=0水平寻址,V=1垂直寻址。

 

 

48*84点阵的格式如上图,数据以字节8bit为单位下载到PCD8544的48*84bit显示数据RAM矩阵。

列通过地址指针寻址,地址范围为X0~83(1010011),Y0~5(101)。

地址不允许超过这个范围。

 

 

在垂直寻址(V=1),Y地址在每个字节之后递增,经最后的Y地址(Y=5)之后,Y绕回0,X递增到下一列的地址。

 

 

在水平寻址模式(V=0),X地址在每个字节之后递增,经最后的X地址(X=83)之后,X绕回0,Y递增到下一行的地址。

经每一个最后地址之后(X=83,Y=5),地址指针绕回地址(X=0,Y=0)。

 

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

**名称:

set_pos(ucharx,uchary)

**功能:

设置RAM地址

**说明:

x:

0-83

y:

0-5

**备注:

参考数据手册

**日期:

2011年2月27日

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

voidset_pos(ucharx,uchary)

{

write_command(0x40|y);

write_command(0x80|x);//0

}

(4)显示英文字符

英文字符占用6*8个点阵,通过建立一个ASCII的数组font6x8[][6]来寻址。

而这个数字的行号对应(字符ASCII码-32)。

ASCII码表如下:

 

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

**名称:

display(ucharx,uchary,ucharc)

**功能:

液晶输出字符(6*8字符)

**说明:

x:

0-83

y:

0-5

c:

待显示的字符

**备注:

每行最多只能显示14个字符(6*n<=84)

**日期:

2011年2月27日

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

voiddisplay_char(ucharx,uchary,ucharc)

{

uchari;

c-=32;//获取地址指针

x*=6;//字宽

set_pos(x,y);//设置显示地址

for(i=0;i<6;i++)

write_data(font6x8[c][i]);//写入点阵数据

}

如要在NOKIA5110输出大写“A”,对应数组的行号为33,对应的元素为

{0x00,0x7C,0x12,0x11,0x12,0x7C},水平寻址(V=0)

 

NOKIA5110一行可以显示14个字符,可以显示六行。

(5)显示汉字

显示汉字可以采用两种点阵方式,一种是12*12点阵,一种是16*16点阵,网上也有一个自动提取字模的小软件“5110液晶显示屏汉字提取程序”,这个小程序只适用于水平寻址(V=0)。

5110液晶显示屏汉字提取程序下载:

采用12*12点阵汉字时,由于不是8的整数倍数,因此行与行之间只能隔开,这样才能完整显示一个汉字。

//欢

{0x0A,0x92,0x62,0x9E,0x02,0x18,0x87,0x74,0x84,0x14,0x0C,0x00,0x02,0x01,0x00,0x04,0x05,0x02,0x01,0x00,0x01,0x02,0x04,0x00},

 

12*12点阵

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

**名称:

display_chinese(ucharx,uchary,constuchar*str)

**功能:

显示单个16*16的汉字

**说明:

x:

0-4

y:

0-2

str:

汉字的首地址

**备注:

每行最多只能显示5个汉字(n*16<=84)

**日期:

2011年2月27日

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

voiddisplay_chinese(ucharx,uchary,constuchar*str)

{

uchari,j;

x*=16;//字宽

y*=2;//两行显示

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

{

set_pos(x,y+i);//设置显示的地址

for(j=0;j<16;j++)

{

write_data(str[j+i*16]);

}

}

}

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

当前位置:首页 > 法律文书 > 起诉状

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

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