📄 lcdlms283.c
字号:
void mdelay(int ms)
{
U32 val = (PCLK>>3)/1000-1;
rTCFG0 &= ~(0xff<<8);
rTCFG0 |= 3<<8; //prescaler = 3+1
rTCFG1 &= ~(0xf<<12);
rTCFG1 |= 0<<12; //mux = 1/2
rTCNTB3 = val;
rTCMPB3 = val>>1; // 50%
rTCON &= ~(0xf<<16);
rTCON |= 0xb<<16; //interval, inv-off, update TCNTB3&TCMPB3, start timer 3
rTCON &= ~(2<<16); //clear manual update bit
while(ms--) {
while(rTCNTO3>=val>>1);
while(rTCNTO3<val>>1);
};
}
void InitSPI(void)
{
rGPDCON &= ~(3<<16);
rGPDCON |= (3 << 16); //GPD8,SPIMISO1
rGPDCON &= ~(3<<18);
rGPDCON |= (3 << 18); //GPD9,SPIMOSI1
rGPDCON &= ~(3<<20);
rGPDCON |= (3 << 20); //GPD10,SPICLK1
rGPDUP &= ~(1<<8); //enable pullup for GPD8
rGPDUP &= ~(1<<9); //enable pullup for GPD9
rGPDUP &= ~(1<<10); //enable pullup for GPD10
// Config GPC6 is Master SPI CS
rGPCCON &= ~(3<<12);
rGPCCON |= (1<<12); //GPC6 as out
// Initialize CS is high
rGPCUP &= ~(1<<6); //enable pullup for GPC6
rGPCDAT |= (1<<6); //CS,High
rSPPRE1 = 0x18;
rSPCON1 =0x18; //001 1000
rSPPIN1=0x02; //使用默认值
}
void SPI_Write(char *pBuffer, char dwNumBytes)
{
char *temp ;
char i ;
temp = pBuffer;
rGPCDAT &= ~(1<<6);// Set CS to low
//Delay(1);
for(i=0;i<dwNumBytes;i++)
{
// Check the status of Transfer Ready flag(READY=1) ,and then write data to SPTDAT0
while( (rSPSTA1 & 0x01) != 1 );
rSPTDAT1 = *temp; // Write Potentiometer value
temp++;
}
// Wait to complete write data
while( (rSPSTA1 & 0x01) != 1 );
//Delay(1);
rGPCDAT |= (1<<6); // Set CS to high
}
void lcd_SpiSetREG(char RegAdd,int value)
{
char temp[3];
//Sets Index Register
temp[0]=0x74;
temp[1]=0x00;
temp[2]=RegAdd;
SPI_Write(temp,3);
//Writes Instruction
temp[0]=0x76;
temp[1]=(value>>8)&0xff;
temp[2]=(value)&0xff;
SPI_Write(temp,3);
}
void Lcd_Reset()
{
//POWER ON
//reset
//_1ms_|~~~>20ms~~|_>1ms_|~~~~复位波形
mdelay(10);
rGPCCON &= ~(3 << 10);
rGPCCON |= (1 << 10);//GPC5 as OUT
rGPCUP &= ~(1 << 5);//enable pullup for GPC5
rGPCDAT &= ~(1 << 5);//resetIO low
mdelay(1);
rGPCDAT |= (1 << 5);//resetIO high
mdelay(30);
rGPCDAT &= ~(1 << 5);//resetIO low
mdelay(5);
rGPCDAT |= (1 << 5);//resetIO high
mdelay(1);
}
void Lcd_SpiInit()
{
mdelay(2);
lcd_SpiSetREG(0x07,0x0000);
lcd_SpiSetREG(0x13,0x0000);
mdelay(10);
lcd_SpiSetREG(0x11,0x3004);
lcd_SpiSetREG(0x14,0x200F);
lcd_SpiSetREG(0x10,0x1A20);
lcd_SpiSetREG(0x13,0x0040);
mdelay(50);
lcd_SpiSetREG(0x13,0x0060);
lcd_SpiSetREG(0x13,0x0070);
mdelay(200);
lcd_SpiSetREG(0x01,0x0127);
lcd_SpiSetREG(0x02,0x0700);
lcd_SpiSetREG(0x03,0x1030);
lcd_SpiSetREG(0x08,0x0208);
lcd_SpiSetREG(0x0B,0x0620);
lcd_SpiSetREG(0x0C,0x0110);
lcd_SpiSetREG(0x30,0x0120);
lcd_SpiSetREG(0x31,0x0127);
lcd_SpiSetREG(0x32,0x0000);
lcd_SpiSetREG(0x33,0x0503);
lcd_SpiSetREG(0x34,0x0727);
lcd_SpiSetREG(0x35,0x0124);
lcd_SpiSetREG(0x36,0x0706);
lcd_SpiSetREG(0x37,0x0701);
lcd_SpiSetREG(0x38,0x0F00);
lcd_SpiSetREG(0x39,0x0F00);
lcd_SpiSetREG(0x40,0x0000);
lcd_SpiSetREG(0x41,0x0000);
lcd_SpiSetREG(0x42,0x013F);
lcd_SpiSetREG(0x43,0x0000);
lcd_SpiSetREG(0x44,0x013F);
lcd_SpiSetREG(0x45,0x0000);
lcd_SpiSetREG(0x46,0xEF00);
lcd_SpiSetREG(0x47,0x013F);
lcd_SpiSetREG(0x48,0x0000);
lcd_SpiSetREG(0x07,0x0015);
mdelay(30);
lcd_SpiSetREG(0x07,0x0017);
//DISPLAY ON
lcd_SpiSetREG(0x20,0x0000);
lcd_SpiSetREG(0x21,0x0000);
lcd_SpiSetREG(0x22,0x0000);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -