📄 splc501.c
字号:
#include <msp430x16x.h>
#define P_IO_Data_Data P1OUT /*DB0~DB7->P1.0~P1.7*/
#define P_IO_Control_Data P2OUT
#define SPLC501_RES 0x10 /*RES->P2.4*/
#define SPLC501_A0 0x20 /*A0->P2.5*/
#define SPLC501_RW 0x40 /*RW->P2.6*/
#define SPLC501_EP 0x80 /*EP->P2.7*/
unsigned char buffer[]={
0xFF,0xFD,0x0D,0xED,0xED,0xED,0x01,0xED,0xED,0xED,0x01,0xED,0xED,0xED,0x0D,0xFD,
0xFF,0xFF,0x80,0xDD,0xDD,0xDD,0xDE,0xDF,0xDF,0xDF,0xDE,0xDD,0xDB,0xD7,0x80,0xFF,/*"西",0*/
0xFF,0xFB,0x19,0xDB,0xDB,0x9B,0x5B,0xDB,0xD0,0x4B,0x9B,0xDB,0xDB,0x1B,0xFB,0xFB,
0xFF,0xFF,0xC0,0xBB,0xDA,0xFA,0xFA,0xFA,0x80,0xFA,0xFA,0xFA,0xFB,0x80,0xFF,0xFF,/*"南",1*/
0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x33,0xDD,0xFF,0x6E,0xAE,0x01,0x8D,0x6D,0xED,0xEF,
0xFF,0xFE,0xFE,0x00,0xFD,0xFD,0xFD,0xFB,0xFB,0xFB,0xFF,0x00,0xFF,0xFE,0xFD,0xFB,/*"科",2*/
0xFF,0xF7,0xB7,0x37,0xB7,0x80,0xB7,0xB7,0x37,0xFF,0xD7,0xB7,0x00,0x77,0xF7,0xF7,
0xFF,0xDF,0x9F,0xDE,0xED,0xF3,0xF3,0xEC,0xDF,0xBF,0xBF,0xFF,0x80,0x7F,0xBE,0xFE,/*"技",3*/
0xFF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0x5F,0x80,0x5F,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,
0xFF,0xBF,0x3F,0x9F,0xCF,0xF7,0xF9,0xFE,0xFF,0xFC,0xF3,0xEF,0xDF,0xBF,0x7F,0xFF,/*"大",4*/
0xFF,0xEF,0xCD,0xA8,0xE7,0xAF,0x2B,0xA1,0xAE,0xAF,0xAB,0xA3,0xED,0xEF,0xCF,0xBF,
0xFF,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0x80,0x7D,0xBD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFF,
};
unsigned char *q=buffer;
void InitGraphic(void);
void sendorder_contorl(void);
void senddata_contorl(void);
void setpage( unsigned char a);
void setline( unsigned char addr);
void ClearScreen( unsigned char a);
void write_word(unsigned char a,unsigned char b,unsigned char n);
void senddata(unsigned char n);
/**********************************************
* 函数名称:液晶初始化函数 *
* 作者:李宁 *
* 时间:2008年08月11号 *
* 修改:李宁 *
* 时间:2008年08月11号 *
* 入口参数:无 *
* 出口参数:无 *
***********************************************/
void InitGraphic(void)
{
/********************************************************/
P_IO_Data_Data =0x00; //端口初始化
P_IO_Control_Data =0x8f;
/********************************************************/
P_IO_Data_Data =0xe2; //复位 reset
sendorder_contorl(); //送命令子函数
P_IO_Data_Data =0xe3; //空操作
sendorder_contorl();
P_IO_Data_Data =0xc0; //COM口扫描方向63---0
sendorder_contorl();
P_IO_Data_Data =0xa0; //ADC(segment方向)设定为正常 A1 reverse
sendorder_contorl();
P_IO_Data_Data =0xa2; // LCD偏压设定 1/9 bias
sendorder_contorl();
P_IO_Data_Data =0x24; //V5电压内部电阻调整设置
sendorder_contorl();
P_IO_Data_Data =0x81; //电量设置模式 (双字节)
sendorder_contorl();
P_IO_Data_Data =0x1a; //调整显示屏亮度
sendorder_contorl();
P_IO_Data_Data =0xd2; //驱动模式
sendorder_contorl();
P_IO_Data_Data =0x00; //模式2
sendorder_contorl();
P_IO_Data_Data =0x2c; //上电控制设置 REGULATOR on
sendorder_contorl();
P_IO_Data_Data =0x2e; //上电控制设置 +FOLLOWER oFF ????(或许是)
sendorder_contorl();
P_IO_Data_Data =0x2f; //上电控制设置 +FOLLOWER on ????(或许是)
sendorder_contorl();
P_IO_Data_Data =0xaf; //开显示
sendorder_contorl();
setpage(0); //页设置为第0页
P_IO_Data_Data =0x40; //显示起始行设置为第0行
sendorder_contorl();
setline(0); //列设置为第0列
P_IO_Data_Data =0xa7; //正常显示
sendorder_contorl();
//P_IO_Data_Data =0xa4; //全屏变暗
//sendorder_contorl();
ClearScreen(1); //清屏全部ROM填零
}
/**********************************************
* 函数名称:发送命令控制字子函数 *
* 作者:李宁 *
* 时间:2008年08月11号 *
* 修改:李宁 *
* 时间:2008年08月11号 *
* 入口参数:无 *
* 出口参数:无 *
***********************************************/
void sendorder_contorl(void) /* A0 EP WR*/
{ /* 0 1 0*/
unsigned char c;
c=(SPLC501_A0|SPLC501_EP|SPLC501_RW);
c^=0xff;
P_IO_Control_Data=c;
P_IO_Control_Data=c|SPLC501_EP;
P_IO_Control_Data=c;
}
/**********************************************
* 函数名称:发送数据控制字子函数 *
* 作者:李宁 *
* 时间:2008年08月11号 *
* 修改:李宁 *
* 时间:2008年08月11号 *
* 入口参数:无 *
* 出口参数:无 *
***********************************************/
void senddata_contorl(void) /* A0 EP WR*/
{ /* 1 1 0 */
unsigned char c;
c=(SPLC501_A0|SPLC501_EP|SPLC501_RW);
c^=0xff;
P_IO_Control_Data=c;
P_IO_Control_Data=c|SPLC501_A0|SPLC501_EP;
P_IO_Control_Data=c;
}
/**********************************************
* 函数名称:页设置函数 *
* 作者:李宁 *
* 时间:2008年08月11号 *
* 修改:李宁 *
* 时间:2008年08月11号 *
* 入口参数:page->页号 *
* 出口参数:无 *
***********************************************/
void setpage( unsigned char page)
{
page|=0xB0;
P_IO_Data_Data =page;
sendorder_contorl();
}
/**********************************************
* 函数名称:列设置函数 *
* 作者:李宁 *
* 时间:2008年08月11号 *
* 修改:李宁 *
* 时间:2008年08月11号 *
* 入口参数:line->列号 *
* 出口参数:无 *
***********************************************/
void setline( unsigned char line)
{
unsigned char line_hign;
line_hign=line>>4;
line_hign&=0x1f;
line_hign|=0x10;
line&=0x0f;
P_IO_Data_Data =line;
sendorder_contorl();
P_IO_Data_Data =line_hign;
sendorder_contorl();
}
/**********************************************
* 函数名称:清屏子函数 *
* 作者:李宁 *
* 时间:2008年08月11号 *
* 修改:李宁 *
* 时间:2008年08月11号 *
* 入口参数:无 *
* 出口参数:无 *
***********************************************/
void ClearScreen( unsigned char a)
{
unsigned char z1,z2;
if(a!=0) a=0xff;
for(z1=0;z1<8;z1++)
{
setpage(z1);
setline(0);
for(z2=0;z2<128;z2++)
{
P_IO_Data_Data =a;
senddata_contorl();
}
}
}
/**********************************************
* 函数名称:写汉字函数 *
* 作者:李宁 *
* 时间:2008年08月11号 *
* 修改:李宁 *
* 时间:2008年08月11号 *
* 入口参数:page->页 *
* line->列 *
* n-}数组中汉字的序号 *
* 出口参数:无 *
***********************************************/
void write_word(unsigned char page,unsigned char line,unsigned char n) //汉字
{
unsigned char i,*p;
p=q+32*n;
setpage(page);
for(i=0;i<16;i++)
{
setline(line+i);
senddata(*p);
p++;
}
setpage(page+1);
for(i=16;i<32;i++)
{
setline(line+i-16);
senddata(*p);
p++;
}
}
/**********************************************
* 函数名称:发送数据函数 *
* 作者:李宁 *
* 时间:2008年08月11号 *
* 修改:李宁 *
* 时间:2008年08月11号 *
* 入口参数:data->数据 *
* 出口参数:无 *
***********************************************/
void senddata(unsigned char data)
{
P_IO_Data_Data =data;
senddata_contorl();
}
main()
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR=0xFF;
P2DIR=0xFF;
P1OUT=0xFF;
P2OUT=0xFF;
InitGraphic();
while(1)
{
write_word(0,96,0);
write_word(0,80,1);
write_word(0,64,2);
write_word(0,48,3);
write_word(0,32,4);
write_word(0,16,5);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -