12864液晶深入学习笔记2——基于msp430g2553
[复制链接]
接上一篇。。。。
7,下面的代码是控制液晶全屏显示图片,代码如下: //程序功能:在12864液晶上显示两幅图片,一个为阴码图片,一个为阳码图片 // * 本程序我已经试过,调通,可以使用 液晶是有两根线WR EN 串行控制的 // * 这里是液晶的串行连接控制,可以大大节省单片机的IO口,但是数据处理起来要比并行连接的要慢,所以如果要求显示内容数据较大, // * 对显示的实时性要求较高的话(比如连续显示多幅图画,演示动画等), 应该考虑并行连接。如果单片机的IO口不够,或对显示内容的容 // * 量和实时性要求不高的话,可以考虑用串行连接的方式
//有可能是因为msp430g2553的处理能力较强,我现在用串行连接方式,显示下面的几幅图画,显示效果很好,看不出有什么数据传输速度慢的问题
//msp430g2553有16K的flash 512 B的RAM 所以可以存放的下几张图片的数据的 #include "msp430g2553.h" #include "ser_12864.h" #include "qq.h" //要显示图片的数据信息 void main(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串行控制液晶的,是可以直接用的。把上面的代码看明白,液晶的基本功能应该就掌握了,下面就在贴出一些常用的显示函数,这些函数都是我经常用的,很不错: //// { uchar pos=0;//初始化
uchar cnt=0;//传递过来的是指针 ,cnt为偏移量,然后一个字符一个字符的写入。 switch(y0) { case 0: pos=0x80+x;break; case 1: pos=0x90+x;break; case 2: pos=0x88+x;break; case 3: pos=0x98+x;break; default: break; } wr_lcd(comm,pos);//写地址
while(*(p+cnt)!='\0') { wr_lcd(dat,*(p+cnt));//写数据 cnt++; }; }
//******************************************************************************************* void wr_int(uchar x,uchar y0,uint NUM) //**********************************************整型数据显示 { uchar a_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]='\0'; //加上字符串的计数标志 wr_string(x,y0,a_SHOW);
}
//******************************************************************************************* void wr_float(uchar x,uchar y0,float NUM) //********************************8浮点型数据显示 { uchar a_SHOW[7]; long int t; 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';//shi fen a_SHOW[4]=(t/10)+'0'; //bai fen a_SHOW[5]=t+'0'; //qian fen
a_SHOW[6]='\0'; 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实时显示曲线图,演示动画我还没有做,做好了再补上来。其实把前面的掌握了,应该不难的。
|