📄 lcddriver.c
字号:
#include "msp430x12x2.h"
#define uint unsigned int
#define uchar unsigned char
#define send_0 P2OUT&=~BIT1;
#define send_1 P2OUT|=BIT1;
#define clk_0 P2OUT&=~BIT2;
#define clk_1 P2OUT|=BIT2;
#define SysPoweron P2OUT|=BIT5;
#define SysPoweroff P2OUT&=~BIT5;
#define data_in P2DIR&=~BIT1;
#define data_out P2DIR|=BIT1;
//P2.2——SCLK——时钟脉冲
//P2.1——SID——串口数据
/*漫天纷飞的花语
落在春的泥土里*/
const uchar chunni[]={0xc2,0xfe,0xcc,0xec,0xb7,0xd7,0xb7,0xc9,0xb5,0xc4,0xbb,0xa8,0xd3,0xef,
0xc2,0xe4,0xd4,0xda,0xb4,0xba,0xb5,0xc4,0xc4,0xe0,0xcd,0xc1,0xc0,0xef};
const uchar rectangle[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0};
void delay(uint v);
void write_data(uchar lcdata);
void write_command(uchar command);
void cgram_make_word(void);
void fill_with_cgram(void);
void ddram_clear(void);
void init_lcm(void);
void gdram_clear(void);
void gdram_test(void);
void main(void)
{
uchar i;
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1=0x80;
P2DIR|=BIT5;
P2DIR|=BIT2;
P2DIR|=BIT1;
SysPoweron;
init_lcm();
//ddram_clear();
_NOP();
write_command(0x80);
i=0;
write_data(0xA1);
write_data(0xF1);
do
{
write_data(chunni[i]);
}while(++i<14);
write_command(0x90);
i=0;
write_data(0xA1);
write_data(0xF1);
do
{
write_data(chunni[i+14]);
}while(++i<14);
_NOP();
delay(65534);
/*画矩形*/
ddram_clear();
gdram_clear();
gdram_test();
}
//初始化lcd
void init_lcm(void)
{
delay(1000); //延时超过40ms
write_command(0x30); //功能设定
delay(3); //延时超过100us
write_command(0x30); //功能设定
delay(3);
write_command(0x08); //关显示
delay(3);
write_command(0x02); //位址归位
delay(3);
write_command(0x0c); //开显示
delay(3);
write_command(0x01); //清显示
delay(300); //延时超过10ms
write_command(0x06);
}
void gdram_clear(void)
{
uchar cur_x,cur_y;
cur_x=0;
cur_y=0;
write_command(0x34); //扩展功能设置
do{
do
{
write_command(0x80+cur_y); //y坐标
write_command(0x80+cur_x); //x坐标
write_data(0);
write_data(0);
}while(++cur_x<16);
cur_x=0;
}while(++cur_y<64);
}
void gdram_test(void)
{
uchar cur_x,cur_y;
uchar bm_width,bm_height;
uchar temp1,i,temp2;
bm_width=16;
bm_height=16;
cur_x=0;
cur_y=0;
temp1=cur_x;
i=0;
do{
write_command(0x34); //关显示
write_command(0x80+cur_y); //y坐标
write_command(0x80+cur_x); //x坐标
write_data(rectangle[i++]);
write_data(rectangle[i++]);
write_command(0x36); //开图形显示
cur_x++;
temp2=bm_width;
temp2=temp2>>1;
if((temp1+temp2)==cur_x)
{
cur_x=temp1;
cur_y++;
if(--bm_height==0)
break;
}
}while(1);
}
void write_command(uchar command)
{
uchar i;
send_1;
i=5;
while(i-->0)
{
clk_0; //发送五个1
clk_1;
}
//write RW=0
clk_0;
send_0;
clk_1;
//write RS=0
clk_0;
clk_1;
clk_0; //0
clk_1;
//发送D7~D4
i=4;
while(i-->0)
{
clk_0;
if((command|0x7f)==0xff)
P2OUT|=BIT1;
else
P2OUT&=~BIT1;
command=command<<1;
clk_1;
}
//发送四个0
send_0;
i=4;
while(i-->0)
{
clk_0;
clk_1;
}
//发送D3~D0
i=4;
while(i-->0)
{
clk_0;
if((command|0x7f)==0xff)
P2OUT|=BIT1;
else
P2OUT&=~BIT1;
command=command<<1;
clk_1;
}
//发送四个0
send_0;
i=4;
while(i-->0)
{
clk_0;
clk_1;
}
delay(10);
}
void write_data(uchar lcddata)
{
uchar i;
send_1;
i=5;
while(i-->0)
{
clk_0; //发送五个1
clk_1;
}
//write RW=0
clk_0;
send_0;
clk_1;
//write RS=1
clk_0;
send_1;
clk_1;
clk_0;
send_0; //0
clk_1;
//发送D7~D4
i=4;
while(i-->0)
{
clk_0;
if((lcddata|0x7f)==0xff)
P2OUT|=BIT1;
else
P2OUT&=~BIT1;
lcddata=lcddata<<1;
clk_1;
}
//发送四个0
send_0;
i=4;
while(i-->0)
{
clk_0;
clk_1;
}
//发送D3~D0
i=4;
while(i-->0)
{
clk_0;
if((lcddata|0x7f)==0xff)
P2OUT|=BIT1;
else
P2OUT&=~BIT1;
lcddata=lcddata<<1;
clk_1;
}
//发送四个0
send_0;
i=4;
while(i-->0)
{
clk_0;
clk_1;
}
delay(10);
}
void delay(uint v)
{
while(v!=0)v--;
}
void ddram_clear(void)
{
write_command(0x30); //基本功能设置
write_command(0x01); //清显示
write_command(0x36); //扩展功能设置,绘图模式on
write_command(0x30); //基本功能设置
}
/*
void fill_with_cgram(void)
{
cgram_make_word();
write_command(0x08); //关显示
write_command(0x01); //清显示
write_command(0x0c); //开显示
write_command(0x80); //设定ddram显示地址
write_data(0x00);
write_data(0x00); //调用字模代码,显示字模数据 ??
}
void cgram_make_word(void)
{
uchar i;
write_command(0x34); //扩展功能设置
write_command(0x20); //允许输入IRAM位址
write_command(0x30); //基本功能设置
write_command(0x40); //设定CGRAM位址
i=0;
do{
write_data(m3h_table[i]);
}while(++i<32);
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -