sms based Lcd Display
Thu Mar 01 2012, 11:58 pm
yeah it receives them and can display them if i widen the loop to display ten messages.
Fri Mar 02 2012, 09:43 am
Ok then its fine..
U can divide the msg in next line.Use 20X4 LCD so that entire msg will be displayed in one shot.
U can divide the msg in next line.Use 20X4 LCD so that entire msg will be displayed in one shot.
Fri Mar 02 2012, 05:53 pm
Hi kiran. I have tried using the 20x4 lcd display but the problem with it is it skips the second and fourth line hence it still leaves out some text
[ Edited Fri Mar 02 2012, 06:24 pm ]
Fri Mar 02 2012, 05:56 pm
if msg has >40 characters. As with the 40x2, it displays only on the first line and leaves out some text as well
[ Edited Fri Mar 02 2012, 06:25 pm ]
Fri Mar 02 2012, 06:00 pm
I want the 20x4 or 40x2 display to display on all line the same message(at once) from top to bottom without leaving out some text. Thanx
[ Edited Fri Mar 02 2012, 06:26 pm ]
Fri Mar 02 2012, 06:03 pm
And I had forgotten to ask, Is it possible to add a scrolling format to the message display where by ot scrolls from the last line upwards as other messages follow from below.
[ Edited Fri Mar 02 2012, 06:29 pm ]
Fri Mar 02 2012, 07:32 pm
Yes u can scroll the msgs.
Can u show us the code how u are breaking the entire array and sending to LCD.
Can u show us the code how u are breaking the entire array and sending to LCD.
Fri Mar 02 2012, 09:37 pm
attached below is my entire code.
#include <REGX52.H> #define LCD P1 #define LCD_EN 0x80 #define LCD_RS 0x20 //LCD Commands #define LCD_SETMODE 0x04 #define LCD_SETVISIBLE 0x08 #define LCD_SETFUNCTION 0x28 #define LCD_SETDDADDR 0x80 void delayms(unsigned char); void delayus(unsigned char); void lcd_init(); void lcd_reset(); void lcd_cmd (char); void lcd_data(unsigned char); void lcd_str (unsigned char *); void clear(void); void tx0(unsigned char); void delay_sms (unsigned int); void SMSString(char*text) ; void init(); void read_text(unsigned char *); unsigned int var,i,n; unsigned char j,abc; unsigned char idata msg1[150]; unsigned char rec_no[20]; unsigned char time_date[20]; void gsm_loop(unsigned int); void serial () interrupt 4 { msg1[abc]=SBUF; abc++; RI=0; } void main (void) { n=0x35; gsm_loop(n); delay_sms(2000); } void gsm_loop(unsigned int n) { for(i=0x31;i<=n;i++) { clear(); init(); lcd_init(); var=i; SMSString("AT\r"); // AT commands to initialize gsm modem delay_sms(1000); SMSString( "ATe0\r"); // turn off echo delay_sms(1000); SMSString( "AT&W\r"); // save settings delay_sms(1000); SMSString( "AT+CMGF=1\r"); // select text mode for sms delay_sms(1000); SMSString( "AT+CNMI=2,1,0,0,0\r"); // notification of new sms delay_sms(1000); SMSString( "AT+CMGR="); // AT command to read sms tx0(var); SMSString("\r"); IE=0X90; // Enable serial interrupt delay_sms(2000); read_text(msg1); // read sms and store in buffer msg1 delay_sms(2000); IE=0X00; // Disable all interrupt } } void init(void) { j=0; abc=0; TL1=0XFD; //9600 @ 11.0592 TH1=0xFD; TMOD=0x20; SCON=0x50; TR1=1; } void SMSString(unsigned char* text) //function to send SMS using GSM modem { while (*text) { tx0(*text++); } } void tx0(unsigned char x) //send data to serial port 0 { EA=0; SBUF=x; while(TI==0); TI=0; EA=1; } void delay_sms (unsigned int count) { unsigned int i; // Keil v7.5a while(count) { i = 115; while(i> 0) i--; count--; } } void read_text( unsigned char *msg) { unsigned char *temp; temp=msg; do msg++; while(*msg!='#'); msg++; do *temp++=*msg++; while(*msg!='#'); // reaching at end of message *temp='\0'; lcd_cmd(0x80); lcd_str(msg1); // array having message } void lcd_reset() { LCD = 0xFF; delay_sms(40); LCD = 0x03+LCD_EN; LCD = 0x03; delay_sms(40); LCD = 0x03+LCD_EN; LCD = 0x03; delay_sms(5); LCD = 0x03+LCD_EN; LCD = 0x03; delay_sms(5); LCD = 0x02+LCD_EN; LCD = 0x02; delay_sms(5); } void lcd_init () { lcd_reset(); lcd_cmd(LCD_SETFUNCTION); // 4-bit mode - 1 line - 5x7 font. lcd_cmd(LCD_SETVISIBLE+0x04); // Display no cursor - no blink. lcd_cmd(LCD_SETMODE+0x02); // Automatic Increment - No Display shift. lcd_cmd(LCD_SETDDADDR); // Address DDRAM with 0 offset 80h. } void lcd_cmd (char cmd) { LCD = ((cmd > > 4) & 0x0F)|LCD_EN; LCD = ((cmd > > 4) & 0x0F); LCD = (cmd & 0x0F)|LCD_EN; LCD = (cmd & 0x0F); delay_sms(1); } void lcd_data (unsigned char dat) { LCD = (((dat > > 4) & 0x0F)|LCD_EN|LCD_RS); LCD = (((dat > > 4) & 0x0F)|LCD_RS); LCD = ((dat & 0x0F)|LCD_EN|LCD_RS); LCD = ((dat & 0x0F)|LCD_RS); delay_sms(1); } void clear(void) { unsigned char a; for(a=0;a<100;a++) msg1[a]=0x00; } void lcd_str (unsigned char *str) { while(*str){ lcd_data(*str++); } }
Fri Mar 02 2012, 09:39 pm
The above code only displays messages enclosed between #. i wanted to include that option in my code
Powered by e107 Forum System