⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd12864.c

📁 ME007+msp430
💻 C
字号:
//RD P5.0
//WR P5.1
//CD P5.5
//CS P5.6
#include"MSP430X44X.h"
#include"lcd12864.h"
#define uchar unsigned char
#define uint unsigned int
uchar Disp_Buff[16];                 //显示缓冲区

/************************提取点阵方向:横向(先上->下, 再左->右)**********************************************/
 uchar CGTAB[224]={ 

0x01,0x01,0x01,0x01,0x01,0x7D,0x05,0x05,    // 水
0x09,0x09,0x11,0x21,0x41,0x81,0x05,0x02,
0x00,0x00,0x00,0x08,0x18,0x20,0xC0,0x80,
0x40,0x20,0x10,0x0E,0x04,0x00,0x00,0x00,




0x00,0x43,0x32,0x12,0x83,0x62,0x22,0x0B,    // 温
0x10,0x27,0xE4,0x24,0x24,0x24,0x2F,0x20,
0x08,0xFC,0x08,0x08,0xF8,0x08,0x08,0xF8,
0x00,0xFC,0xA4,0xA4,0xA4,0xA4,0xFE,0x00,


0x20,0x20,0x20,0x27,0xF4,0x29,0x22,0x34,    // 控
0x60,0xA3,0x20,0x20,0x20,0x20,0xAF,0x40,
0x80,0x40,0x40,0xFE,0x02,0x24,0x10,0x08,
0x00,0xF8,0x40,0x40,0x40,0x44,0xFE,0x00,





0x04,0x24,0x24,0x3F,0x24,0x44,0xFF,0x04,    // 制
0x04,0x3F,0x24,0x24,0x26,0x25,0x04,0x04,
0x04,0x04,0x04,0xA4,0x24,0x24,0xE4,0x24,
0x24,0xA4,0xA4,0x84,0x84,0x04,0x14,0x08,



0x00,0x7F,0x02,0x04,0x08,0x3F,0x01,0x06,    // 系
0x18,0x3F,0x11,0x01,0x11,0x21,0x45,0x02,
0x38,0xC0,0x00,0x20,0x40,0x80,0x00,0x20,
0x10,0xF8,0x08,0x00,0x10,0x08,0x08,0x00,





0x10,0x10,0x20,0x27,0x48,0xF9,0x12,0x27,    // 统
0x49,0xFD,0x45,0x09,0xAA,0xAA,0xA4,0x08,
0x80,0x40,0x48,0xFC,0x80,0x10,0x08,0xFC,
0x24,0x20,0x20,0x20,0x22,0x22,0x1E,0x00,




};           
//uchar DTAB[11]={ 0x37,0x45,0x4c,0x43,0x4f,0x4d,0x45,0x00,0x39,0x4f,0x55};
/******查询STA1 STA0 状态*********/
void Check_STA01(void)
{
  uchar state;
  do
  {
   data_DIR=0x00; 
   CD_H;      //command channel select
   RD_L;     //读数据口
   state=data_IN&0x03;
   RD_H;
  } 
 while(state!=0x03); 
}

/*********查询STA2状态(数据自动读状态)*******/
void Check_STA2(void)
{
  uchar state;
  do
  {
   data_DIR=0x00; 
   CD_H;      //command channel select
   RD_L;     //读数据口
   state=data_IN&0x03;
   RD_H;
  } 
 while(state!=0x04); 
}											
/**********查询STA3状态(数据自动写状态)*******/
void Check_STA3(void)
{
  uchar state;
  do
  {
   data_DIR=0x00; 
   CD_H;      //command channel select
   RD_L;     //读数据口
   state=data_IN&0x03;
   RD_H;
  } 
 while(state!=0x08); 
}
/********查询STA6状态(屏读/屏复制状态)*******/
void Check_STA6(void)
{
  uchar state;
  do
  {
   data_DIR=0x00; 
   CD_H;      //command channel select
   RD_L;     //读数据口
   state=data_IN&0x03;
   RD_H;
  } 
 while(state!=0x40); 
}

/********向数据口发数据*********/
void WR_data(uchar dat)
{
  Check_STA01();
  data_DIR=0xff;
  CD_L;       //data channel select
  WR_L;       //写数据
  data_OUT=dat;
  WR_H;
}

/**********写一个命令*********/
void WR_com(uchar com)
{
  Check_STA01();
  data_DIR=0xff;
  CD_H;      //command channel select
  WR_L;      //写命令
  data_OUT=com;
  WR_H;
}
/***********写一个参数及命令***********/
void WR_data_com(uchar dat1,uchar com1)
{
  WR_data(dat1);
  WR_com(com1);
}
/************写两个参数及命令***************/
void WR_data2_com(uchar dat1,uchar dat2,uchar com1)
{
  WR_data(dat1);
  WR_data(dat2);
  WR_com(com1);
}

/*************清文本显示RAM*****************/
void Clear_Text_Area(void)
{
  uchar i;
  WR_data2_com(0x00,0x00,0x24);//置文本区首指针
  Check_STA3();
  WR_com(0xB0);
  for(i=0;i<=16*8;i++) //对128*64点阵液晶清屏每行16个,共8行,每次清一个字符
   {
     WR_data(0x00);  //写数据0x00
   }
   Check_STA3();
   WR_com(0xB2);	  //自动写结束
}
/*************清RAM区*********************/
void Clear_Dian(uchar a)        //0:清除文本区;1:清除图形区
{
  uint l,i;
  if(a==0)
   {
     WR_data2_com(0x00,0x00,0x24);
     i=129;
   }
  if(a==1)
   {
     WR_data2_com(0x00,0x04,0x24);
     i=1025;
   }
  WR_com(0xb0);
  for(l=i;l>0;l--)
   {
     WR_data(0x00);
   }
  WR_com(0xb2);
}

/**************清图形显示RAM**************/
void Clear_Image_Area(void)
{
  uint i;
  WR_data2_com(0x00,0x04,0x24);//置图形区首指针
  Check_STA3();
  WR_com(0xB0);			//自动写
  for(i=0;i<=16*64;i++) //对128*64LCD清屏,每次是清楚8个点阵,每行16个,共64行
  {
    WR_data(0x00);  //写数据0x00
  }
  Check_STA3();
  WR_com(0xB2);    //自动写结束
}

/************清文本特征显示RAM ***********/
void Clear_Special_Text_Area(void)
{
  uint i;
  WR_data2_com(0x00,0x08,0x24);//置图形区首指针
  Check_STA3();
  WR_com(0xB0);	  //自动写结束
  for(i=0;i<=16*64;i++)//对128*64LCD清屏,每次是清楚8个点阵,每行16个,共64行
  {
    WR_data(0x00);  //写数据0x00
  }
  Check_STA3();
  WR_com(0xB2);	  //自动写结束
}

/***************字符显示程序*******************/
void Chars_dis(uchar *s)
{
  uchar w;
  for(w=0;w<16;w++)
  Disp_Buff[w]=s[w];
}
/**************** 显示一行英文字符*******************/
void Dis_line(uchar Line_num)     //显示内容为Disp_Buff内所存内容
{
  uchar i;
  WR_data2_com(Line_num*16,0x00,0x24);
  WR_com(0xb0);
  for(i=0;i<16;i++)
   {
     WR_data(Disp_Buff[i]-0x20);
   }
  WR_com(0xb2);
}

