#include "DSP28x_Project.h"
#define CS GpioDataRegs.GPADAT.bit.GPIO19
void SPI_init(void);
int get;
char table0[]="北京邮电大学";
void Sendbyte(unsigned char bytes)
{
while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG); //上一字节完全移除时该位置为0,就是当发送缓冲器中没有数据时为0,有数据时为1
SpiaRegs.SPITXBUF=(bytes<<8);
get=SpiaRegs.SPIRXBUF;
//DELAY_US(100);
}
void write_com(unsigned char com)
{
//CS=1;DELAY_US(2);
Sendbyte(0xf8);DELAY_US(10);
Sendbyte(com&0xf0);DELAY_US(10);
Sendbyte((com&0x0f)<<4);DELAY_US(10);
//CS=0;DELAY_US(2);
}
void write_data(unsigned char dat)
{
//CS=1;DELAY_US(2);
Sendbyte(0xfa);
Sendbyte(dat&0xf0);
Sendbyte((dat&0x0f)<<4);
//CS=0;DELAY_US(2);
}
void LCD_Init(void)
{
write_com(0x01);
DELAY_US(10);
write_com(0x30);
DELAY_US(10);
write_com(0x0c);
DELAY_US(10);
write_com(0x06);
DELAY_US(10);
write_com(0x02);
DELAY_US(1000);
}
void main(void)
{
int n;
InitSysCtrl(); // 系统初始化函数
InitSpiaGpio();
DINT; // 关闭CPU中断
InitPieCtrl(); // PIE中断控制
IER = 0x0000; // 关闭中断使能
IFR = 0x0000; // 清除中断标志位
InitPieVectTable();
EINT;
ERTM;
SPI_init();
// SpiaRegs.SPITXBUF=0x00;这是关键,上电后,如果不先发送一个数据的话,发送第一个数据就没有效果,我发的是清屏指令,只有先发一个伪数据才能够清屏
//MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
while(1)
{
/*****************第一行*******************/
LCD_Init();
write_com(0x80);
write_data(0x0b);
DELAY_US(1000);
write_data(0x0b);
for(n=0;n<12;n++)
{
write_data(table0[n]);
DELAY_US(10);
}
write_data(0x0b);
write_data(0x0b);
/*****************第二行********************/
DELAY_US(1000000);
LCD_Init();
write_com(0x90);
write_data(0x0b);
write_data(0x0b);
for(n=0;n<12;n++)
{
write_data(table0[n]);
DELAY_US(10);
}
write_data(0x0b);
write_data(0x0b);
DELAY_US(1000000);
/*****************第三行********************/
LCD_Init();
write_com(0x88);
write_data(0x0b);
write_data(0x0b);
for(n=0;n<12;n++)
{
write_data(table0[n]);
DELAY_US(10);
}
write_data(0x0b);
write_data(0x0b);
DELAY_US(1000000);
/*****************第四行********************/
LCD_Init();
write_com(0x98);
write_data(0x0b);
write_data(0x0b);
for(n=0;n<12;n++)
{
write_data(table0[n]);
DELAY_US(10);
}
write_data(0x0b);
write_data(0x0b);
DELAY_US(1000000);
}
// while(1);
}
void SPI_init() //SPI的初始化函数
{
EALLOW;
SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI
SpiaRegs.SPICCR.all=0x0047; //8-bit character, disable Loopback mode,Rising edge output
SpiaRegs.SPICTL.all=0x0006; //Interrupt enabled, Master,no delay
SpiaRegs.SPISTS.all=0x0000; //clear all the status
SpiaRegs.SPIBRR=0x0063; // Baud rate
SpiaRegs.SPIPRI.all=0x0000;
SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI
EDIS;
} |