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);