📄 main.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 + -