12864上打点及造字原理(st7920)

12864上打点及造字原理(st7920)

ID:47679492

大小:771.50 KB

页数:13页

时间:2020-01-26

12864上打点及造字原理(st7920)_第1页
12864上打点及造字原理(st7920)_第2页
12864上打点及造字原理(st7920)_第3页
12864上打点及造字原理(st7920)_第4页
12864上打点及造字原理(st7920)_第5页
资源描述:

《12864上打点及造字原理(st7920)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、[转载].教你在12864上打点(基于ST7920控制器)基于ST7920控制的12864液晶用于字符显示很方便的,但它绘图时先要关闭显示,绘完后又要打开,速度会较慢,不如不带字库的,但也可用。首先,绘图的基础其实就是画点。ST7920提供了用于绘图的GDRAM(graphdisplayRAM)。共64×32个字节的空间(由扩充指令设定绘图RAM地址),最多可以控制256×64点阵的二维绘图缓冲空间。在它的Datasheet给出了GDRAM的坐标地址对照表:用坐标表示,就是这样:它的横坐标每一个地址都是16位的。共16个地址,256位。很明显,它能

2、控制256*64像素的液晶屏,而我们的只是128*64像素液晶屏,显然只用到它的一部分。我刚开始以为它对应屏幕的绘图RAM是这样分布的(如红色部分):结果栽了大根头,后来终于弄明白,原来它对应屏幕的GDRAM是这样分布的:只要我们清楚了它的GDRAM和屏幕上像素点的映射(对应)关系,点亮对应的像素点就容易多了。要点亮某一个像素点,就是将这个像素点在GDRAM中对应的位置1打点步骤---------给你x,y的坐标,要你点亮一个点,首先,我们要确定这个点是在上半屏还是下半屏,然后确定它是在那一行(纵坐标Y),再确定它是在哪一个字节的哪一个位(也就是确

3、定它在那一列,即横坐标X),最后,将该位置1下面我们边写代码边讨论。因为这里仅仅是讨论如何在12864上打点的,而不是给12864写一个驱动,所以对于基本的数据读写函数,我们不做讨论,这里假设已经有了如下基本函数:viewsourceprint?1voidlcd_write_cmd(unsignedchar);  //lcd命令写2voidlcd_write_data(unsignedchar); //lcd数据写3unsigendcharlcd_read_data(void);  //lcd数据读为了方便,我们定义如下宏:1#define BAS

4、IC_SET  0x00         //基本指令集,2#define EXTEND_SET 0x00          //扩展指令集3#define DRAW_ON    0x10         //绘图显示开4#define DRAW_OFF   0x00          //绘图显示关点亮某一个点的函数(不完善):01voidlcd_set_dot(unsignedcharx,unsignedchary)02{03  unsignedcharx_byet,x_bit;       //在横坐标的哪一个字节,哪一个位04  unsig

5、nedchary_ping,y_bit;//在纵坐标的哪一屏,哪一行05  x_byte=x/16;               //算出它在哪一个字节(地址)06                                      //注意一个地址是16位的07  x_bit=x%16;                    //算出它在哪一个位08  y_ping=y/32;                //确定在上半屏还是下半屏,0:上半屏1:下半屏11  y_bit=y%32;                    //y_bit确

6、定它是在第几行12  lcd_write_cmd(EXTEND_SET);         //扩展指令集13  lcd_write_cmd(DRAW_OFF);           //绘图显示关闭,绘图前要先关闭14  lcd_write_cmd(0x80+y_bit);       //先写垂直地址(第几行),绘图要先写垂直地址16  lcd_write_cmd(0x80+x_byte+8*y_ping);  //再写水平地址,下半屏的水平坐标起始地址为0x88,(+8*y_byte)就是用来确定在上半屏还是下半屏19  if(x_bit<8

7、)                              //如果x_bit位数小于820  {21      lcd_write_data(0x01<<(7-x_bit));    //写高字节。因为坐标是从左向右的22                                               //GDRAM高位在左,底位在右23      lcd_write_data(0x00);                   //低字节全部填024  }25  else26  {27      lcd_write_data(0x0

8、0);                   //高字节全部填0低字节打入相应的点28      lcd_write_dat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。