📄 12864ymy.c
字号:
#include <msp430x14x.h>
#define LCD12864DIR P1DIR
#define LCD12864OUT P1OUT
#define LCD12864IN P1IN
#define LCD12864_CS BIT0
#define LCD12864_SID BIT2
#define LCD12864_SCLK BIT4
#define LCD12864_CS_LOW LCD12864OUT &= ~LCD12864_CS
#define LCD12864_CS_HIGH LCD12864OUT |= LCD12864_CS
#define LCD12864_SCLK_LOW LCD12864OUT &= ~LCD12864_SCLK
#define LCD12864_SCLK_HIGH LCD12864OUT |= LCD12864_SCLK
#define LCD12864_SID_LOW LCD12864OUT &= ~LCD12864_SID
#define LCD12864_SID_HIGH LCD12864OUT |= LCD12864_SID
#define LCD12864_SID_READ (12864IN & 12864_SID)
#define uchar unsigned char
#define uint unsigned int
//====================================================================
//函数声明
void Delay(uint ms); //延时子程序
//void Write_cmd(cmd); //写指令子程序
//void Write_data(uchar _data); //写数据子程序
//void Position(uchar pos); //定位函数
//void Display(uchar address); //
//void Init_12864();
//void LcdSetXY(uchar x, uchar y, uchar *pt);
void W_1byte(uchar RW, uchar RS, uchar W_data);
void Write_8bits(uint W_bits);
void LCD_Init(void);
//====================================================================
//常量字符数组
uchar mynew1[]={"7920_3wires_demo"};
uchar mynew2[]={"Create by:朱江"};
uchar mynew3[]={"E_mail:ntzhf100@"};
uchar mynew4[]={"163.com"};
/********************************************************************
********************************************************************/
void main(void)
{
unsigned int itemp;
WDTCTL = WDTPW + WDTHOLD; //停止系统软件看门狗
P5DIR |= BIT4; //P54为输出
P5SEL |= BIT4; //P54第二功能:MCLK输出
BCSCTL1 &= ~XT2OFF; //XT2 = HF-XTAL
do {
IFG1 &= ~OFIFG; //清除OSCFault标志位
for (itemp=0xFF;itemp>0;itemp--); //延时等待晶振
} while ((IFG1 & OFIFG)); //OSCFault标志位始终有效?
BCSCTL2 |= SELM_2 ;//+DIVM_3; //MCLK = XT2
uchar i = 0;
LCD12864DIR = 0XFF;
LCD12864_CS_LOW; //CS = 0;
LCD12864_SCLK_LOW; //SCLK = 0;
LCD12864_SID_LOW; //SID = 0;
LCD_Init();
while(1)
{
_NOP();//nop;
_NOP();//nop;
W_1byte(0,0,0x80);
_NOP();//nop;
for(i=0;mynew1[i]!='\0';i++)
{
W_1byte(0,1,mynew1[i]);
}
W_1byte(0,0,0x90);
for(i=0;mynew2[i]!='\0';i++)
{
W_1byte(0,1,mynew2[i]);
}
W_1byte(0,0,0x88);
for(i=0;mynew3[i]!='\0';i++)
{
W_1byte(0,1,mynew3[i]);
}
W_1byte(0,0,0x98);
for(i=0;mynew4[i]!='\0';i++)
{
W_1byte(0,1,mynew4[i]);
}
_NOP();//nop;
}
}
/******************************************************************/
void LCD_Init(void)
{
uchar cmd;
cmd=0x30; //功能设置 8位数据,基本指令
W_1byte(0,0,cmd);
Delay(16);
cmd=0x0C; //显示状态 ON,游标OFF,反白OFF
W_1byte(0,0,cmd); //写指令
Delay(16);
cmd=0x01; //清除显示
W_1byte(0,0,cmd); //写指令
Delay(16);
cmd=0x02; //地址归位
W_1byte(0,0,cmd); //写指令
Delay(16);
cmd=0x80; //设置DDRAM地址
W_1byte(0,0,cmd); //写指令
Delay(16); //延时
}
/*******************************************************************
函 数 名:W_1byte
入口参数:RW、RS、W_data
出口参数:无
建立日期:2007年3月3日
修改日期:
函数作用:写一个字节的数据到12864液晶,包括指令和数据
说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(一般RW都设为0,即只向液晶写数据,不读数据)
RS=1,写入的是数据;RS=0,写入的是指令;
一般模式:RW=0,RS=1;写数据
RW=0,RS=0;写指令
********************************************************************/
void W_1byte(uchar RW, uchar RS, uchar W_data)
{
uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
if(RW == 0)
{
S_ID &= ~0x04;
}
else //if(RW==1)
{
S_ID |= 0X04;
}
if(RS == 0)
{
S_ID &= ~0x02;
}
else //if(RS==1)
{
S_ID |= 0X02;
}
H_data = W_data;
H_data &= 0xf0; //屏蔽低4位的数据
L_data = W_data; //xxxx0000格式
L_data &= 0x0f; //屏蔽高4位的数据
L_data <<= 4; //xxxx0000格式
LCD12864_CS_HIGH; //CS = 1;
Write_8bits(S_ID); //发送S_ID
Write_8bits(H_data); //发送H_data
Write_8bits(L_data); //发送L_data
LCD12864_CS_LOW; //CS = 0;
}
/********************************************************************
函 数 名:Write_8bits
入口参数:W_bits
出口参数:无
建立日期:2007年3月3日
修改日期:
函数作用:负责串行输出8个bit位
说 明:
********************************************************************/
void Write_8bits(uint W_bits)
{
uint i,Temp_data;
for(i=0; i<8; i++)
{
Temp_data = W_bits;
Temp_data <<= i;
if((Temp_data&0x80)==0) //bit7 is zero
{
LCD12864_SID_LOW; //SID = 0;
_NOP(); //nop;
LCD12864_SCLK_HIGH; //SCLK = 1;
_NOP(); //nop;
_NOP(); //nop;
LCD12864_SCLK_LOW; //SCLK = 0;
_NOP(); //nop;
LCD12864_SID_LOW; //SID = 0;
}
else //bit7 is one
{
LCD12864_SID_HIGH; //SID = 1;
_NOP(); //nop;
LCD12864_SCLK_HIGH; //SCLK = 1;
_NOP(); //nop;
_NOP(); //nop;
LCD12864_SCLK_LOW; //SCLK = 0;
_NOP(); //nop;
LCD12864_SID_LOW; //SID = 0;
}
}
}
/********************************************************************
函 数 名:Delay
入口参数:ms
出口参数:无
建立日期:2007年3月3日
修改日期:
函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
说 明:
********************************************************************/
void Delay(uint ms)
{
uint i;
while(ms--)
{
for(i=1;i<(uint)(8*143-2);i++)
;
}
}
//===================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -