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

📄 main.c

📁 MSP430驱动串口12864液晶 液晶型号:WGM-12864COG-15
💻 C
字号:
/******************************************************************************
*模块名:128*64 点阵液晶显示(不带字库,串口)(WGM-12864COG-15)
*创建人:Iceflame
*日期:2008-12-28	 16:18
*功能:显示控制
*版本:1.0
*修改日期:
********************************************************************************/

#include "msp430x24x.h"

#define uchar unsigned char
#define uint unsigned int

#define LCD_CS_H P2OUT |= 0x80
#define LCD_CS_L P2OUT &= 0x7F

#define LCD_RES_H P2OUT |= 0x40
#define LCD_RES_L P2OUT &= 0xBF

#define LCD_RS_H P2OUT |= 0x20
#define LCD_RS_L P2OUT &= 0xDF

#define LCD_SCK_H P2OUT |= 0x10
#define LCD_SCK_L P2OUT &= 0xEF

#define LCD_SDA_H P2OUT |= 0x08
#define LCD_SDA_L P2OUT &= 0xF7

#define DISPLAY_ON 0xAF
#define DISPLAY_OFF 0xAE
#define DISPLAY_START_LINE 0x40   //0
#define DISPLAY_PAGE 0xB0
#define DISPLAY_ADC_L 0xA0    //the LSB is first
#define DISPLAY_ADC_M 0xA1
#define DISPLAY_REVERSE_OFF 0xA6
#define DISPLAY_REVERSE_ON 0xA7
#define DISPLAY_ENTIRE_ON 0xA5
#define DISPLAY_ENTIRE_OFF 0xA4
#define DISPLAY_SHL_NOM 0xC0
#define DISPLAY_SHL_REV 0xC8

#define LCD_POWER_CV 0x2C
#define LCD_POWER_RV 0x2E
#define LCD_POWER_FV 0x2F

#define LCD_REPOWER_1 0x81
#define LCD_REPOWER_2 0x31
#define LCD_RESISTOR 0x20

#define LCD_RESET 0xE2
#define DISPLAY_COLUMN_MSB 0x10    //0
#define DISPLAY_COLUMN_LSB 0x00			//0

void Write_char(uchar c,uchar l,uchar dat[]);
void Delay(uint n);
void WDATA_b(uchar dat);
void WCOMD_b(uchar com);
void Initialize_LCD(void);
void Clr_LCD(void);
void Write_word(uchar c,uchar l,uchar dat[]);
void MCU_initialize(void);

unsigned char num[]=
{
/*------------------------------------------------------------------------------
  源文件 / 文字 : 1
  宽×高(像素): 8×16
  字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/16字节
  数据转换日期  : 2008-12-28 16:35:36
------------------------------------------------------------------------------*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00
};

unsigned char hao[]=
{
/*------------------------------------------------------------------------------
  源文件 / 文字 : 好
  宽×高(像素): 16×16
  字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/32字节
  数据转换日期  : 2008-12-28 16:31:54
------------------------------------------------------------------------------*/
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xF2,0x8A,0x86,0x82,0x80,0x00,
0x80,0x43,0x22,0x14,0x0C,0x73,0x20,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00
};

/*******************************************************************************
*函数名:主函数
**输入:无
*输出:无
*调用函数:初始化液晶函数Initialize_LCD(),清屏函数Clr_LCD(),写字符函数Write_char()
*版本:1.0
*
*******************************************************************************/

void main( void )
{
  MCU_initialize();
  Initialize_LCD();
	Clr_LCD();
	Write_char(0,1,num);
	Write_word(1,4,hao);
	
	while(1);
}

/*******************************************************************************
*函数名:单片机初始函数
*功能:初始化单片机
*输入:无
*输出:无
*调用函数:无
*版本:1.0
*
*******************************************************************************/

void MCU_initialize(void)
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
	BCSCTL1 = CALBC1_8MHZ;                    // Set DCO
  DCOCTL = CALDCO_8MHZ;
	P2DIR = 0xFF;
	P2OUT = 0x00;	
}

/*******************************************************************************
*函数名:延时函数
*功能:延时
*输入:uchar n(延时长度)
*输出:无
*调用函数:无
*版本:1.0
*
*******************************************************************************/


void Delay(uint n)
{
	uint i,j;
	for(i=0;i<n;i++)
		for(j=0;j<10;j++);
}

/*******************************************************************************
*函数名:写数据函数
*功能:写一个数据到液晶
*输入:uchar com(数据)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/


/*******************发送数据***********************/ 
void WDATA_b(uchar dat) 
{ 
  uchar i,p; 
  LCD_RS_H; 
  LCD_CS_L;
	LCD_SCK_L;
  for(i=0;i<8;i++) 
  { 
    p=dat&0x80; 
    if(p==0x80) 
    { 
      LCD_SDA_H; 
    } 
    else 
    { 
      LCD_SDA_L; 
    } 
   LCD_SCK_H;
	 Delay(5);
	 LCD_SCK_L;
	 dat=dat<<1; 
  }
	LCD_CS_H;
}

