#include <iostm8l152c6.h>
void Delay(unsigned char x)
{
unsigned char i,j;
for(i=0;i<x;i++)
for(j=0;j<x;j++);
}
void SPI1_init()
{
CLK_PCKENR1 |= 0X10; //使能SPI1外部门控
PB_DDR |= MASK_PB_DDR_DDR6 | MASK_PB_DDR_DDR5;
PB_CR1 |= MASK_PB_CR1_C16 | MASK_PB_CR1_C15;
PD_DDR |= MASK_PD_DDR_DDR7 | MASK_PD_DDR_DDR6 | MASK_PD_DDR_DDR5 | MASK_PD_DDR_DDR4;
PD_CR1 |= MASK_PD_CR1_C17 | MASK_PD_CR1_C16 | MASK_PD_CR1_C15 | MASK_PD_CR1_C14;
//设置PB6(MOSI),PB5(CLK),PD7(CE),PD6(DC),PD5(BL),PD4(RST)为推挽输出 B7(MISO)悬浮输入;
SPI1_CR2 |= MASK_SPI1_CR2_SSM | MASK_SPI1_CR2_SSI; //使能软件控制,并且设置为主模式;
SPI1_CR1 |= MASK_SPI1_CR1_MSTR | MASK_SPI1_CR1_BR; //开主模式,设置波特率;
SPI1_CR1 |= MASK_SPI1_CR1_SPE; //使能SPI1;
}
void LCD_WRITE_BYTE(unsigned char data,unsigned char command)
{
PD_ODR_bit.ODR7=0; //开启CE
if(command==0)
PD_ODR_bit.ODR6=0; //写命令
else
PD_ODR |= MASK_PD_ODR_ODR6; //写数据
SPI1_DR=data; //传送
Delay(10);
while(!(SPI1_SR&0X02));
PD_ODR |= MASK_PD_ODR_ODR7; //关闭CE
}
void LCD_clear(void)
{
unsigned int i;
LCD_WRITE_BYTE(0x0c, 0);
LCD_WRITE_BYTE(0x80, 0);
for (i=0; i<504; i++)
LCD_WRITE_BYTE(0, 1);
}
void LCD_init()
{
PD_ODR |= MASK_PD_ODR_ODR4;
Delay(1);
PD_ODR |= MASK_PD_ODR_ODR4;
Delay(1);
PD_ODR |= MASK_PD_ODR_ODR7;
Delay(1);
PD_ODR_bit.ODR7=0;
Delay(1);
LCD_WRITE_BYTE(0X21,0);
LCD_WRITE_BYTE(0XC8,0);
LCD_WRITE_BYTE(0X06,0);
LCD_WRITE_BYTE(0X13,0);
LCD_WRITE_BYTE(0X20,0);
LCD_clear();
LCD_WRITE_BYTE(0X0C,0);
PD_ODR |= MASK_PD_ODR_ODR7;
}
void LCD_set_XY(unsigned char X, unsigned char Y)
{
LCD_WRITE_BYTE(0x40 | Y, 0); // column
LCD_WRITE_BYTE(0x80 | X, 0); // row
}
void main()
{
unsigned char temp;
SPI1_init();
LCD_init();
PD_ODR_bit.ODR5=1;
LCD_WRITE_BYTE(0X0C,1);
temp=SPI1_DR;
while(1);
}
液晶上啥都没有 , 难道我还忘设置什么了吗? 求帮助 。。。。。我没有设置坐标应该没有事情吧
|