اطلاعیه

Collapse
No announcement yet.

طریقه نمایش در ال سی دی نوکیا 1100

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    طریقه نمایش در ال سی دی نوکیا 1100

    سلام

    یه اطلاعات پایه
    داری 96 در 65 پیکسله
    این ال سی دی از 8 پیج تشکیل شده که میشه گفت 8 در 96 میشه (اره شبیه به ال سی دی های گرافیکی معمولی)

    حالا سوال من میخام از فونت بزرگ استفاده کنم در حال حاضر فونتش یه جوریه که توی یک پیج جا میشه ولی من میخام جوری بزرگ بشه که در حالت عادی مثلا 4 تا پیج یا نصف صفحه
    خوب چیز های نمیدونم چطوری باید یه فونت رو تقسیم کنم که تو دوتا پیج تقسیم بشه


    اگه برنامه نیاز بود بگین بزارم
    این هم قسمتی از فونت پیشفرض

    {0x41, 0x22, 0x14, 0x08, 0x00},// >
    {0x02, 0x01, 0x51, 0x09, 0x06},// ?
    {0x32, 0x49, 0x79, 0x41, 0x3E},// @
    {0x7E, 0x11, 0x11, 0x11, 0x7E},// A
    {0x7F, 0x49, 0x49, 0x49, 0x36},// B
    {0x3E, 0x41, 0x41, 0x41, 0x22},// C
    {0x7F, 0x41, 0x41, 0x22, 0x1C},// D
    {0x7F, 0x49, 0x49, 0x49, 0x41},// E
    {0x7F, 0x09, 0x09, 0x01, 0x01},// F
    انجام پروژه های برنامه نویسی اندروید
    [glow=red,2,300]نرم افزار نقشه های پاور کامپیوتر اندورید[/glow]
    http://cafebazaar.ir/app/?id=com.atxdroid

    #2
    پاسخ : طریقه نمایش در ال سی دی نوکیا 1100

    :cry:
    انجام پروژه های برنامه نویسی اندروید
    [glow=red,2,300]نرم افزار نقشه های پاور کامپیوتر اندورید[/glow]
    http://cafebazaar.ir/app/?id=com.atxdroid

    دیدگاه


      #3
      پاسخ : طریقه نمایش در ال سی دی نوکیا 1100

      سلام محسن جان یکم بیشتر توضیح میدی...
      اگه برنامه هم میتونی بزار.
      الهم عجل لولیک الفرج

      فقط 313 نفر...

      دیدگاه


        #4
        پاسخ : طریقه نمایش در ال سی دی نوکیا 1100

        .

        دیدگاه


          #5
          پاسخ : طریقه نمایش در ال سی دی نوکیا 1100

          نوشته اصلی توسط farshid_al
          سلام
          این فونت شما 5 در 8 هست.
          اول یه فونت بزرگ تر پیدا کن. مثلا 16 در 16 . حالا جهار تا 8در 8 داری. حالا یه تابع بنویس که این چهار تا 8 در 8 رو مثل برنامه ای که الان داری روی ال سی دی بنویسه. در واقع می تونی دو تا از این 8 در 8 ها رو پشت سر هم بنویسی (چون در یک ردیف هستند) بعد برای ردیف دوم یک بار با دستور set x و set y که خودت نوشتی رو اجرا کن تا به سطر دوم بری. بعد دو تا 8 در8 دیگه رو روی ال سی دی بنویس.

          محض اطلاع، مدل proteus این ال سی دی و چند تای دیگه وجود داره که می تونید پیدا کنید و اون رو شبیه سازی کنید
          ممنون از توجهتون
          من هرچی گشتم فونت 16 در 16 ندیدم !
          میشه برام پیدا کنین



          این هم فقط بخاطر شما امیر حسام جان

          #include <mega32.h>
          #include <delay.h>
          #include <stdio.h>


          // set output pins for lcd here
          #define sclk PORTC.0
          #define sda PORTC.1
          #define cs PORTC.2
          #define rst PORTC.3

          #define CMD 0
          #define DATA 1

          void Lcd_Clear(void);
          void Lcd_Init(void);
          void Lcd_Write(char cd,unsigned char c);
          void SetX(char x);
          void SetY(char y);
          void Gotoxy(char x,char y);
          void VLine(char x,char y,char on);
          void Line(unsigned char x,unsigned char y,unsigned char y2,unsigned char on);
          void print_char(char c);
          void print_message(flash char * message);
          void print_string(char * message);

          char bitaddr;
          // lookup table, here you can modify the font
          flash unsigned char FontLookup[96][5]={
          {0x00, 0x00, 0x00, 0x00, 0x00},// (space)
          {0x00, 0x00, 0x5F, 0x00, 0x00},// !
          {0x00, 0x07, 0x00, 0x07, 0x00},// "
          {0x14, 0x7F, 0x14, 0x7F, 0x14},// #
          {0x24, 0x2A, 0x7F, 0x2A, 0x12},// $
          {0x23, 0x13, 0x08, 0x64, 0x62},// %
          {0x36, 0x49, 0x55, 0x22, 0x50},// &
          {0x00, 0x05, 0x03, 0x00, 0x00},// '
          {0x00, 0x1C, 0x22, 0x41, 0x00},// (
          {0x00, 0x41, 0x22, 0x1C, 0x00},// )
          {0x08, 0x2A, 0x1C, 0x2A, 0x08},// *
          {0x08, 0x08, 0x3E, 0x08, 0x08},// +
          {0x00, 0x50, 0x30, 0x00, 0x00},// ,
          {0x08, 0x08, 0x08, 0x08, 0x08},// -
          {0x00, 0x30, 0x30, 0x00, 0x00},// .
          {0x20, 0x10, 0x08, 0x04, 0x02},// /
          {0x3E, 0x51, 0x49, 0x45, 0x3E},// 0
          {0x00, 0x42, 0x7F, 0x40, 0x00},// 1
          {0x42, 0x61, 0x51, 0x49, 0x46},// 2
          {0x21, 0x41, 0x45, 0x4B, 0x31},// 3
          {0x18, 0x14, 0x12, 0x7F, 0x10},// 4
          {0x27, 0x45, 0x45, 0x45, 0x39},// 5
          {0x3C, 0x4A, 0x49, 0x49, 0x30},// 6
          {0x01, 0x71, 0x09, 0x05, 0x03},// 7
          {0x36, 0x49, 0x49, 0x49, 0x36},// 8
          {0x06, 0x49, 0x49, 0x29, 0x1E},// 9
          {0x00, 0x36, 0x36, 0x00, 0x00},// :
          {0x00, 0x56, 0x36, 0x00, 0x00},// ;
          {0x00, 0x08, 0x14, 0x22, 0x41},// <
          {0x14, 0x14, 0x14, 0x14, 0x14},// =
          {0x41, 0x22, 0x14, 0x08, 0x00},// >
          {0x02, 0x01, 0x51, 0x09, 0x06},// ?
          {0x32, 0x49, 0x79, 0x41, 0x3E},// @
          {0x7E, 0x11, 0x11, 0x11, 0x7E},// A
          {0x7F, 0x49, 0x49, 0x49, 0x36},// B
          {0x3E, 0x41, 0x41, 0x41, 0x22},// C
          {0x7F, 0x41, 0x41, 0x22, 0x1C},// D
          {0x7F, 0x49, 0x49, 0x49, 0x41},// E
          {0x7F, 0x09, 0x09, 0x01, 0x01},// F
          {0x3E, 0x41, 0x41, 0x51, 0x32},// G
          {0x7F, 0x08, 0x08, 0x08, 0x7F},// H
          {0x00, 0x41, 0x7F, 0x41, 0x00},// I
          {0x20, 0x40, 0x41, 0x3F, 0x01},// J
          {0x7F, 0x08, 0x14, 0x22, 0x41},// K
          {0x7F, 0x40, 0x40, 0x40, 0x40},// L
          {0x7F, 0x02, 0x04, 0x02, 0x7F},// M
          {0x7F, 0x04, 0x08, 0x10, 0x7F},// N
          {0x3E, 0x41, 0x41, 0x41, 0x3E},// O
          {0x7F, 0x09, 0x09, 0x09, 0x06},// P
          {0x3E, 0x41, 0x51, 0x21, 0x5E},// Q
          {0x7F, 0x09, 0x19, 0x29, 0x46},// R
          {0x46, 0x49, 0x49, 0x49, 0x31},// S
          {0x01, 0x01, 0x7F, 0x01, 0x01},// T
          {0x3F, 0x40, 0x40, 0x40, 0x3F},// U
          {0x1F, 0x20, 0x40, 0x20, 0x1F},// V
          {0x7F, 0x20, 0x18, 0x20, 0x7F},// W
          {0x63, 0x14, 0x08, 0x14, 0x63},// X
          {0x03, 0x04, 0x78, 0x04, 0x03},// Y
          {0x61, 0x51, 0x49, 0x45, 0x43},// Z
          {0x00, 0x00, 0x7F, 0x41, 0x41},// [
          {0x02, 0x04, 0x08, 0x10, 0x20},// "\"
          {0x41, 0x41, 0x7F, 0x00, 0x00},// ]
          {0x04, 0x02, 0x01, 0x02, 0x04},// ^
          {0x40, 0x40, 0x40, 0x40, 0x40},// _
          {0x00, 0x01, 0x02, 0x04, 0x00},// `
          {0x20, 0x54, 0x54, 0x54, 0x78},// a
          {0x7F, 0x48, 0x44, 0x44, 0x38},// b
          {0x38, 0x44, 0x44, 0x44, 0x20},// c
          {0x38, 0x44, 0x44, 0x48, 0x7F},// d
          {0x38, 0x54, 0x54, 0x54, 0x18},// e
          {0x08, 0x7E, 0x09, 0x01, 0x02},// f
          {0x08, 0x14, 0x54, 0x54, 0x3C},// g
          {0x7F, 0x08, 0x04, 0x04, 0x78},// h
          {0x00, 0x44, 0x7D, 0x40, 0x00},// i
          {0x20, 0x40, 0x44, 0x3D, 0x00},// j
          {0x00, 0x7F, 0x10, 0x28, 0x44},// k
          {0x00, 0x41, 0x7F, 0x40, 0x00},// l
          {0x7C, 0x04, 0x18, 0x04, 0x78},// m
          {0x7C, 0x08, 0x04, 0x04, 0x78},// n
          {0x38, 0x44, 0x44, 0x44, 0x38},// o
          {0x7C, 0x14, 0x14, 0x14, 0x08},// p
          {0x08, 0x14, 0x14, 0x18, 0x7C},// q
          {0x7C, 0x08, 0x04, 0x04, 0x08},// r
          {0x48, 0x54, 0x54, 0x54, 0x20},// s
          {0x04, 0x3F, 0x44, 0x40, 0x20},// t
          {0x3C, 0x40, 0x40, 0x20, 0x7C},// u
          {0x1C, 0x20, 0x40, 0x20, 0x1C},// v
          {0x3C, 0x40, 0x30, 0x40, 0x3C},// w
          {0x44, 0x28, 0x10, 0x28, 0x44},// x
          {0x0C, 0x50, 0x50, 0x50, 0x3C},// y
          {0x44, 0x64, 0x54, 0x4C, 0x44},// z
          {0x00, 0x08, 0x36, 0x41, 0x00},// {
          {0x00, 0x00, 0x7F, 0x00, 0x00},// |
          {0x00, 0x41, 0x36, 0x08, 0x00},// }
          {0x08, 0x08, 0x2A, 0x1C, 0x08},// ->
          {0x08, 0x1C, 0x2A, 0x08, 0x08} // <-
          };
          char buf[32];
          void main(void)
          {

          PORTA=0X00;
          DDRA=0XFF;
          DDRC=0xFF;
          // USART initialization
          // Communication Parameters: 8 Data, 1 Stop, No Parity
          // USART Receiver: Off
          // USART Transmitter: On
          // USART Mode: Asynchronous
          // USART Baud Rate: 9600
          UCSRA=0x00;
          UCSRB=0x08;
          UCSRC=0x86;
          UBRRH=0x00;
          UBRRL=0x33;





          PORTA.0=1;
          delay_ms(200);
          PORTA.0=0;
          delay_ms(200);
          PORTA.0=1;
          delay_ms(200);
          PORTA.0=0;
          delay_ms(200);



          puts("start"putchar(13);
          while(1)
          {
          PORTA.0=1;
          Lcd_Init();
          Gotoxy(0,0);
          print_message("the name of god demo of Nokia 1100 LCD .."
          Gotoxy(0,4);
          print_message("asembele by mohandes enghelabi!!"
          Gotoxy(0,6);
          print_message("xxxx"

          PORTA.0=0;
          delay_ms(2000);

          //Lcd_Clear();




          while(1);


          }
          }

          // clear LCD
          void Lcd_Clear(void){
          unsigned int i;
          Lcd_Write(CMD,0x40); // Y = 0
          Lcd_Write(CMD,0xb0);
          Lcd_Write(CMD,0x10); // X = 0
          Lcd_Write(CMD,0x00);
          Lcd_Write(CMD,0xae); // disable display;



          for(i=0;i<864;i++){
          Lcd_Write(DATA,0x00);
          }
          Lcd_Write(CMD,0xaf); // enable display;
          }

          // init LCD
          void Lcd_Init(void){

          cs = 0;
          rst = 0;
          delay_ms(100); // 5mS so says the stop watch(less than 5ms will not work)
          rst = 1;


          Lcd_Write(CMD,0x20); // write VOP register



          Lcd_Write(CMD,0x90);
          Lcd_Write(CMD,0xA4); // all on/normal display
          Lcd_Write(CMD,0x2F); // Power control set(charge pump on/off)
          Lcd_Write(CMD,0x40); // set start row address = 0
          Lcd_Write(CMD,0xb0); // set Y-address = 0
          Lcd_Write(CMD,0x10); // set X-address, upper 3 bits
          Lcd_Write(CMD,0x0); // set X-address, lower 4 bits
          //Lcd_Write(CMD,0xC8); // mirror Y axis (about X axis) درجه میچرخه 180
          Lcd_Write(CMD,0xa1); // Invert screen in horizontal axis
          Lcd_Write(CMD,0xac); // set initial row (R0) of the display
          Lcd_Write(CMD,0x07);
          //Lcd_Write(CMD,0xF9); //
          Lcd_Write(CMD,0xaf); // display ON/OFF


          Lcd_Clear(); // clear LCD



          Lcd_Write(CMD,0xa7); // invert display
          delay_ms(100); // 1/2 Sec delay
          Lcd_Write(CMD,0xa6); // normal display (non inverted)
          delay_ms(100); // 1 Sec delay


          }


          void Lcd_Write(char cd,unsigned char c){
          char i;
          cs = 0;
          sclk = 0;
          sda = cd;
          sclk = 1;

          for(i=0;i<8;i++){
          sclk = 0;
          if(c & 0x80)
          sda = 1;
          else
          sda = 0;
          sclk = 1;
          c <<= 1;
          delay_us(120);// اگر تایم کمتر از 120 میکرو ثانیه شود دیتا ارسالی نامفوم می شود
          }
          cs = 1;
          }


          void SetX(char x){
          Lcd_Write(CMD,0x10 | ((x>>4)&0x7));
          Lcd_Write(CMD,x & 0x0f);
          }

          void SetY(char y){
          char aux = 0;
          while(y>7){
          y -=8;
          aux ++;
          }

          bitaddr = y-1;
          Lcd_Write(CMD,0xB0 | (aux & 0x0f));
          }

          void Gotoxy(char x,char y){
          Lcd_Write(CMD,(0xB0|(y&0x0F))); // Y axis initialisation: 0100 yyyy
          Lcd_Write(CMD,(0x00|(x&0x0F))); // X axis initialisation: 0000 xxxx ( x3 x2 x1 x0)
          Lcd_Write(CMD,(0x10|((x>>4)&0x07))); // X axis initialisation: 0010 0xxx ( x6 x5 x4)

          }


          //x dir > y dir from last line to ^رسم خط به صورت افقی با تنظیم فقط ایکس و تعداد پیکسل برای روشن کردن
          void VLine(char x,char y,char on){
          char aux[8];
          char i;

          for(i=0;i<8;i++)
          aux[i] = 0;

          i = 7;
          while(y > 9){
          aux[i] = 0xff;
          y -= 8;
          i--;
          }

          while(y > 0){
          aux[i] >>= 1;
          aux[i] |= 0x80;
          y --;
          }



          for(y=0;y<8;y++){
          Lcd_Write(CMD,0xB0 | y);
          SetX(x);
          Lcd_Write(DATA,aux[y]);
          }

          }

          // xdir is > y is always < than y2 can be used for graphs
          //رسم خط به صورت افقی با داده نقطه شزوع خط و پایان خط بر اساس پیکسل
          void Line(unsigned char x,unsigned char y,unsigned char y2,unsigned char on){
          char aux[8];
          char i,o=0;
          char c=1;
          char index;



          for(i=0;i<8;i++)
          aux[i] = 0;


          index = 0;
          for(i=0;i<64;i++){

          if(i >= y && i <= y2){
          aux[index] |= c << o;
          }

          o ++;
          if(o == 8){
          o = 0;
          index ++;
          }
          }


          for(i=0;i<8;i++){
          Lcd_Write(CMD,0xB0 | i);
          SetX(x);
          Lcd_Write(DATA,aux[i]);
          }


          }



          void print_char(char c){
          int i;

          for ( i = 0; i < 5; i++ ){
          Lcd_Write(DATA,FontLookup[c - 32][i] << 1);
          }
          Lcd_Write(DATA,0x00);

          }


          void print_message(flash char * message) // Write message to LCD (C string type)
          {
          //Lcd_Write(CMD,0xae); // disable display;
          while (*message) // Look for end of string
          {
          print_char(*message++);
          }
          Lcd_Write(CMD,0xaf); // enable display;
          }

          void print_string(char * message) // Write message to LCD (C string type)
          {
          Lcd_Write(CMD,0xae); // disable display;
          while (*message) // Look for end of string
          {
          print_char(*message++);
          }
          Lcd_Write(CMD,0xaf); // enable display;
          }
          انجام پروژه های برنامه نویسی اندروید
          [glow=red,2,300]نرم افزار نقشه های پاور کامپیوتر اندورید[/glow]
          http://cafebazaar.ir/app/?id=com.atxdroid

          دیدگاه


            #6
            پاسخ : طریقه نمایش در ال سی دی نوکیا 1100

            با سلام،

            جسارتا، شما چرا از این استفاده نمیکنی؟ http://www.eca.ir/forum2/index.php?topic=52090.0

            فقط کافیه درایور LCD و روتین هایی که امکان رسم نقطه و رسم چهارگوش تو پر رو بهت بده بنویسی و نهایتا توابع Graphic و Font رو بهش اضافه کنی و از امکانات توابع فونت استفاده کنی....

            اگر مایل بودی، میتونیم یه روند آموزشی توی این تاپیک پیش بگیریم تا هم کار شما راه بیفته و هم اینکه سایر دوستان نحوه اضافه کردن این توابع رو به سایر LCD های گرافیکی یاد بگیرند!
            مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

            Sh_Nourbakhsh@Yahoo.com

            http://s2.picofile.com/file/7170362468/_Wall_e_.jp

            دیدگاه


              #7
              پاسخ : طریقه نمایش در ال سی دی نوکیا 1100

              .

              دیدگاه

              لطفا صبر کنید...
              X