4143|2

2781

帖子

419

TA的资源

五彩晶圆(中级)

楼主
 

12864液晶深入学习笔记2——基于msp430g2553 [复制链接]

接上一篇。。。。

7,下面的代码是控制液晶全屏显示图片,代码如下:
//程序功能:在12864液晶上显示两幅图片,一个为阴码图片,一个为阳码图片
// * 本程序我已经试过,调通,可以使用   液晶是有两根线WR  EN 串行控制的
// * 这里是液晶的串行连接控制,可以大大节省单片机的IO口,但是数据处理起来要比并行连接的要慢,所以如果要求显示内容数据较大,
// * 对显示的实时性要求较高的话(比如连续显示多幅图画,演示动画等), 应该考虑并行连接。如果单片机的IO口不够,或对显示内容的容
// * 量和实时性要求不高的话,可以考虑用串行连接的方式

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

//msp430g255316Kflash  512 BRAM 所以可以存放的下几张图片的数据的
#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);            //同时反白13
//  wr_lcd(comm,0x05);            //同时反白24
//  wr_lcd(comm,0x36);
//
//  delay_ms(1000);
//
//  wr_lcd(comm,0x34);
//  wr_lcd(comm,0x04);            //再次反白13行,相当于关闭13行反白
//  wr_lcd(comm,0x05);            //再次反白24行,相当于关闭24行反白
//  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);   //显示QQ妹形象
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液晶取模软件对图片取模,注意事项及常用设置如下:
   1PCtoLCD2002取模只支持.bmp格式的图像
   2用12864显示图片时,取模用的图片像素大小不要超过128*64,如果超过会出现一些问题。可以比它小
   3,还可以调整像素位置,上下左右移动要显示图片的位置,也可以上下左右翻转,镜像等。
   4,也可以针对每一个像素点进行编辑操作,对某一个像素点单击左键,显示。单击右键,取消显示,如果一直按住左键,就可以进行画图等操作了。
   5,也可以只正对有像素点的图片范围进行取模,其他边上的空白不取模,这有可以减少数据量,节省存储容量。
   6,也可以在PCtoLCD2002新建一个图片,然后设置像素的大小,然后就可以直接在上面进行绘图了,同样也是点击左键显示,点击右键取消显示。就好像是直接针对液晶屏进行绘图一样,然后可以保存。
   7,如果在模式中选择为字符模式,就可以直接在该软件中输入要显示的字符,直接制作成字符图片。还可以更改字体,大小等字符属性。
  812864液晶显示默认是逐行的,所以在取模时,一般选择逐行取模
  9,因为在单片机向液晶传输数据时是高位在前,所以在取模时设置为顺向(高位在前)
  10,输出数制选为16进制数
  11,自定义格式选为C51格式,因为我们是用C语言进行编程的。如果是用汇编编程,选择A51格式
  12,因为生成的数据最后要放在一个数组中,所以要去掉行前缀大括号,行后缀仅保留一个逗号。否则的话生成的数据的每一行的前面和后面都会有一对大括号。

二),如果想自己制作文字的图片,然后取模让液晶显示,除了直接在PCtoLCD2002中的字符模式中进行制作外,还可以使用windows自带的画图附件,使用设置方法如下:
1,在图像的属性选项中设置图像的分辨率:宽度为128,高度为64,其他的为默认值即可。点击确定。
2,然后可以向设置好的图纸上添加字符(点击左边工具栏上的A,添加字符),写入汉字,可以调节字符的大小字体等属性。好了之后,保存
3,因为PCtoLCD2002取模只支持.bmp格式的图像,所以保存时要保存成.bmp格式。(一般保存成24位图 .bmp格式)
4,然后就可以按照对图片取模的方法,对刚刚制作保存的字符图片进行取模了。

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

好了,上面,对12864进行了比较全面但是相当粗糙的介绍,更全面详细的用法请参考数据手册。在使用液晶或者其他任何一款单片机或芯片时,最详细,最权威的资料永远都是它对应的数据手册。
一切其他的资料,无论多么的详细,丰富都是以手册为基础的,所以大家在使用是一定不用依赖这种资料,只能作为一种参考。遇到问题,自己多看手册,多思考,才能把知识转化为自己的。

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


最新回复

好  详情 回复 发表于 2017-3-26 18:28
 
点赞 关注(2)
个人签名

回复
举报

6

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
lz应该把头文件也放上呀
 
 

回复

22

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表