【MSP430F149学习】25 驱动12864液晶
准备工具:电脑;TS8900--MSP430F149开发板;LCD12864屏;USB线一根;杜邦线若干
开发环境:IAR EW for MSP430 V5.30
液晶管脚定义
#define lcd_sclk1 P1OUT |= BIT0
#define lcd_sclk0 P1OUT &= ~BIT0
#define lcd_sid1 P1OUT |= BIT1
#define lcd_sid0 P1OUT &= ~BIT1
#define lcd_cs1 P1OUT |= BIT2
#define lcd_cs0 P1OUT &= ~BIT2
#define reset1 P1OUT |= BIT3
#define reset0 P1OUT &= ~BIT3
#define lcd_rs1 P1OUT |= BIT4
#define lcd_rs0 P1OUT &= ~BIT4
#define Rom_OUT_IN P2DIR &= ~BIT1
#define Rom_IN1 P2OUT |= BIT0
#define Rom_IN0 P2OUT &= ~BIT0
#define Rom_OUT1 P2DIR |= BIT12OUT |= BIT1
#define Rom_OUT0 P2DIR |= BIT12OUT &= ~BIT1
#define Rom_SCK1 P2OUT |= BIT2
#define Rom_SCK0 P2OUT &= ~BIT2
#define Rom_CS1 P2OUT |= BIT3
#define Rom_CS0 P2OUT &= ~BIT3
#define Rom_DATA P2IN & BIT1
液晶硬件连线图
部分程序代码
//写指令到 LCD 模块
void transfer_command_lcd(int data1)
{
char i;
lcd_cs0;
lcd_rs0;
for(i=0;i<8;i++)
{
lcd_sclk0;
if(data1&0x80)
{lcd_sid1;}
else
{lcd_sid0 ;}
lcd_sclk1;
data1<<=1;
}
lcd_cs1 ;
}
//写数据到 LCD 模块
void transfer_data_lcd(int data1)
{
char i;
lcd_cs0;
lcd_rs1;
for(i=0;i<8;i++)
{
lcd_sclk0;
if(data1&0x80)
{lcd_sid1;}
else
{lcd_sid0 ;}
lcd_sclk1;
data1<<=1;
}
lcd_cs1 ;
}
/*清屏*/
void clear_screen(void)
{
int i,j;
lcd_address(0,0,256,17);
for(i=0;i<17;i++)
{
for(j=0;j<256;j++)
{
transfer_data_lcd(0x00);
}
}
}
/*显示 192*5 点阵的图像*/
void disp_192x5(int x,int y,uchar *dp)
{
int i,j;
lcd_address(x,y,192,5);
for(i=0;i<5;i++)
{
for(j=0;j<192;j++)
{
transfer_data_lcd(*dp);
dp++;
}
}
}
/****送指令到字库 IC***/
void send_command_to_ROM( uchar datu )
{
uchar i;
for(i=0;i<8;i++ )
{
if(datu&0x80)
Rom_IN1;
else
Rom_IN0;
datu = datu<<1;
Rom_SCK0;
Rom_SCK1;
Delay_nus(1);
}
}
/****从字库 IC 中取汉字或字符数据(1 个字节)***/
static uchar get_data_from_ROM( )
{
uchar i;
uchar ret_data=0;
Rom_SCK1;
for(i=0;i<8;i++)
{
Rom_OUT1;
Rom_SCK0;
Rom_OUT_IN;
ret_data>>=1;
if( Rom_DATA )
ret_data+=0x80;
else
ret_data=ret_data+0;
Rom_SCK1;
Delay_nus(1);
}
return(ret_data);
}
/******向液晶指定位置写子函数******/
void display_GB2312_string(uchar column,uchar page,uchar *text);
uchar str[] = "听雨落凡尘";
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1DIR |= 0x1F; //设置对应管脚为输出模式
P2DIR |= 0x0F;
initial_lcd(); //液晶初始化
clear_screen(); //清屏
disp_192x5(1,1,gImage_a); //显示图片
display_GB2312_string(50,9,str);
while(1);
}
下载运行效果
局部特写
IAR工程
|