من در این پست تصمیم دارم نحوه فارسی نویسی بر روی lcd 2*16 را آموزش بدهم .درمرحله اول باید بدانیم که lcd ها دارای 3 نوع حافظه (CGRAM, DDRAM, CGROM) هستند.
* CGROM : در این حافظه کاراکترهای از پیش تعیین شده مانند ارقام حروف و ... قرار دارند LCD با دریافت کد اسکی مربوط به هر کاراکتر آن را در صفحه نمایش ، نمایش میدهد.
* DDRAM : حافظه موقتی است که اطلاعات برای نمایش در آن نوشته می شود.
* CGRAM : این حافظه 64 بایتی می باشد و ما می توانیم در داخل این حافظه حداکثر 8 کاراکتر دلخواه ایجاد کنیم.
برای ایجاد یک کراکتر باید یک ماتریس 8*5 رسم کرده وکاراکتر دلخواه را با یک و صفر کردن خانه های آن بسازید
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
1 1 1 0 0 کراکتر"م"
1 0 1 0 0
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
در ادامه هر سطر را با اضافه کردن 3 عدد صفر در سمت چپ کامل کنید
و در برنامه زیر هر کاراکتر دلخواه را با مقدار دهی یکی از آرایه ها به وجود آورید
#include
#include
#include
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
char i,CGRAM;
char DATA3[]={0,0,7,5,31,0,0,0}; //م
char DATA2[]={0,0,14,10,31,10,14,0}; //ه
char DATA1[]={0, 0, 14, 2, 3, 2, 14, 0}; //د
char DATA0[]={0,0,0,3,18,17,31,0}; //ی
char DATA4[]={0B11111,0B10001,0B10001,0B10001,0B10001,0B10001,0B11111,0B0};
void WRITE_CGRAM(char *RAM_code,char CG_code)
{
CGRAM=(CG_code*8)+0x40;
for(i=0; i<8; i++)
lcd_write_byte(CGRAM++,*RAM_code++);
}
void SEND(int x)
{
WRITE_CGRAM(DATA0,0);
WRITE_CGRAM(DATA1,1);
WRITE_CGRAM(DATA2,2);
WRITE_CGRAM(DATA3,3);
WRITE_CGRAM(DATA4,4);
lcd_gotoxy(x,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
lcd_putchar(3);
lcd_putchar(4);
}
void main()
{
lcd_init(16);
SEND(3);
delay_ms(1000);
lcd_clear();
SEND(6);
while(1);
}