/********************  在指定的像素点位置显示字符 ************************/
void Display_Char(uchar X,uchar Y,uchar Tab)
  {
  	 uchar Addr_H,Addr_L;
	 uint Addr;
	 Addr=(uint)(Y*16)+X;			 //文本区地址
	 Addr_H=(uchar)(Addr>>8);
	 Addr_L=(uchar)Addr;
	 WR_data2_com(Addr_L,Addr_H,0x24);	  //置地址指针
	 Check_STA3();
	 WR_com(0xB0);	 
  	 WR_data(Tab-0x20); 			  //对显示字符进行ASCII码调整
	 Check_STA3();
	 WR_com(0xB2);	 				   //关自动写
  }
  /********************  在指定的像素点位置显示字符串     ************************/
  void Display_String(uchar X,uchar Y,uchar Length,uchar Tab[])
  {						 //入口参数:显示位置坐标,字符串长度,字符串入口指针
     uchar Addr_H,Addr_L,i;
     uint Addr;
     Addr=(uint )(Y*16)+X;
     Addr_H=(Addr>>8);
     Addr_L=(uchar)Addr;
     WR_data2_com(Addr_L,Addr_H,0x24);	  //置地址指针
     Check_STA3();
     WR_com(0xB0);	 				   //自动写
     for(i=0;i<Length;i++)
         WR_data(Tab[i]-0x20); 		   //对显示字符进行ASCII码调整
     Check_STA3();
     WR_com(0xB2);	 				   //关自动写
  }
/************设置图形显示方式**********/
void Set_Image(void)
{
  WR_data2_com(0x00,0x04,0x42);//图形区首地址
  WR_com(0x80);           //显示方式设置:逻辑或合成0x80
}
/************液晶初始化程序************/
void LCD_Initial(void)
{
  WR_data2_com(0x00,0x00,0x40);//文本显示区首地址
  WR_data2_com(0x10,0x00,0x41);//文本显示区宽度,16个字符
  Set_Image();                     //设置图形显示方式
  WR_data2_com(0x10,0x00,0x43);//图形显示区宽度,16个字符
  WR_data2_com(0x02,0x00,0x22);//CGRAM显示区首地址
  WR_com(0x9c);//显示开关设置,文本显示启用,图形显示启用,光标显示启用,光标闪烁启用,
  WR_com(0xa7);        //设置光标形状
  WR_com(0x80);        //显示方式设置看,逻辑或合成
  //Clear_Text_Area();          //清显示区
  //Clear_Image_Area();
  //Clear_Special_Text_Area();
}

/******************显示汉字*******************/
void CGRAM(void)
{
unsigned int i;
unsigned char *p;
  p=CGTAB;
 WR_data2_com(0x03,0x00,0x22);// 设置CGRAM偏置地址 

 WR_data2_com(0x00,0x1c,0x24); //设置存储器地址指针 

 WR_com(0xb0); //设置自动写方式 

for(i=0;i<224;i++)
{
//ST3();
 // Out_data(CGTAB[i]);
WR_data(*p++);
}
WR_com(0xb2);//设置自动写结束方式 

}
void  CLEAR(void) 
{
unsigned int a;
  WR_data2_com(0x00,0x1c,0x24);//设置显示地址 
  WR_com(0xb0);//设置自动写方式 
  for(a=0;a<224;a++)  //清8K存储器 
{
//ST3();
  WR_data(0x00);
}
WR_com(0xb2); // 设置自动写结束方式 
}
void CCW1_PR(unsigned int O_Y,unsigned int O_X,uchar o )  // 汉字写入(文本方式)函数 
{
uint i,j,code_1;
uint dat1,dat2;
i=0x10;
code_1 =0x80+o*4;
j=i*O_Y+O_X;
dat1=j%256;
dat2=j/256;
WR_data2_com(dat1,dat2,0x24);  //设置显示地址 
dat2=code_1;
WR_data_com(dat2,0xc0);// 写入左上半部汉字代码 
dat2=code_1+0x02;
WR_data_com(dat2,0xc0);  //写入右上半部汉字代码 
j=j+i;
dat1=j%256;  //显示RAM地址修正 
dat2=j/256;
WR_data2_com(dat1,dat2,0x24);
dat2=code_1+0x01;  //写入左下半部汉字代码 
WR_data_com(dat2,0xc0);
dat2=code_1+0x03; //写入右下半部汉字代码 
WR_data_com(dat2,0xc0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -