新闻中心

EEPW首页>嵌入式系统>设计应用> 12864液晶深入学习笔记_2——基于msp430g2553

12864液晶深入学习笔记_2——基于msp430g2553

作者: 时间:2016-11-28 来源:网络 收藏
7,下面的代码是控制液晶全屏显示图片,代码如下:

//程序功能:在12864液晶上显示两幅图片,一个为阴码图片,一个为阳码图片

本文引用地址://m.amcfsurvey.com/article/201611/322840.htm

//*本程序我已经试过,调通,可以使用液晶是有两根线WREN串行控制的

//*这里是液晶的串行连接控制,可以大大节省单片机的IO口,但是数据处理起来要比并行连接的要慢,所以如果要求显示内容数据较大,

//*对显示的实时性要求较高的话(比如连续显示多幅图画,演示动画等),应该考虑并行连接。如果单片机的IO口不够,或对显示内容的容

//*量和实时性要求不高的话,可以考虑用串行连接的方式

//有可能是因为msp430g2553的处理能力较强,我现在用串行连接方式,显示下面的几幅图画,显示效果很好,看不出有什么数据传输速度慢的问题

//msp430g2553有16K的flash512B的RAM所以可以存放的下几张图片的数据的

#include"msp430g2553.h"

#include"ser_12864.h"

#include"qq.h"//要显示图片的数据信息

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//关狗

BCSCTL1=CALBC1_12MHZ;//设定cpu时钟DCO频率为12MHz

DCOCTL=CALDCO_12MHZ;

P2DIR|=BIT5+BIT4;//液晶的两条线

init_lcd();//初始化液晶

Clear_GDRAM();//清除GDRAM中的随机数据

//Draw_PM(qq1);

for(;;)

{

//wr_lcd(comm,0x34);//打开扩展功能模式,绘图显示关闭

////反白命令

//wr_lcd(comm,0x04);//同时反白1、3行

//wr_lcd(comm,0x05);//同时反白2、4行

//wr_lcd(comm,0x36);

//

//delay_ms(1000);

//

//wr_lcd(comm,0x34);

//wr_lcd(comm,0x04);//再次反白1、3行,相当于关闭1、3行反白

//wr_lcd(comm,0x05);//再次反白2、4行,相当于关闭2、4行反白

//wr_lcd(comm,0x36);

//delay_ms(1000);

Draw_PM(qq1);//显示图画显示阴码格式的图形

delay_ms(1000);//延迟观察液晶屏幕显示

Draw_PM(qq2);//显示阳码格式的图形

delay_ms(1000);

Draw_PM(zhu);

delay_ms(1000);//显示可爱猪的图片

Draw_PM(zifu);//显示汉字的图片

delay_ms(1000);

Draw_PM(monkey1);//显示猴子的阴码图片

delay_ms(1000);

Draw_PM(monkey2);//显示猴子的阳码图片

delay_ms(1000);

Draw_PM(QQ);//显示Q哥Q妹形象

delay_ms(1000);

Draw_PM(zhangbin);//显示我自己制作的字符图片

delay_ms(1000);

Draw_PM(dianxin0903xiaolian1);//显示我自己制作的字符图片阴码图片

delay_ms(1000);

Draw_PM(dianxin0903xiaolian2);//显示我自己制作的字符图片阳码图片

delay_ms(1000);

}

}

//本程序的功能实现了,是阴码格式的图形和阳码格式的图形交替循环显示

//我本想是用反白的方法实现这种效果的,但是没有成功,估计是因为反白不能同时整屏反白的缘故吧

8,好了,上面的代码是msp430g2553串行控制液晶的,是可以直接用的。把上面的代码看明白,液晶的基本功能应该就掌握了,下面就在贴出一些常用的显示函数,这些函数都是我经常用的,很不错:

////

{

ucharpos=0;//初始化

ucharcnt=0;//传递过来的是指针,cnt为偏移量,然后一个字符一个字符的写入。

switch(y0)

{

case0:pos=0x80+x;break;

case1:pos=0x90+x;break;

case2:pos=0x88+x;break;

case3:pos=0x98+x;break;

default:break;

}

wr_lcd(comm,pos);//写地址

while(*(p+cnt)!=)

{

wr_lcd(dat,*(p+cnt));//写数据

cnt++;

};

}

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

voidwr_int(ucharx,uchary0,uintNUM)//**********************************************整型数据显示

{

uchara_SHOW[5];

a_SHOW[0]=(NUM/1000)+0;//qian//只能显示数据的最后4位

a_SHOW[1]=(NUM/100)+0;//bai

a_SHOW[2]=(NUM/10)+0;//shi

a_SHOW[3]=NUM+0;//ge

a_SHOW[4]=;//加上字符串的计数标志

wr_string(x,y0,a_SHOW);

}

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

