我的12864学习笔记_3---控制12864液晶显示曲线

发布者:机器人总动员最新更新时间:2015-08-18 来源: eefocus关键字:学习笔记  12864液晶  显示曲线 手机看文章 扫描二维码
随时随地手机看文章
三,液晶显示曲线

    要想使用12864实现曲线的显示,必须先实现能够自由控制12864中的任意一个像素点的亮灭,而不能影响到相邻其他点的状态。

因为对12874液晶进行写操作的话,写入数据的最小单位也是一个16进制数,是8位的,能够控制8个像素点,所以,对液晶进行操作时,能够一次控制液晶的最少像素点数为8个。

所以要想控制液晶中的某一个点的亮灭,必须找到一种办法,使这一个点的数据的写入由写入这个16进制数来实现,而基本原则是不能影响其他7位数据的状态。所以要想实现控制某一个像素点,必须先知道目前液晶中在这个像素点左右其他7位的目前数据,然后把该点的数据按位加到这个数据上,而不能影响其他7位数据的状态。

实现知道目前显示的数据的方法有两种:1,实现液晶的读操作,把GDRAM中的对应的数据读出来,就可以了;2,人工构建一个虚拟的缓存寄存器(其实也就是一个二维数组),保存液晶GDRAM最后一次写入的数据,即是目前液晶显示的数据,因为保存的是8位的16进制数,所以128*64个像素点只需要16*64的数组就可以存储完了。在写12864的同时写虚拟寄存器,写之前读出虚拟寄存器的值与点位置相或,这样才不会覆盖之前的点。

 

因为msp430g2553的IO管脚有限,所以我的12864是串行连接的。而并行连接的话, 液晶的读操作并不难实现。现在串行的,虽然比较复杂一些,但很类似于串行的读操作,主要是看懂时序,然后严格按照时序就可以写出。我已经可以实现了液晶的读,写操作。读写操作的函数如下,其中注释的也比较详细:

//12864串行连接 写数据,写命令函数    按照手册上的时序进行编程

void wr_lcd(uchar dat_comm,uchar content)//

