微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 12864液晶深入学习笔记_2——基于msp430g2553

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

时间:11-28 来源:互联网 点击:
7,下面的代码是控制液晶全屏显示图片,代码如下:

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

//*本程序我已经试过,调通,可以使用液晶是有两根线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);

}

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top