📄 f14912864.txt
字号:
#include <msp430x14x.h>
#define P2_0_RS 0x01 //数据指令控制位
#define P2_1_RW 0x02 //读写控制为
#define P2_2_EN 0x04 //液晶使能位
#define P2_3_CS1 0x08 //右片使能位
#define P2_3_CS2 0x40 //左片使能位
#define P2_3_RST 0x80 //液晶复位位
#define P5_0_DB0 0x01 //P5口为数据
#define P5_1_DB1 0x02
#define P5_2_DB2 0x04
#define P5_3_DB3 0x08
#define P5_4_DB4 0x10
#define P5_5_DB5 0x20
#define P5_6_DB6 0x40
#define P5_7_DB7 0x80
void delay(uint v) //调用延时
{
while(v>0)
{
v--;
}
}
void port_ini( void ) //程序初始化
{
P5DIR = 0xFF; //P5口定义为输出
P5OUT = 0x00; //输出为0
P2DIR = 0xFF; //p2口定义为输出
P2OUT = P2_3_CS1 | P2_3_CS2 | P2_3_RST; //复位液晶全屏显示,复位
P2OUT &=~P2_3_RST; //将复位端置低
_NOP();
_NOP();
P2OUT |= P2_2_EN; //液晶使能开
_NOP();
_NOP();
P2OUT &=~P2_2_EN; //关液晶使能
_NOP();
_NOP();
P2OUT |= P2_3_RST; //液晶复位
_NOP();
_NOP();
delay(400);
}
void write_command( uchar nByte ) //写控制程序
{
P5DIR = 0xFF; //p5设置为输出
P2OUT |= P2_3_CS1+P2_3_CS2; //选通左右屏
P2OUT &=~(P2_0_RS+P2_1_RW); //选定D0~D7发送的为指令数据
P5OUT = nByte; //p5输出为 n位
P2OUT |= P2_2_EN; //液晶使能开
delay(10);
P2OUT &=~P2_2_EN; //液晶使能关,E产生下降沿,使D0~D7数据发送到DRm
delay(400);
}
void write_char( uchar nByte, uchar CS1, uchar CS2 ) //写数据程序
{
P5DIR = 0xFF; //p5设置为输出
if(CS1) P2OUT |= P2_3_CS1; //当cs1为高(选通)时,p2_3_cs1口输出高
else P2OUT &=~P2_3_CS1; //否则p2_3_cs1口输出低
if(CS2) P2OUT |= P2_3_CS2; //当cs2为高(选通)时,p2_3_cs2口输出高
else P2OUT &=~P2_3_CS2;//否则p2_3_cs2口输出低
P2OUT |= P2_0_RS; //H,显示数据。L,写指令
P2OUT &=~P2_1_RW; //H,读数据。L,写数据
P5OUT = nByte;
P2OUT |= P2_2_EN; //下降沿锁存数据。结合RW为L时,数据写到数据总线
delay(3);
P2OUT &=~P2_2_EN;
}
void clear_lcd( void ) //清屏
{
uchar i,j;
for(i=0;i<8;i++)
{
write_command(i|0xB8); //输出行地址
write_command(0x40); //列出始地址
for(j=0;j<128;j++) //列地址递增
{
if(j<=63) write_char(0,1,0); //判断选通左右屏
else write_char(0,0,1);
_NOP();
}
}
}
void display_hz( uchar *chr, uchar nRow, uchar nCol )
{
uchar i,tmpCol;
write_command(0xB8|nRow);
tmpCol=nCol;
for(i=0;i<16;i++) //8*16(16点一字)扫描一字所占的十六行
{
if(tmpCol<=63) //扫描左/右屏的列位
{
write_command(0x40|tmpCol);
write_char(chr[i],1,0);
}
else
{
write_command(0x40|(tmpCol-64)); //右屏起始地址
write_char(chr[i],0,1); //选通右屏,chr[i]?
}
tmpCol++;
}
write_command(0xB8|nRow+1); //nrow+1???
tmpCol=nCol;
for(i=0;i<16;i++)
{
if(tmpCol<=63)
{
write_command(0x40|tmpCol);
write_char(chr[i+16],1,0);
}
else
{
write_command(0x40|(tmpCol-64));
write_char(chr[i+16],0,1); //i+16下一行初始地址
}
tmpCol++;
}
}
void display_8_16_icon( uchar *chr, uchar nRow, uchar nCol )
{
uchar i,tmpCol;
write_command(0xB8|nRow);
tmpCol=nCol;
for(i=0;i<8;i++)
{
if(tmpCol<=63)
{
write_command(0x40|tmpCol);
write_char(chr[i],1,0);
}
else
{
write_command(0x40|(tmpCol-64));
write_char(chr[i],0,1);
}
tmpCol++;
}
write_command(0xB8|nRow+1);
tmpCol=nCol;
for(i=0;i<8;i++)
{
if(tmpCol<=63)
{
write_command(0x40|tmpCol);
write_char(chr[i+8],1,0);
}
else
{
write_command(0x40|(tmpCol-64));
write_char(chr[i+8],0,1);
}
tmpCol++;
}
}
void display_char( uchar *chr, uchar nRow, uchar nCol )
{
uchar i,tmpCol;
write_command(0xB8|nRow);
tmpCol=nCol;
for(i=0;i<5;i++)
{
if(tmpCol<=63)
{
write_command(0x40|tmpCol);
write_char(chr[i],1,0);
}
else
{
write_command(0x40|(tmpCol-64));
write_char(chr[i],0,1);
}
tmpCol++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -