ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [마이크로프로세서] font 설계& dislay
    전공공부/전자공학 2020. 5. 29. 15:23

     

     

    < module type의 ATmega128 실습 장치(LCD가 2개의 port 사용 )에서 font 설계 및 display >

     

    LCD 첫째 줄에는 자신의 " 영문 이름 "

    LCD 둘째 줄에는 "정사각형 JBNU 이등변 삼각형"

    (제작한 font에의한 정사각형 심볼과 JBNU글자 사이에는 한개의 글자 간격, JBNU글자와 제작한 font에의한 이등변 삼각형 심볼간의 간격은 한개의 글자 간격 )
    (정사각형 심볼과 이등변 삼각형 심볼의 크기는 임의로 설계)

     


    #include <mega128.h>
    #include <delay.h>
    #asm
        .equ __lcd_port=0x18
    #endasm

    #include <lcd.h>
    #include <stdio.h>

    #define PORT_LCD PORTB

    typedef unsigned char BYTE;

    // 정사각형 모양
    BYTE flash FONT1[8] ={
    0b00000000,
    0b00000000,
    0b00011111,
    0b00010001,
    0b00010001,
    0b00010001,
    0b00011111,
    0b00000000};

    // 이등변 삼각형 모양
    BYTE flash FONT2[8] ={
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000100,
    0b00001010,
    0b00011111,
    0b00000000,
    0b00000000};

    void make_custom_font(unsigned char addr, unsigned char flash *font)
    {
       unsigned char cnt, ADDR;
       addr <<= 3;
       ADDR = addr | 0x40;
       
       for ( cnt = 0; cnt <8 ; cnt++)
       {
          lcd_write_byte(ADDR+cnt, font[cnt]);
       }
    }


    void lcd_Cmd(char command)
    {
       unsigned char temp;
       temp = (command & 0xF0) | 0x04;
       delay_ms(1);
       PORT_LCD = temp;
       PORT_LCD &= ~0x04;
       delay_ms(1);

       temp =((command & 0x0F)<<4)|0x04;
       delay_ms(1);
       PORT_LCD = temp;
       PORT_LCD &= ~0x04;
       delay_ms(1);
    }


    void Write_Data(char ch)
    {
       unsigned char temp;
       temp = (ch & 0xF0) | 0x05;
       delay_ms(1);
       PORT_LCD = temp;
       PORT_LCD &= ~0x04;
       delay_ms(1);

       temp = ((ch & 0x0F) <<4) | 0x05;
       delay_ms(1);
       PORT_LCD = temp;
       PORT_LCD &= ~0x04;
       delay_ms(1);
    }


    void CLCD_String(flash unsigned char *str)
    {
       while(*str)
       {
          Write_Data(*str);
          str++;
          delay_ms(200); 
       }
    }


    void main()
    {
       delay_ms(15);
       lcd_init(16);
       
       delay_ms(15);
       lcd_gotoxy(0,0);
       lcd_Cmd(0x01);

       while(1)
       {
          lcd_Cmd(0x80);
          CLCD_String("chang hwan");
          
          lcd_Cmd(0xC0);
          lcd_putchar(1);
          CLCD_String(" JBNU ");
          lcd_putchar(2);
     
          make_custom_font(1, FONT1); 
          make_custom_font(2, FONT2);
       }
    }


    결과 사진

     

    댓글

Designed by Tistory.