voidwr_float(ucharx,uchary0,floatNUM)//********************************8浮点型数据显示

{

uchara_SHOW[7];

longintt;

t=NUM*1000;//先乘以1000,再按整数方式显示,形式只能为xx.xxx,所以精度只能到小数点后三位

a_SHOW[0]=(t/10000)+0;//shi

a_SHOW[1]=(t/1000)+0;//ge

a_SHOW[2]=.;//

a_SHOW[3]=(t/100)+0;//shifen

a_SHOW[4]=(t/10)+0;//baifen

a_SHOW[5]=t+0;//qianfen

a_SHOW[6]=;

wr_string(x,y0,a_SHOW);

}

好了关于液晶方面就介绍到这里吧,介绍的比较粗糙。如果要更详细的介绍的话,可以参考液晶的手册。不过如果把上面的程序都看懂,弄明白的话,对液晶的一般应用应该是没问题的。

下面就介绍一下液晶显示图片所用到的取模软件的应用。

二,液晶取模软件的应用

要使用液晶显示图片,或字符型的图片,那么这幅图片的数据信息肯定是要的,而且这些数据往往都很庞大。那么如何来产生这些庞大的数据,靠我们手工编写,那个太不现实了。着就需要取模软件的帮助了。我用到的这款软件是PCtoLCD2002,作者是陈新汀,感谢作者提供了这么好用的一款软件。

这款软件功能强大,使用方便,下面我就我经常用到的一些功能介绍一下吧,更详细的介绍可以参考其他的资料。

下面的设置对应的为12864液晶的ST7920控制器,

一),用PCtoLCD2002液晶取模软件对图片取模,注意事项及常用设置如下:

1,PCtoLCD2002取模只支持.bmp格式的图像

2,用12864显示图片时,取模用的图片像素大小不要超过128*64,如果超过会出现一些问题。可以比它小

3,还可以调整像素位置,上下左右移动要显示图片的位置,也可以上下左右翻转,镜像等。

4,也可以针对每一个像素点进行编辑操作,对某一个像素点单击左键,显示。单击右键,取消显示,如果一直按住左键,就可以进行画图等操作了。

5,也可以只正对有像素点的图片范围进行取模,其他边上的空白不取模,这有可以减少数据量,节省存储容量。

6,也可以在PCtoLCD2002新建一个图片,然后设置像素的大小,然后就可以直接在上面进行绘图了,同样也是点击左键显示,点击右键取消显示。就好像是直接针对液晶屏进行绘图一样,然后可以保存。

7,如果在模式中选择为字符模式,就可以直接在该软件中输入要显示的字符,直接制作成字符图片。还可以更改字体,大小等字符属性。

8,12864液晶显示默认是逐行的,所以在取模时,一般选择逐行取模

9,因为在单片机向液晶传输数据时是高位在前,所以在取模时设置为顺向(高位在前)

10,输出数制选为16进制数

11,自定义格式选为C51格式,因为我们是用C语言进行编程的。如果是用汇编编程,选择A51格式

12,因为生成的数据最后要放在一个数组中,所以要去掉行前缀大括号,行后缀仅保留一个逗号。否则的话生成的数据的每一行的前面和后面都会有一对大括号。

二),如果想自己制作文字的图片,然后取模让液晶显示,除了直接在PCtoLCD2002中的字符模式中进行制作外,还可以使用windows自带的画图附件,使用设置方法如下:

1,在图像的属性选项中设置图像的分辨率:宽度为128,高度为64,其他的为默认值即可。点击确定。

2,然后可以向设置好的图纸上添加字符(点击左边工具栏上的A,添加字符),写入汉字,可以调节字符的大小字体等属性。好了之后,保存

3,因为PCtoLCD2002取模只支持.bmp格式的图像,所以保存时要保存成.bmp格式。(一般保存成24位图.bmp格式)

4,然后就可以按照对图片取模的方法,对刚刚制作保存的字符图片进行取模了。

按照上面的方法,应该就可以自己制作图片和字符图片的数据了。

好了,上面,对12864进行了比较全面但是相当粗糙的介绍,更全面详细的用法请参考数据手册。在使用液晶或者其他任何一款单片机或芯片时,最详细,最权威的资料永远都是它对应的数据手册。

一切其他的资料,无论多么的详细,丰富都是以手册为基础的,所以大家在使用是一定不用依赖这种资料,只能作为一种参考。遇到问题,自己多看手册,多思考,才能把知识转化为自己的。

使用12864实时显示曲线图,演示动画我还没有做,做好了再补上来。其实把前面的掌握了,应该不难的。



评论


技术专区

关闭