MSP430驱动12864液晶程序.docx_第1页
MSP430驱动12864液晶程序.docx_第2页
MSP430驱动12864液晶程序.docx_第3页
MSP430驱动12864液晶程序.docx_第4页
MSP430驱动12864液晶程序.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*名 称:12864液晶操作程序功 能:本c文件封装了对12864液晶的一些简单的基本读写操作.封装函数: void Lcd_WriteCmd(unsigned char a); /写指令 void Lcd_WriteData(unsigned char a); /写数据 int Lcd_ReadCmd(); /读指令 int Lcd_ReadData(); /读数据 void Lcd_Init(); /初始化液晶 void Lcd_XY(unsigned char a,unsigned char b); /设定光标位置 void Clear_GDRAM(void); /清除液晶GDRAM中的随机数据 void Draw_PM(const uchar *ptr); /在整个液晶屏幕上画图 void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp); /显示一个16*16大小的图形作 者:胡静涛最后修改时间:2011年7月25号备注:该程序应在1M的系统时钟下运行,读忙信号函数已经被封装到除读指令函数以外的函数 中.典型应用: Lcd_XY( 1 , 1 ); i = 0; while( num1i != 0 ) Lcd_WriteData( num1i ); i+; 以上函数均进行测试可以正常使用*/#include #include 12864LCD.h/*/12864液晶读指令/典型应用 读忙标志:while(Lcd_ReadCmd() & 0x80);/*int Lcd_ReadCmd() int temp; unsigned char CLKCMD; CLKCMD = BCSCTL2; /先将时钟寄存器的值读出来 BCSCTL2 = SELM_2 + DIVM_3 + (CLKCMD & 0x0e); /重新设定主时钟(不改变从时钟) LCD12864_CMDDIR; LCD12864_DATADIR = 0X00; LCD12864_LCDRS_0; LCD12864_LCDWR_1; LCD12864_LCDEN_0; _NOP(); LCD12864_LCDEN_1; _NOP(); _NOP(); temp = LCD12864_DATAIN; LCD12864_LCDEN_0; BCSCTL2 = CLKCMD; /还原原来的时钟(放在函数最后) return temp;/*/12864液晶读数据/*int Lcd_ReadData() int temp; unsigned char CLKCMD; CLKCMD = BCSCTL2; /先将时钟寄存器的值读出来 BCSCTL2 = SELM_2 + DIVM_3 + (CLKCMD & 0x0e); /重新设定主时钟(不改变从时钟) while(Lcd_ReadCmd() & 0x80); /读忙信号 LCD12864_DATADIR = 0X00; LCD12864_CMDDIR; LCD12864_LCDRS_1; LCD12864_LCDWR_1; LCD12864_LCDEN_0; _NOP(); LCD12864_LCDEN_1; _NOP(); _NOP(); temp = LCD12864_DATAIN; LCD12864_LCDEN_0; BCSCTL2 = CLKCMD; /还原原来的时钟(放在函数最后) return temp;/*/12864液晶写指令/*void Lcd_WriteCmd(uchar a) unsigned char CLKCMD; CLKCMD = BCSCTL2; /先将时钟寄存器的值读出来 BCSCTL2 = SELM_2 + DIVM_3 + (CLKCMD & 0x0e); /重新设定主时钟(不改变从时钟) while(Lcd_ReadCmd() & 0x80); /读忙信号 LCD12864_DATADIR = 0XFF; LCD12864_CMDDIR; LCD12864_LCDRS_0; LCD12864_LCDWR_0; LCD12864_LCDEN_0; _NOP(); LCD12864_DATA = a; _NOP(); LCD12864_LCDEN_1; _NOP(); _NOP(); LCD12864_LCDEN_0; BCSCTL2 = CLKCMD; /还原原来的时钟(放在函数最后)/*/12864液晶写数据/*void Lcd_WriteData(uchar a) unsigned char CLKCMD; CLKCMD = BCSCTL2; /先将时钟寄存器的值读出来 BCSCTL2 = SELM_2 + DIVM_3 + (CLKCMD & 0x0e); /重新设定主时钟(不改变从时钟) while(Lcd_ReadCmd() & 0x80); /读忙信号 LCD12864_DATADIR = 0XFF; LCD12864_CMDDIR; LCD12864_LCDRS_1; LCD12864_LCDWR_0; LCD12864_LCDEN_0; _NOP(); LCD12864_DATA = a; _NOP(); LCD12864_LCDEN_1; _NOP(); _NOP(); LCD12864_LCDEN_0; BCSCTL2 = CLKCMD; /还原原来的时钟(放在函数最后)/*/12864液晶初始化/*void Lcd_Init() Lcd_WriteCmd(0x30); Lcd_WriteCmd(0x0c); Lcd_WriteCmd(0x01); Lcd_WriteCmd(0x80); /*/12864液晶光标地址/*void Lcd_XY(unsigned char a,unsigned char b) switch (a) case 1: a = 0x80; break; case 2: a = 0x90; break; case 3: a = 0x88; break; case 4: a = 0x98; break; Lcd_WriteCmd(a + b - 1);/*/清除液晶GDRAM中的随机数据/*void Clear_GDRAM(void) uchar i,j,k; Lcd_WriteCmd(0x34); /打开扩展指令集 i = 0x80; for(j = 0;j 32;j+) Lcd_WriteCmd(i+); Lcd_WriteCmd(0x80); for(k = 0;k 16;k+) Lcd_WriteData(0x00); i = 0x80; for(j = 0;j 32;j+) Lcd_WriteCmd(i+); Lcd_WriteCmd(0x88); for(k = 0;k 16;k+) Lcd_WriteData(0x00); Lcd_WriteCmd(0x30); /回到基本指令集/*/在整个液晶屏幕上画图/*void Draw_PM(const uchar *ptr) uchar i,j,k; Lcd_WriteCmd(0x34); /打开扩展指令集 i = 0x80; for(j = 0;j 32;j+) Lcd_WriteCmd(i+); Lcd_WriteCmd(0x80); for(k = 0;k 16;k+) Lcd_WriteData(*ptr+); i = 0x80; for(j = 0;j 32;j+) Lcd_WriteCmd(i+); Lcd_WriteCmd(0x88); for(k = 0;k 16;k+) Lcd_WriteData(*ptr+); Lcd_WriteCmd(0x36); /打开绘图显示 Lcd_WriteCmd(0x30); /回到基本指令集/*/功 能:显示一个16*16大小的图形/参 数:Yaddr-Y地址/ Xaddr-X地址/ dp-指向图形数据存放地址的指针/*void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp) uchar j; uchar k=0; Yaddr = Yaddr + 0x80; Xaddr = Xaddr + 0x80; Lcd_WriteCmd(0x01); /清屏,只能清除DDRAM Lcd_WriteCmd(0x34); /使用扩展指令集,关闭绘图显示 for(j=0;j16;j+) Lcd_WriteCmd(Yaddr+); /Y地址 Lcd_WriteCmd(Xaddr); /X地址 Lcd_WriteData(dpk+); Lcd_WriteData(dpk+); Lcd_WriteCmd(0x36); /打开绘图显示 Lcd_WriteCmd(0x30); /回到基本指令集模式*以上是C文件*我是分隔符*以下是H文件*#ifndef 12864LCD_H#define 12864LCD_H#define uchar unsigned char#define uint unsigned int#define _12864LCD_DATADIR P4DIR/数据口方向控制#define _12864LCD_DATA P4OUT/数据输出端口#define _12864LCD_DATAIN P4IN/数据输入端口#define _12864LCDDEN BIT2/LCDEN位#define _12864LCDWR BIT1/LCDWR位#define _12864LCDRS BIT0/LCDRS位#define _12864LCD_CMD P3OUT/控制引脚端口#define _12864LCD_CMDDIR P3DIR/控制引脚方向/*固定写法*/#define LCD12864_DATADIR _12864LCD_DATADIR#define LCD12864_DATA _12864LCD_DATA#define LCD12864_DATAIN _12864LCD_DATAIN#define LCD12864_LCDEN_1 _12864LCD_CMD |= _12864LCDEN#define LCD12864_LCDEN_0 _12864LCD_CMD &= _12864LCDEN#define LCD12864_LCDWR_1 _12864LCD_CMD |= _12864LCDWR#define LCD12864_LCDWR_0 _12864LCD_CMD &= _12864LCDWR#define LCD12864_LCDRS_1 _12864LCD_CMD |= _12864LCDRS#define LCD12864_LCDRS_0 _12864LCD_CMD &= _12864LCDRS#define LCD12864_CMDDIR _12864LCD_CMDDIR |= _12864LCDRS + _12864LCDWR + _12864LCDENvoid Lcd_WriteCmd(unsigned char a);void Lcd_WriteData(unsigned char a)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论