| 基于MSP430G2553液晶12864串行显示详解 #ifndef __LCD12864_H__
 
 #define __LCD12864_H__
 
 #include "msp430g2553.h"
 
 #include "delay.h"
 
 #define rw_out P1DIR|=BIT0
 
 #define rw_h P1OUT|=BIT0
 
 #define rw_l P1OUT&=~BIT0
 
 #define en_out P1DIR|=BIT1
 
 #define en_h P1OUT|=BIT1
 
 #define en_l P1OUT&=~BIT1
 
 uint Strlen(uchar *p)
 
 {
 
 uint i;
 
 for(i=0;*(p+i);i++);
 
 return i;
 
 }
 
 void WriteBytes(uchar *p)
 
 {
 
 uchar i,j,temp;
 
 en_out;
 
 rw_out;
 
 en_l;
 
 for(j=0;j<3;j++)
 
 {
 
 temp=p[j];
 
 for(i=0;i<8;i++)
 
 {
 
 if(temp & 0x80)
 
 rw_h;
 
 else rw_l;
 
 en_h;
 
 delay(1);
 
 en_l;
 
 temp<<=1;
 
 }
 
 }
 
 rw_h;
 
 }
 
 void SerialWriteData(uchar send)
 
 {
 
 uchar data[3];
 
 data[0]=0xfa ;     //1111 1010向液晶写数据
 
 data[1]=send & 0xf0;      //取高4位
 
 data[2]=(send<<4)&0xf0;       //取低4位
 
 WriteBytes(data);
 
 }
 
 void SerialWriteCmd(uchar send)
 
 {
 
 uchar data[3];
 
 data[0]=0xf8 ;                    //1111 1000向液晶写命令
 
 data[1]=send & 0xf0;      //取高4位
 
 data[2]=(send<<4) & 0xf0;       //取低4位
 
 WriteBytes(data);
 }
 
 void init_lcd()
 
 {
 
 en_out;
 
 rw_out;
 
 SerialWriteCmd(0x0C);//显示开,关闭游标和游标位置
 
 SerialWriteCmd(0x06);
 
 SerialWriteCmd(0x01);//清除显示,等待命令
 
 }
 
 void display_12864(uchar hang,uchar lie,uchar *p)
 
 {
 
 uchar i;
 
 switch(hang)
 
 {
 
 case 1:SerialWriteCmd(0x80+lie);break;
 
 case 2:SerialWriteCmd(0x90+lie);break;
 
 case 3:SerialWriteCmd(0x88+lie);break;
 
 case 4:SerialWriteCmd(0x98+lie);break;
 
 }
 
 for(i=0;i<16;i++)
 
 {
 
 SerialWriteData(p);
 
 }
 
 
 
 }
 
 #endif
 
 |