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 + -
显示快捷键?