We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
hi i am trying to interface an 16x2 lcd onto an arm7 board lpc2148. the pins i am using for the data is p0.16-p0.23 and for control signals ie rs rw e i am using p1.24 p1.25 p1.26 respectively.When i dump the following code nothing is getting changed in the display .can anybody help me out...i am attaching the code here ..kindly do the needful
#include<LPC214x.h> void init_PLL(void); void init_GPIO(void); void lcd_data(unsigned char); void lcd_cmd(unsigned char); void lcd_init(void); void delay(unsigned int); #define E 0x04000000 #define RW 0x02000000 #define RS 0x01000000 int main(void) { init_PLL(); init_GPIO(); lcd_init(); while(1) { lcd_data('A'); lcd_data('B'); lcd_data(96); lcd_data('d'); delay(0xffffff); } } void init_PLL(void) { PLL0CFG=0x00000024; // TO GENERATE 60 MHZ CCLK PLL0CON=0x00000001; PLL0FEED=0x000000AA;//UPDATE THE PLL REGISTER PLL0FEED=0x00000055; while(!(PLL0STAT & 0x00000400)); // CHECK WHETHRT THE CCLK IS GENERATED EXAXT VALUE PLL0CON=0x00000003; // CONNECT PLL PLL0FEED=0x000000AA; //UPDATE THE PLL REGISTER PLL0FEED=0x00000055; VPBDIV=0x00000002; //PCLK=1/2*CCLK } void init_GPIO( void) { PINSEL0=0x00FF0000; PINSEL1=0x07000000; IODIR0=0x00FF0000; IODIR1=0x07000000; } void lcd_init(void) { lcd_cmd(0x380000); delay(0xffffff); lcd_cmd(0x0e0000); delay(0xffffff); lcd_cmd(0x800000); delay(0xffffff); lcd_cmd(0x060000); delay(0xffffff); } unsigned int adjust_portbit(unsigned char c) { unsigned char j; unsigned int result; result=c; for(j=0;j<16;j++) { result=result<<1; } return result; } void lcd_data(unsigned char ldata) { unsigned int temp,z; temp=adjust_portbit(ldata); init_GPIO(); z=~temp; IOCLR1=z; IOSET0=ldata; delay(0xffffff); IOCLR1=RW; IOSET1=RS; delay(0xffffff); IOSET1=E; delay(0xffffff); IOCLR1=E; } void lcd_cmd(unsigned char lcmd) { unsigned int temp,z; temp=adjust_portbit(lcmd); init_GPIO(); z=~temp; IOCLR1=z; IOSET0=lcmd; delay(0xffffff); IOCLR1=RW; IOCLR1=RS; IOSET1=E; delay(0xffffff); IOCLR1=E; } void delay(unsigned int value) { unsigned int i; for(i=0;i<value;i++); { } }
the 15 factor was established for * a LPC2478 running at 72 MHz * measuring with a scope and a processor pin how long the delay actually is. the 15 constant would need to be changed in case another processor speed is configured. that is the reason it is embedded in a macro - changing platform only required one localized change that affects all instances where it was used.
mr tameer.
c macro for this is ok for beginer.
but Approved Zeusti is not afraid of assemble function!
Zeusti.
Always yo're freind.
I really believe you have no idea what you are talking about. either way, I did my best. Please stay away from * flight control systems * mp3 players * the weapon industry * anything life saving/mission critical.
stick to what you know: babbling on Internet forums...
<quote> either way, I did my best. <end>
plz dont do {time} critical assembler until yo've read apcs :)
Zeusti() { (void)("Always yo're freind."); }