LCD12864 并口液晶驱动

  • 格式:doc
  • 大小:141.50 KB
  • 文档页数:32

#include "LCD12864.h"

/*

原程序参考于网络,原作者不明,liangjin2807修改适用于MSP430单片机,驱动MGLS12864液晶屏,HD61202芯片

*/

typedef unsigned char uchar;

typedef unsigned int uint;

uchar

digital[21][16]={{0x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x0F,0x1F,0x30,0x20,0x30,0x1F,0x0F},/*"0",0*/

{0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x3F,0x20,0x20,0x00},/*"1",1*/

{0x00,0x70,0x78,0x08,0x08,0x88,0xF8,0x70,0x00,0x30,0x38,0x2C,0x26,0x23,0x31,0x30},/*"2",2*/

{0x00,0x30,0x38,0x88,0x88,0xC8,0x78,0x30,0x00,0x18,0x38,0x20,0x20,0x31,0x1F,0x0E},/*"3",3*/

{0x00,0x00,0xC0,0xE0,0x30,0xF8,0xF8,0x00,0x00,0x07,0x07,0x24,0x24,0x3F,0x3F,0x24},/*"4",4*/

{0x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x19,0x39,0x21,0x20,0x31,0x1F,0x0E},/*"5",5*/

{0x00,0xE0,0xF0,0x98,0x88,0x98,0x18,0x00,0x00,0x0F,0x1F,0x31,0x20,0x31,0x1F,0x0E},/*"6",6*/

{0x00,0x38,0x38,0x08,0xC8,0xF8,0x38,0x08,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00},/*"7",7*/

{0x00,0x70,0xF8,0x88,0x08,0x88,0xF8,0x70,0x00,0x1C,0x3E,0x23,0x21,0x23,0x3E,0x1C},/*"8",8*/

{0x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x00,0x31,0x33,0x22,0x33,0x1F,0x0F},/*"9",9*/

{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",0*/

{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",1*/

{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",2*/

{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",3*/

{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",4*/

{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",5*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",6*/

{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",7*/

{0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/*"/",8*/

{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",9*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",10*/};/*"*",12*/

/**************宏定义***************/

#define DataDir P2DIR

#define DataPort P2OUT

#define Busy 0x80

#define CtrlDir P6DIR #define CLR_RS P6OUT&=~BIT3; //RS = P6.3

#define SET_RS P6OUT|=BIT3;

#define CLR_RW P6OUT&=~BIT4; //RW = P6.4

#define SET_RW P6OUT|=BIT4;

#define CLR_EN P6OUT&=~BIT5; //EN = P6.5

#define SET_EN P6OUT|=BIT5;

#define CLR_CS1 P6OUT&=~BIT0; //RW = 6.0

#define SET_CS1 P6OUT|=BIT0;

#define CLR_CS2 P6OUT&=~BIT1; //EN = 6.1

#define SET_CS2 P6OUT|=BIT1;

/***********************************************

函数名称:DispStr

功 能:让液晶从某个位置起连续显示一个字符串

参 数:x--位置的列坐标

y--位置的行坐标

ptr--指向字符串存放位置的指针

返回值 :无

***********************************************/

void DispStr(uchar x,uchar y,uchar *ptr)

{

uchar *temp;

uchar i;

temp = ptr;

//计算字符串有效字符的个数

LocateXY( x, y );

for (i=0;i<64;i++) //连续显示4个16*16字符

{

LcdWriteData( temp[i] );

}

}

/***********************************************

函数名称:DispDigital

功 能:让液晶从某个位置显示一个数字,上列数组寻址方式,不建议使用

参 数:x--位置的列坐标

y--位置的行坐标

返回值 :无

***********************************************/

void DispDigetal(uchar x,uchar y,uchar n)

{ uchar i;

uchar x_1;

if(x<64)

{

LcdChoiceL();

LocateXY( x, y );

for (i=0;i<8;i++)

LcdWriteData( digital[n][i] );

LocateXY( x, y+1 );

for (i=8;i<16;i++)

LcdWriteData( digital[n][i] );

}

else{

x_1=x-64;

LcdChoiceR();

LocateXY( x_1, y );

for (i=0;i<8;i++)

LcdWriteData( digital[n][i] );

LocateXY( x_1, y+1 );

for (i=8;i<16;i++)

LcdWriteData( digital[n][i] );

}

}

/***********************************************

函数名称:DispHex

功 能:让液晶从某个位置显示四个十六进数字

参 数:x--位置的列坐标

y--位置的行坐标

ptr--指向字符串存放位置的指针

返回值 :无

***********************************************/

void DispHex(uchar x,uchar y,uint temp)

{

uchar n;

n=temp/0x1000;

DispDigetal(x,y,n);

n=(temp/0x100)%0x10;

DispDigetal(x+8,y,n);

n=(temp/0x10)%0x10;

DispDigetal(x+16,y,n);

n=temp%0x10;

DispDigetal(x+24,y,n);