lcddriver.c.bak
来自「MSP430单片机的液晶驱动程序」· BAK 代码 · 共 237 行
BAK
237 行
#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——串口数据
uchar m3h_table[]={ 0x01,0x80,0x02,0x40,0x00,0x40,0x01,0x80,
0x00,0x48,0x02,0x50,0xb9,0x90,0x54,0x20,
0x54,0x48,0x54,0x48,0x54,0x88,0x55,0x0e,
0x01,0x09,0x02,0x09,0x00,0x09,0x00,0x09};
/*漫天纷飞的花语
落在春的泥土里*/
uchar chunni[]={0xc2,0xfe}
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 main(void)
{
uchar i;
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1=0x80;
P2DIR|=BIT5;
P2DIR|=BIT2;
P2DIR|=BIT1;
SysPoweron;
init_lcm();
write_command(0x80);
i=32;
while(i-->0)
{
write_data{chunni[0]};
write_data{chunni[1]};
}
/* ddram_clear();
fill_with_cgram();*/
}
//初始化lcd
void init_lcm(void)
{
delay(1000); //延时超过40ms
write_command(0x30); //功能设定
delay(3); //延时超过100us
write_command(0x30); //功能设定
delay(3);
write_command(0x0a); //开显示
delay(3);
write_command(0x01); //清显示
delay(30); //延时超过1ms
write_command(0x06);
}
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);
}
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;
clk_1;
clk_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--;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?