Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Dspic33fj16gs504 use spi to drive 12232 lcd

Status
Not open for further replies.

cnjxlxp

Newbie level 3
Joined
Jun 4, 2010
Messages
3
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,320
MY LCD DRIVE IC IS ST7920:
AND HERE ST7920'S DATASHEET
**broken link removed**
MY CODE AS BELOW: DISPLAY NOTHING ON LCD
#include <p33fj16gs504.h>
#include<spi.h>
_FWDT(FWDTEN_OFF)//7.37MHZ


//lcd2232F Serial interface(ST7920)
#define uint unsigned int
#define uchar unsigned char

void delay_100us(uint x) //
{
uint j;
uchar i;
for(j=0;j<x;j++)
{
for(i=0;i<71;i++); //71
}
}


void send_command(uchar command_data)
{ unsigned char tmp;
uchar command_data_h,command_data_l;
// delay_1ms(100);
SPI1BUF=0xf8;
while(_SPITBF);
tmp = SPI1BUF;
command_data_h=command_data&0xf0;
SPI1BUF=command_data_h;
while(_SPITBF);
tmp = SPI1BUF;
command_data_l=command_data&0x0f;
command_data_l=command_data_l<<4;
SPI1BUF=command_data_l;
while(_SPITBF);
tmp = SPI1BUF;
}

void send_data(uchar command_data)
{ unsigned char tmp;
uchar command_data_h,command_data_l;
// delay_1ms(100);
SPI1BUF=0xfa;
while(_SPITBF);
tmp = SPI1BUF;
command_data_h=command_data&0xf0;
SPI1BUF=command_data_h;
while(_SPITBF);
tmp = SPI1BUF;
command_data_l=command_data<<4;
command_data_l=command_data_l&0xF0;
SPI1BUF=command_data_l;
while(_SPITBF);
tmp = SPI1BUF;
}

void lcd_init()
{
uchar command_data;
delay_100us(1000);
command_data=0x30;
send_command(command_data); //FUNCTION SET>100us 8-bit MPU interface , basic instruction set
delay_100us(2);//200us
command_data=0x30;
send_command(command_data);//FUNCTION SET >37us 8-bit MPU interface , basic instruction set
delay_100us(1);//100us
command_data=0x30;
send_command(command_data);
delay_100us(1);
command_data=0x30;
send_command(command_data);
delay_100us(1);
command_data=0x08;
send_command(command_data); //dispaly on/off control>100us Display, cursor and blink are ALL OFF
delay_100us(2);//200us
command_data=0x01;
send_command(command_data); //display clear>10ms
delay_100us(101);//10.1ms
command_data=0x06;
send_command(command_data); //entry mode set /*Cursor move to right ,DDRAM address counter (AC) plus 1 */
delay_100us(1);//100us
command_data=0x0E;
send_command(command_data); //dispaly on
delay_100us(1);//100us
command_data=0x80;
send_command(command_data);
delay_100us(1);//100us
send_data(0x41);//display 'A'
delay_100us(1000);
}

void SPI_INIT(void)
{
__builtin_write_OSCCONL(OSCCON&0xBF); // to clear IOLOCK

RPOR6=0X0807;//00 001000 00 000111 //IO FUNC DEFINE RP12=SDO,RP13=SCK

__builtin_write_OSCCONL(OSCCON|0x40); //to set IOLOCK

_SPI1IF=0;
_SPI1IE=1;
_SPI1IP=5;
SPI1CON1=0X0120;//0000 0001 0010 0000
SPI1CON2=0X0000;
SPI1STAT=0X0000; //0000 0000 0000 0000
_SPIEN=1;
}

main()
{
SPI_INIT();
lcd_init();
while(1);

}

void __attribute__((__interrupt__)) _SPI1Interrupt(void)

{
IFS0bits.SPI1IF=0;
}

THANKS!
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top