MSP430控制6963c驱动液晶
扫描二维码
随时随地手机看文章
/******************************************************************
读液晶状态字到STA
功能:用于往液晶写数据或命令之前判断忙闲
*******************************************************************/
voidread_sta(void)
{
P4DIR=0x00;//P4数据输入
P3OUT=P3_2_DATAIO;//4245(x1)数据传送方向选择为:由液晶到430
P3OUT=P3_1_CD;//命令方式
P3OUT&=~P3_0_RD;//read
STA=P4IN;//读回状态
P3OUT=P3_0_RD;//CANcelread
P4DIR=0xff;//P4口置为数据输出方式
P3OUT&=~P3_2_DATAIO;//4245(x1)数据传送方向选择为:由430到液晶
}
/*****************************************************************************
判状态位S1,S0函数(读写指令和读写数据状态)
******************************************************************************/
voidST1(void)
{
do
{
read_sta();
}
while((STA&0x03)!=0x03);
}
/**********************************************************
判状态位S2函数(数据自动读状态)
**********************************************************/
voidST2(void)
{
do
{
read_sta();
}
while((STA&0x04)!=0x04);
}
/***************************************************************
-判状态位S3函数(数据自动写状态)-
****************************************************************/
voidST3(void)
{
do
{
read_sta();
}
while((STA&0x08)!=0x08);
}
/*****************************************************************************
写入数据字节
******************************************************************************/
voidwrite_data(unsignedcharByte)
{
ST1();
P4OUT=Byte;
P3OUT&=~P3_1_CD;//数据方式
P2OUT&=~P2_7_WR;//write
P2OUT=P2_7_WR;
}
/*****************************************************************************
自动写入数据字节
******************************************************************************/
voidautowrite_data(unsignedcharByte)
{
P4OUT=Byte;
P3OUT&=~P3_1_CD;//数据方式
P2OUT&=~P2_7_WR;//write
P2OUT=P2_7_WR;
}
/*****************************************************************************
写入命令字
******************************************************************************/
voidwrite_cmd(unsignedcharcmd)
{
ST1();
P4OUT=cmd;
P3OUT=P3_1_CD;//命令方式
P2OUT&=~P2_7_WR;//write
P2OUT=P2_7_WR;
}
/*****************************************************************************
写只有一个参数的命令
******************************************************************************/
voidwrite_onepara(unsignedchardat1,unsignedcharcommand)
{
write_data(dat1);
write_cmd(command);
}
/*****************************************************************************
写含有双参数的命令
******************************************************************************/
voidwrite_doublepara(unsignedchardat1,unsignedchardat2,unsignedcharcommand)
{
write_data(dat1);
write_data(dat2);
write_cmd(command);
}
/*****************************************************************************
清显示缓冲的函数
******************************************************************************/
voidCLEAR_RAM(void)
{
inti;
write_doublepara(0x00,0x00,0x24);/*设置显示RAM首地址*/
write_cmd(0xb0);/*设置自动写方式*/
for(i=0;i<8200;i++)/*清8K存储器*/
{
ST3();/*判状态位S3*/
write_data(0x00);/*写入数据*/
}
write_cmd(0xb2);/*设置自动写结束指令*/
}
/*****************************************************************************
对液晶屏的一些初始设置函数
******************************************************************************/
voidLCDIni(void)
{
write_doublepara(0x00,0x00,0x40);/*设文本显示区域首地址*/
write_doublepara(0x28,0x00,0x41);/*设文本显示区域宽度*/
write_doublepara(0x03,0x00,0x22);/*设置CGRAM偏置地址*/
write_doublepara(0x00,0x08,0x42);/*设图形显示区域首地址*/
write_doublepara(0x1e,0x00,0x43);/*设图形显示区域宽度*/
//write_cmd(0xa2);/*光标形状设置*/
//write_doublepara(0x08,0x08,0x21);/*设置光标位置*/
write_cmd(0x80);/*显示方式设置逻辑"或"合成,内部字符发生器有效*/
write_cmd(0x98);/*显示开关设置关文本和开图形显示*/
CLEAR_RAM();
}