我现在在用MSP430launchpad做东西,显示液晶用的是5110,这段程序我在做智能车的时候实现过,能让液晶正常显示,现在移植到launchpad上,我修改了一下,但总是什么也没有或只有一道横线,请大神看一下错在哪了。
#include<msp430g2553.h>
#define SCE_1 P2OUT |= BIT0
#define SCE_0 P2OUT &= ~BIT0
#define RST_1 P2OUT |= BIT1
#define RST_0 P2OUT &= ~BIT1
#define DC_1 P2OUT |= BIT2
#define DC_0 P2OUT &= ~BIT2
#define DIN_1 P2OUT |= BIT3
#define DIN_0 P2OUT &= ~BIT3
#define SCLK_1 P2OUT |= BIT4
#define SCLK_0 P2OUT &= ~BIT4
unsigned char num[]={
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
};
void IO_init(void)
{
P2DIR = BIT0+BIT1+BIT2+BIT3+BIT4;
}
void delay()
{
unsigned int i;
for(i=600;i>0;i--);
}
void lcd_write_byte(unsigned char data,unsigned char command)
{
unsigned char i;
SCE_0;
if(command==0)
DC_0; //写命令
else
DC_1; //写数据
for(i=0;i<8;i++)
{
if(data&0x80)
DIN_1;
else
DIN_0;
SCLK_0;
data = data<<1;
SCLK_1;
}
SCE_1;
}
void lcd_set_xy(unsigned char X,unsigned char Y)
{
lcd_write_byte(0x40|Y,0);
lcd_write_byte(0x80|X,0);
}
void lcd_clear(void)
{
unsigned char i,j;
lcd_set_xy(0,0);
for(i=0;i<6;i++)
{
for(j=0;j<84;j++)
{
lcd_write_byte(0x00,1);
}
}
}
void lcd_init(void)
{
RST_0;
delay();
RST_1;
lcd_write_byte(0x21, 0);
lcd_write_byte(0xd0, 0);
lcd_write_byte(0x06, 0);
lcd_write_byte(0x20, 0);
lcd_write_byte(0x0c, 0);
lcd_clear();
}
void lcd_write_num(unsigned char row,unsigned char page,unsigned char c) //列,页,字
{
unsigned char i;
lcd_set_xy(row*4,page);
for(i=0;i<8;i++)
lcd_write_byte(num[c*16+i],1);
lcd_set_xy(row*4,page+1);
for(i=8;i<16;i++)
lcd_write_byte(num[c*16+i],1);
}
void lcd_write_number(unsigned char hang,unsigned char lie,unsigned int num)
{
unsigned char bai,shi,ge;
bai = num/100;
shi = num/10%10;
ge = num%10;
lcd_write_num(lie,hang,bai);
lcd_write_num(lie+1,hang,shi);
lcd_write_num(lie+2,hang,ge);
}
void main()
{
IO_init();
lcd_init();
lcd_write_num(0,0,110);
}