/*******************************************************************************
*函数名:写指令函数
*功能:写一个指令到液晶
*输入:uchar com(命令)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/


/*******************发送命令***********************/ 
void WCOMD_b(uchar com) 
{ 
  uchar i,p; 
  LCD_RS_L; 
  LCD_CS_L;
	LCD_SCK_L;
  for(i=0;i<8;i++) 
  { 
    p=com&0x80; 
    if(p==0x80) 
    { 
      LCD_SDA_H; 
    } 
    else 
    { 
      LCD_SDA_L; 
    } 
   LCD_SCK_H;
	 Delay(5);
	 LCD_SCK_L;
	 com=com<<1; 
  }
	LCD_CS_H;
}

/*******************************************************************************
*函数名:初始化函数
*功能:启动液晶,初始化液晶
*输入:无
*输出:无
*调用函数:写数据函数WDATA_b(),写命令函数WCOMD_b(),延时函数Delay()
*版本:1.0
*
*******************************************************************************/

void Initialize_LCD(void)
{
	LCD_RES_L;
	Delay(10000);
	LCD_RES_H;
	WCOMD_b(DISPLAY_ADC_L);
	WCOMD_b(DISPLAY_SHL_NOM);
	WCOMD_b(0xA2);
	WCOMD_b(LCD_POWER_CV);
	Delay(10000);
	WCOMD_b(LCD_POWER_RV);
	Delay(10000);
	WCOMD_b(LCD_POWER_FV);
	WCOMD_b(LCD_REPOWER_1);
	WCOMD_b(LCD_REPOWER_2);
	WCOMD_b(LCD_RESISTOR);
	WCOMD_b(DISPLAY_START_LINE+32);
	WCOMD_b(DISPLAY_SHL_REV);
	WCOMD_b(DISPLAY_ON);	
}

/*******************************************************************************
*函数名:写字符函数
*功能:写字符函数,写一个字符到固定的位置
*输入:uchar c 字符的列号; uchar l 字符的行号; uchar dat[] 字符数据
*输出:无
*调用函数:写数据函数WDATA_b(),写命令函数WCOMD_b()
*版本:1.0
*
*******************************************************************************/
void Write_char(uchar c,uchar l,uchar dat[])
{
	uchar column = c*8+1,line = l,column_high,column_low,i;
	column_high = DISPLAY_COLUMN_MSB + column/16;
	column_low = DISPLAY_COLUMN_LSB + column%16;
	WCOMD_b(column_high);
	WCOMD_b(column_low);
	WCOMD_b(DISPLAY_PAGE + line);
	for(i=0;i<8;i++)
	{
		WDATA_b(dat[i]);
	}
	WCOMD_b(column_high);
	WCOMD_b(column_low);
	WCOMD_b(DISPLAY_PAGE + line + 1);
	for(i=0;i<8;i++)
	{
		WDATA_b(dat[i+8]);
	}
	
}

/*******************************************************************************
*函数名:写字函数
*功能:写一个字到固定的位置
*输入:uchar c 字符的列号; uchar l 字符的行号; uchar dat[] 字符数据
*输出:无
*调用函数:写数据函数WDATA_b(),写命令函数WCOMD_b()
*版本:1.0
*
*******************************************************************************/
void Write_word(uchar c,uchar l,uchar dat[])
{
	uchar column = c*16+1,line = l,column_high,column_low,i;
	column_high = DISPLAY_COLUMN_MSB + column/16;
	column_low = DISPLAY_COLUMN_LSB + column%16;
	WCOMD_b(column_high);
	WCOMD_b(column_low);
	WCOMD_b(DISPLAY_PAGE + line);
	for(i=0;i<16;i++)
	{
		WDATA_b(dat[i]);
	}
	WCOMD_b(column_high);
	WCOMD_b(column_low);
	WCOMD_b(DISPLAY_PAGE + line + 1);
	for(i=0;i<16;i++)
	{
		WDATA_b(dat[i+16]);
	}
}


/*******************************************************************************
*函数名:清屏函数
*功能:将液晶清屏液晶
*输入:无
*输出:无
*调用函数:写数据函数WDATA_b(),写命令函数WCOMD_b()
*版本:1.0
*
*******************************************************************************/


void Clr_LCD(void)
{
	uchar i,j;
	WCOMD_b(DISPLAY_COLUMN_MSB);
	WCOMD_b(DISPLAY_COLUMN_LSB);
	for(i=0;i<9;i++)
	{
		WCOMD_b(DISPLAY_PAGE + i);
		WCOMD_b(DISPLAY_COLUMN_MSB);
		WCOMD_b(DISPLAY_COLUMN_LSB);
		for(j=0;j<132;j++)
		{
			WDATA_b(0x00);
		}
	}
}

⌨️ 快捷键说明

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