{ //              要写的数据

  uchar a,i,j;

      delay_us(50);

  a=content;

       LCD_SCLK0; //en=0;

       LCD_SID1;  //wr=1

  for(i=0;i<5;i++) //数据时序*****************8  前5个高电平的同步码

  {

  LCD_SCLK1;

  LCD_SCLK0;

  }

  LCD_SID0;       //wr=0  写操作

 

  LCD_SCLK1;      //en=1  来一个时钟

  LCD_SCLK0;      //en=0

  if(dat_comm)

  LCD_SID1;  //RS=1  写数据

  else

  LCD_SID0;   //RS=0  写指令

 

 

  LCD_SCLK1; //来一个时钟

  LCD_SCLK0;

 

  LCD_SID0;  //控制字的最后一位为0

 

  LCD_SCLK1;  //来一个时钟

  LCD_SCLK0;

 

   for(j=0;j<2;j++)//

{

  uchar i,j;

  uchar a=0;//a存放读取的数据

      delay_us(50);

       LCD_SCLK0; //en=0;

       LCD_SID1;  //wr=1

  for(i=0;i<5;i++) //数据时序*****************8 前5个高电平的同步码

  {

  LCD_SCLK1;

  LCD_SCLK0;

  }

  LCD_SID1;       //wr=1 读操作

 

  LCD_SCLK1;      //en=1  来一个时钟

  LCD_SCLK0;      //en=0

 

  LCD_SID1;   //RS=1  读数据

 

 

 

  LCD_SCLK1; //来一个时钟

  LCD_SCLK0;

 

  LCD_SID0;  //控制字的最后一位为0

 

  LCD_SCLK1;  //来一个时钟

  LCD_SCLK0;

 

   for(j=0;j<2;j++)/

void Draw_Point(unsigned char x,unsigned char y0,unsigned char color)

{

   unsigned char row,collum,cbite;

   unsigned char tempH,tempL;

   wr_lcd(comm,0x34);      //打开扩展指令集

   wr_lcd(comm,0x36);     //打开绘图显示

 

 

//   uchar y_Byte,y_bit,x_Byte,x_bit;

//   y_Byte y/32; //0:上半屏幕1:下半屏幕

//   y_bit y2; //y 的行号

//   x_Byte x/16; //x 的列号

//   x_bit x; //x 的位

//   Write_Cmd(0x34); //打开扩展指令集

//   Write_Cmd(0x36); //打开绘图显示

//   Write_Cmd(0x80+31-y_bit);

//   Write_Cmd(0x80+x_Byte+(1-y_Byte)*8);

 

   collum=x>>4;   //右移4位  相当于除以16取整,得到的是x的所在大列的列号

   cbite=x&0x0f;

 

   if(y0<32)

    row=y0;

   else

   {

   row=y0-32;

   collum+=8;

}

 

   wr_lcd(comm,0x80+row);   //先设定垂直位置

   wr_lcd(comm,0x80+collum);  //再设定水平位置

//上面两句指定了地址,下面先读出目前的数据,然后再写入新的数据

 rd_lcd();   //读操作  要先执行一次空读指令

 tempH=rd_lcd();  //两次读操作

 tempL=rd_lcd();

 

 //因为没进行一次读或写操作,地址指针AC都会自加1,所以下面要重新输入地址  同样还是先输入垂直地址,然后再输入水平地址

 wr_lcd(comm,0x80+row);

 wr_lcd(comm,0x80+collum);

 if (color)   //color=1,点亮;color=0,擦除

 {

 if(cbite<8)

 {

 tempH|=(1<<(7-cbite));

 //tempL=(1<<(7-cbite));

 }

 else

 {

 //tempH=(1<<(15-cbite));

 tempL|=(1<<(15-cbite));

 }

 }

 else

 {

    if(cbite<8)

 {

 tempH&=~(1<<(7-cbite));

 //tempL=(1<<(7-cbite));

 }

 else

 {

 //tempH=(1<<(15-cbite));

 tempL&=~(1<<(15-cbite));

 }

 }

 wr_lcd(dat,tempH);  //写入数据

 wr_lcd(dat,tempL);

 wr_lcd(comm,0x30);  //回到基本指令集

}

 

 

使用上面的函数,就可以实现对任意一个像素点的亮灭控制了。有了上面的函数,然后就可以实现控制液晶显示任意曲线或任意形状的图像了。下面就贴一个显示坐标轴的函数吧,函数实现的功能是在液晶屏上显示X,Y坐标轴,并且把坐标轴按每10个点进行分段,函数如下:

 

未完待续。。。

关键字:学习笔记  12864液晶  显示曲线 引用地址:我的12864学习笔记_3---控制12864液晶显示曲线

上一篇:我的12864学习笔记_4---几点补充详解
下一篇:12864液晶深入学习笔记_2——基于msp430g2553

推荐阅读最新更新时间:2024-03-16 14:29

STM32学习笔记五:初识库函数
固件库文件分析: 1-汇编编写的启动文件 startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界 2-时钟配置文件 system_stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M。 3-外设相关的 stm32f10x.h:实现了内核之外的外设的寄存器映射 xxx:GPIO、USRAT、I2C、SPI、FSMC stm32f10x_xx.c:外设的驱动函数库文件 stm32f10x_xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明 4-内核相关的 CMSIS - Cortex 微控制器
[单片机]
STM32<font color='red'>学习</font><font color='red'>笔记</font>五:初识库函数
STM32中关于HC-05的学习笔记
使用单片机与手机进行通信 接线问题: HC-05的RX,TX与单片机的PA9,PA10对应相接。至于连接在ATK MODULE 端口中下RX,TX相连无法接受,有待与进一步研究 待续... 下面带上可行的程序: #include stm32f10x.h #include stm32f10x_rcc.h #include stm32f10x_gpio.h #include stm32f10x_usart.h #include stm32f10x_crc.h #include system_stm32f10x.h #include stdio.h #include delay.h
[单片机]
AD转换之光敏电阻AIN2 ---- 学习笔记
一、逐次逼近式ADC的转换原理 逐次逼近式AD转换器与计数式A/D转换类似,只是数字量由“逐次逼近寄存器SAR”产生。SAR使用“对分搜索法”产生数字量,以8位数字量为例,SAR首先产生8位数字量的一半,即10000000B,试探模拟量Vi的大小,若Vn Vi,清除最高位,若Vn Vi,保留最高位。在最高位确定后,SAR又以对分搜索法确定次高位,即以低7位的一半y1000000B(y为已确定位) 试探模拟量Vi的大小。在bit6确定后,SAR以对分搜索法确定bit5位,即以低6位的一半yy100000B(y为已确定位) 试探模拟量的大小。重复这一过程,直到最低位bit0被确定,转换结束。 二、时序图与引脚 三、代
[单片机]
AD转换之光敏电阻AIN2 ---- <font color='red'>学习</font><font color='red'>笔记</font>
STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)
RTC: RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。 RCC_BDCR:备份域控制寄存器。其LSEON、LSEBYP、RTCSEL和RTCEN位处于备份域,在复位后处于写保护状态,只有在电源控制寄存器(PWR_CR)中的DBP位置 1 后才能对这些位进行改动;这些位只能由备份域复位清除。 备份域复位:软件复位,RCC_BDCR 寄存器 BDRST位置1产生; 在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。 系统复位后,对后备寄存器和RTC的访问被禁止,执行以下操作将使能对后备寄存器和RTC的访
[单片机]
STM32<font color='red'>学习</font><font color='red'>笔记</font>之RTC(实时时钟)和BKP(备份寄存器)
C0851F410与12864液晶显示
#include C8051F410.h #define uchar unsigned char #define LCMdata P2 #define Busy 0x80 sbit RS = P1^3; sbit RW = P1^4; sbit E = P1^5; sbit PSB = P1^6; sbit REST= P0^7; //sfr16 TMR2RL = 0xCA; // Timer2 Reload Register //sfr16 TMR2 = 0xCC; void Display_String(uchar line,uchar *string); void Wr_Data(uchar wrdat
[单片机]
STM32入门学习笔记之温湿度采集实验4
11.5 DS18B20例程 功能实现:读取DS18B20的温度显示在TFTLCD上。 (1)创建ds18b20.h文件,并输入以下代码。 #ifndef _DS18B20_H_ #define _DS18B20_H_ #include sys.h /********************************************************************************************************* 端 口 分 配 ********************************************
[单片机]
【IAR学习学习笔记
1、怎么生成.map文件: 4、IAR编译器默认支持的指针变量最大为0xFFFF,如果超过0XFFFF,则需要再OPTION内进行设置。Project-- Option-- General-- Target-- Data model选择Large。 原文有图片,请到原文看: http://www.52solution.com/bbs/redirect.php?tid=1128&goto=lastpost IAR学习笔记(摘抄) IAR for AVR 学习笔记(1)--数据类型 数据类型(编译器支持 ISO/ANSI C 基本数据类型和一些附加数据类型) 1.1. 整型数据 bool 数据类
[单片机]
12864液晶电子时钟+温度显示
上午花了一上午时间,用12864液晶写了一个电子时钟加温度传感器程序,先说一下程序的功能,可以实现显示年月日时间和温度, 年月日和时间是可通过按键调节的,调节相应的选项时,该选项会闪烁,并停止走时,当调节完毕后时钟恢复走时。现在将程序和思路写下来,以便日后查看和与大家探讨改进,欢迎高手提出宝贵意见。 我使用的是HJ12864M-1带字库液晶,所以在显示上稍微方便一点。下面先来说一下我的编程思路。时间更新用的是单片机自带的定时器,液晶要显示数字必需将它转换成ASCii码的形式,数字0-9的ASCii码与数字之间有一个定量的关系,当数字加上0x30之后便得到该数字的ASCii码,这样以来液晶更新数据就变得简单了。调节时
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved