?? lcd-cag12864i.c
字號:
/*********************************************
//128*64液晶顯示程序,串口
//模塊編寫者:
//模塊測試者:xpf
//模塊最后修改時間:2008.07.29
*********************************************/
#include <msp430x14x.h>
//數據類型重命名
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef signed char schar;
typedef signed int sint;
typedef signed long slong;
#define LCDDIR P3DIR
#define LCDOUT P3OUT
#define LCDRS BIT1
#define LCDCS BIT0
#define LCDSID BIT2
#define LCDSCK BIT3
#define LCDRSTDIR P4DIR
#define LCDRSTOUT P4OUT
#define LCDRST BIT7
//函數聲明,函數包含于main模塊中
extern void DELAYNMS(int delaycount);//函數用途:延時nms
extern void DELAYNUS(int delaycount); //函數用途:延時nus
void WRTIECOMTOLCD(uint ui_command); //函數用途:向LCD寫命令
void WRTIEDATATOLCD(uint ui_data); //函數用途:向LCD寫數據
void CLRLCD(void); //函數用途:清屏
void InitLCD(void); //函數用途:初始化 LCD
void WRTIEWORDTOLCD(int x,int y,uchar *data); //函數用途:向液晶指定位置輸出漢字
void WRTIECHARTOLCD(int x,int y,uchar *data); //函數用途:向液晶指定位置輸出字符
void Circle(int x,int y,uchar *data,uchar uc_byte,int i_temp); //函數用途:循環顯示漢字
void CLRPRELCD(int x,int y,int i_byte); //函數用途:部分清屏
void WRITELINETOLCD(int x,int y,uchar uc_nbyte); //函數功能:從指定的位置開始畫線
const uchar ComTable[8]={3,2,1,0,7,6,5,4,};
/*************************************************
//函數名稱:WRTIECOMTOLCD()
//函數功能:向LCD寫命令
//調用函數:無
//全局變量:
//輸入:command,準備寫入的命令字
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void WRTIECOMTOLCD(uint ui_command)
{
uint ui_i;
uint ui_temp = 0x80;
LCDOUT |= (LCDSID + LCDSCK);
LCDOUT &= ~(LCDCS + LCDRS); //RS為低寫入指令
LCDDIR |= (LCDSID + LCDCS + LCDSCK + LCDRS);
for (ui_i=0; ui_i<8; ui_i++)
{
if ( (ui_command & ui_temp)!=0 )
{
LCDOUT |= LCDSID; //寫入1
}
else
{
LCDOUT &= ~LCDSID; //寫入0
}
LCDOUT &= ~LCDSCK;
LCDOUT |= LCDSCK; //上升沿寫入數據
ui_temp >>= 1;
}
LCDOUT |= LCDCS;
}
/*************************************************
//函數名稱:WRTIEDATATOLCD()
//函數功能:向LCD寫數據
//調用函數:無
//全局變量:
//輸入:ui_data,準備寫入的數據
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void WRTIEDATATOLCD(uint ui_data)
{
uint ui_i;
uint ui_temp = 0x80;
LCDOUT |= (LCDSID + LCDSCK + LCDRS); //RS為高寫入數據
LCDOUT &= ~LCDCS;
LCDDIR |= (LCDSID + LCDCS + LCDSCK + LCDRS);
for (ui_i=0; ui_i<8; ui_i++)
{
if ( (ui_data & ui_temp) != 0 )
{
LCDOUT |= LCDSID; //寫入1
}
else
{
LCDOUT &= ~LCDSID; //寫入0
}
LCDOUT &= ~LCDSCK;
LCDOUT |= LCDSCK; //上升沿寫入
ui_temp >>= 1;
}
}
/*************************************************
//函數名稱:CLRLCD()
//函數功能:清屏操作
//調用函數:WRTIECOMTOLCD
//全局變量:
//輸入:ui_data,準備寫入的數據
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void CLRLCD(void) //清屏
{
uint ui_i,ui_j;
WRTIECOMTOLCD(0x40); //Set Display Start Line = com0
for (ui_i=0; ui_i<8; ui_i++)
{
WRTIECOMTOLCD(0xB0+ComTable[ui_i]); //Set Page Address
WRTIECOMTOLCD(0x10); //Set Column Address = 0
WRTIECOMTOLCD(0x01); //Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<128; ui_j++)
{
WRTIEDATATOLCD(0x00);
}
}
}
/*************************************************
//函數名稱:InitLCD()
//函數功能:初始化LCD
//調用函數:WRTIECOMTOLCD
//全局變量:
//輸入:
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void InitLCD(void)
{
LCDRSTOUT &= ~LCDRST;
LCDRSTDIR |= LCDRST;
DELAYNUS(100);
LCDRSTOUT |= LCDRST;
DELAYNUS(10);
WRTIECOMTOLCD(0xAE); //Display OFF
WRTIECOMTOLCD(0xA2); //1/64 Duty 1/9 Bias
WRTIECOMTOLCD(0xA0); //ADC select --> right
WRTIECOMTOLCD(0xC0); //com1 --> com64
WRTIECOMTOLCD(0x2f); //V0 regulator Rb/Ra=111B
WRTIECOMTOLCD(0x81); //Sets V0
WRTIECOMTOLCD(0x24); //對比度調節
WRTIECOMTOLCD(0x24); //voltage follower ON regulator ON booster ON
WRTIECOMTOLCD(0xA6); //Normal Display (not reverse dispplay)
WRTIECOMTOLCD(0xA4); //Entire Display Disable
CLRLCD(); //Clear LCD
WRTIECOMTOLCD(0xAF); //Display ON
WRTIECOMTOLCD(0x40); //Set Display Start Line = com0
WRTIECOMTOLCD(0xB0); //Set Page Address = 0
WRTIECOMTOLCD(0x10); //Set Column Address 4 higher bits = 0
WRTIECOMTOLCD(0x01); //Set Column Address 4 lower bits = 1 , from IC SEG1 -> SEG129
}
/*************************************************
//函數名稱:WRITEBMPTOLCD()
//函數功能:輸出圖像128X64
//調用函數:WRTIECOMTOLCD,WRTIEDATATOLCD
//全局變量:
//輸入:
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void WRITEBMPTOLCD(uchar *data) //輸出圖像128X64
{
uint ui_i,ui_j;
WRTIECOMTOLCD(0x40); //Set Display Start Line = com0
for (ui_i=0; ui_i<8; ui_i++)
{
WRTIECOMTOLCD(0xB0+ComTable[ui_i]); ////Set Page Address
WRTIECOMTOLCD(0x10); //Set Column Address = 0
WRTIECOMTOLCD(0x01); //Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<128; ui_j++)
{
WRTIEDATATOLCD(data[ui_i*128+ui_j]);
}
}
}
/*************************************************
//函數名稱:WRITELINETOLCD()
//函數功能:指定的位置開始畫線
//調用函數:WRTIECOMTOLCD,WRTIEDATATOLCD
//全局變量:
//輸入:
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void WRITELINETOLCD(int x,int y,uchar uc_nbyte) //畫線
{
uint ui_j;
if (y > 6) //確保y在0,6之間
{
y = 6;
}
else if (y < 0)
{
y = 0;
}
WRTIECOMTOLCD(0x40); //Set Display Start Line = com0
//for (ui_i=0; ui_i<8; ui_i++)
//{
WRTIECOMTOLCD(0xB0+ComTable[y]); ////Set Page Address
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<uc_nbyte; ui_j++)
{
WRTIEDATATOLCD(0x01);
}
//}
}
/*************************************************
//函數名稱:WRTIECHARTOLCD()
//函數功能:初始化LCD
//調用函數:WRTIECOMTOLCD,WRTIEDATATOLCD
//全局變量:
//輸入:
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void WRTIECHARTOLCD(int x,int y,uchar *data) //向液晶指定位置輸出字符
//輸入參數:y為 page位置,page 在0到7之間,在這里y在0,6之間
// x為點陣位置
{
uint ui_j;
if (y > 6) //確保y在0,6之間
{
y = 6;
}
else if (y < 0)
{
y = 0;
}
WRTIECOMTOLCD(0x40); //Set Display Start Line = com0
WRTIECOMTOLCD(0xB0+ComTable[y]); //Set Page Address //寫字的上半部
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<8; ui_j++)
{
WRTIEDATATOLCD(data[ui_j]);
}
WRTIECOMTOLCD(0xB0+ComTable[y+1]); //Set Page Address //寫字的下半部
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<8; ui_j++)
{
WRTIEDATATOLCD( data[ui_j+8] );
}
}
/*************************************************
//函數名稱:WRTIEWORDTOLCD()
//函數功能:向液晶指定位置輸出漢字
//調用函數:WRTIECOMTOLCD,WRTIEDATATOLCD
//全局變量:
//輸入:
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void WRTIEWORDTOLCD(int x,int y,uchar *data) //向液晶指定位置輸出漢字
//輸入參數:y page位置
// x 點陣位置
{
uint ui_j;
WRTIECOMTOLCD(0x40); //Set Display Start Line = com0
WRTIECOMTOLCD(0xB0+ComTable[y]); //Set Page Address //寫字的上半部
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<16; ui_j++)
{
WRTIEDATATOLCD(data[ui_j]);
}
WRTIECOMTOLCD(0xB0+ComTable[y+1]); //Set Page Address //寫字的下半部
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<16; ui_j++)
{
WRTIEDATATOLCD(data[ui_j+16]);
}
}
/*************************************************
//函數名稱:Circle()
//函數功能:
//調用函數:WRTIECOMTOLCD
//全局變量:
//輸入:ui_data,準備寫入的數據
//返回:無
//函數編寫者:xpf
//函數測試者: 函數最后修改時間:
*************************************************/
void Circle(int x,int y,uchar *data,uchar uc_byte,int i_temp) //清屏
{
uint ui_i,ui_j;
WRTIECOMTOLCD(0x40); //Set Display Start Line = com0
//
//添加
WRTIECOMTOLCD(0xB0+ComTable[y]); //Set Page Address //寫字的上半部
WRTIECOMTOLCD(0x10); //Set Column Address High Byte
WRTIECOMTOLCD(0x01); //Low Byte Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<i_temp; ui_j++)
{
WRTIEDATATOLCD(0x00);
}
//添加
//
WRTIECOMTOLCD(0xB0+ComTable[y]); //Set Page Address //寫字的上半部
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
for(ui_i=0 ; ui_i< uc_byte; ui_i++)
{
for (ui_j=0; ui_j<16; ui_j++)
{
if( (i_temp + ui_i*ui_j)<112 )
{
WRTIEDATATOLCD(data[ui_j+16*2*ui_i]);
}
}
}
//添加
WRTIECOMTOLCD(0xB0+ComTable[y+1]); //Set Page Address //寫字的上半部
WRTIECOMTOLCD(0x10); //Set Column Address High Byte
WRTIECOMTOLCD(0x01); //Low Byte Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<i_temp; ui_j++)
{
WRTIEDATATOLCD(0x00);
}
//添加
WRTIECOMTOLCD(0xB0+ComTable[y+1]); //Set Page Address //寫字的下半部
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
for(ui_i=0 ; ui_i< uc_byte; ui_i++)
{
for (ui_j=0; ui_j<16; ui_j++)
{
if( (i_temp + ui_i*ui_j)<112 )
{
WRTIEDATATOLCD(data[ui_j+16*(2*ui_i+1)]);
}
}
}
}
///
void CLRPRELCD(int x,int y,int i_byte) //清屏
{
uint ui_j;
WRTIECOMTOLCD(0x40); //Set Display Start Line = com0
//
WRTIECOMTOLCD(0xB0+ComTable[y]); //Set Page Address //寫字的上半部
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
//
for (ui_j=0; ui_j<i_byte; ui_j++)
{
WRTIEDATATOLCD(0x00);
}
WRTIECOMTOLCD(0xB0+ComTable[y+1]); //Set Page Address //寫字的下半部
WRTIECOMTOLCD(0x10+((x&0xf0)>>4)); //Set Column Address High Byte
WRTIECOMTOLCD(0x01+(x&0xf)); //Low Byte Colum from 1 -> 129 auto add
for (ui_j=0; ui_j<i_byte; ui_j++)
{
WRTIEDATATOLCD(0x00);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -