Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define F_CPU 1000000
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <avr/pgmspace.h>
- #include <util/delay.h>
- #define LCD_SCE_HI PORTA |= (1<<1)
- #define LCD_SCE_LO PORTA &= ~(1<<1)
- #define LCD_RST_HI PORTA |= (1<<0)
- #define LCD_RST_LO PORTA &= ~(1<<0)
- #define LCD_DC_HI PORTD |= (1<<2)
- #define LCD_DC_LO PORTD &= ~(1<<2)
- #define LCD_DN_HI PORTD |= (1<<3)
- #define LCD_DN_LO PORTD &= ~(1<<3)
- #define LCD_SCLK_HI PORTD |= (1<<4)
- #define LCD_SCLK_LO PORTD &= ~(1<<4)
- #define LCD_BACKLIGHT_HI PORTD |= (1<<5)
- #define LCD_BACKLIGHT_LO PORTD &= ~(1<<5)
- #define LCD_C 0
- #define LCD_D 1
- #define LCD_WIDTH 84
- #define LCD_HEIGHT 48
- const uint8_t PROGMEM ascii_table[] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, // 20
- 0x00, 0x00, 0x5f, 0x00, 0x00, // 21 !
- 0x00, 0x07, 0x00, 0x07, 0x00, // 22 "
- 0x14, 0x7f, 0x14, 0x7f, 0x14, // 23 #
- 0x24, 0x2a, 0x7f, 0x2a, 0x12, // 24 $
- 0x23, 0x13, 0x08, 0x64, 0x62, // 25 %
- 0x36, 0x49, 0x55, 0x22, 0x50, // 26 &
- 0x00, 0x05, 0x03, 0x00, 0x00, // 27 '
- 0x00, 0x1c, 0x22, 0x41, 0x00, // 28 (
- 0x00, 0x41, 0x22, 0x1c, 0x00, // 29 )
- 0x14, 0x08, 0x3e, 0x08, 0x14, // 2a *
- 0x08, 0x08, 0x3e, 0x08, 0x08, // 2b +
- 0x00, 0x50, 0x30, 0x00, 0x00, // 2c ,
- 0x08, 0x08, 0x08, 0x08, 0x08, // 2d -
- 0x00, 0x60, 0x60, 0x00, 0x00, // 2e .
- 0x20, 0x10, 0x08, 0x04, 0x02, // 2f /
- 0x3e, 0x51, 0x49, 0x45, 0x3e, // 30 0
- 0x00, 0x42, 0x7f, 0x40, 0x00, // 31 1
- 0x42, 0x61, 0x51, 0x49, 0x46, // 32 2
- 0x21, 0x41, 0x45, 0x4b, 0x31, // 33 3
- 0x18, 0x14, 0x12, 0x7f, 0x10, // 34 4
- 0x27, 0x45, 0x45, 0x45, 0x39, // 35 5
- 0x3c, 0x4a, 0x49, 0x49, 0x30, // 36 6
- 0x01, 0x71, 0x09, 0x05, 0x03, // 37 7
- 0x36, 0x49, 0x49, 0x49, 0x36, // 38 8
- 0x06, 0x49, 0x49, 0x29, 0x1e, // 39 9
- 0x00, 0x36, 0x36, 0x00, 0x00, // 3a :
- 0x00, 0x56, 0x36, 0x00, 0x00, // 3b ;
- 0x08, 0x14, 0x22, 0x41, 0x00, // 3c <
- 0x14, 0x14, 0x14, 0x14, 0x14, // 3d =
- 0x00, 0x41, 0x22, 0x14, 0x08, // 3e >
- 0x02, 0x01, 0x51, 0x09, 0x06, // 3f ?
- 0x32, 0x49, 0x79, 0x41, 0x3e, // 40 @
- 0x7e, 0x11, 0x11, 0x11, 0x7e, // 41 A
- 0x7f, 0x49, 0x49, 0x49, 0x36, // 42 B
- 0x3e, 0x41, 0x41, 0x41, 0x22, // 43 C
- 0x7f, 0x41, 0x41, 0x22, 0x1c, // 44 D
- 0x7f, 0x49, 0x49, 0x49, 0x41, // 45 E
- 0x7f, 0x09, 0x09, 0x09, 0x01, // 46 F
- 0x3e, 0x41, 0x49, 0x49, 0x7a, // 47 G
- 0x7f, 0x08, 0x08, 0x08, 0x7f, // 48 H
- 0x00, 0x41, 0x7f, 0x41, 0x00, // 49 I
- 0x20, 0x40, 0x41, 0x3f, 0x01, // 4a J
- 0x7f, 0x08, 0x14, 0x22, 0x41, // 4b K
- 0x7f, 0x40, 0x40, 0x40, 0x40, // 4c L
- 0x7f, 0x02, 0x0c, 0x02, 0x7f, // 4d M
- 0x7f, 0x04, 0x08, 0x10, 0x7f, // 4e N
- 0x3e, 0x41, 0x41, 0x41, 0x3e, // 4f O
- 0x7f, 0x09, 0x09, 0x09, 0x06, // 50 P
- 0x3e, 0x41, 0x51, 0x21, 0x5e, // 51 Q
- 0x7f, 0x09, 0x19, 0x29, 0x46, // 52 R
- 0x46, 0x49, 0x49, 0x49, 0x31, // 53 S
- 0x01, 0x01, 0x7f, 0x01, 0x01, // 54 T
- 0x3f, 0x40, 0x40, 0x40, 0x3f, // 55 U
- 0x1f, 0x20, 0x40, 0x20, 0x1f, // 56 V
- 0x3f, 0x40, 0x38, 0x40, 0x3f, // 57 W
- 0x63, 0x14, 0x08, 0x14, 0x63, // 58 X
- 0x07, 0x08, 0x70, 0x08, 0x07, // 59 Y
- 0x61, 0x51, 0x49, 0x45, 0x43, // 5a Z
- 0x00, 0x7f, 0x41, 0x41, 0x00, // 5b [
- 0x02, 0x04, 0x08, 0x10, 0x20, // 5c ¥
- 0x00, 0x41, 0x41, 0x7f, 0x00, // 5d ]
- 0x04, 0x02, 0x01, 0x02, 0x04, // 5e ^
- 0x40, 0x40, 0x40, 0x40, 0x40, // 5f _
- 0x00, 0x01, 0x02, 0x04, 0x00, // 60 `
- 0x20, 0x54, 0x54, 0x54, 0x78, // 61 a
- 0x7f, 0x48, 0x44, 0x44, 0x38, // 62 b
- 0x38, 0x44, 0x44, 0x44, 0x20, // 63 c
- 0x38, 0x44, 0x44, 0x48, 0x7f, // 64 d
- 0x38, 0x54, 0x54, 0x54, 0x18, // 65 e
- 0x08, 0x7e, 0x09, 0x01, 0x02, // 66 f
- 0x0c, 0x52, 0x52, 0x52, 0x3e, // 67 g
- 0x7f, 0x08, 0x04, 0x04, 0x78, // 68 h
- 0x00, 0x44, 0x7d, 0x40, 0x00, // 69 i
- 0x20, 0x40, 0x44, 0x3d, 0x00, // 6a j
- 0x7f, 0x10, 0x28, 0x44, 0x00, // 6b k
- 0x00, 0x41, 0x7f, 0x40, 0x00, // 6c l
- 0x7c, 0x04, 0x18, 0x04, 0x78, // 6d m
- 0x7c, 0x08, 0x04, 0x04, 0x78, // 6e n
- 0x38, 0x44, 0x44, 0x44, 0x38, // 6f o
- 0x7c, 0x14, 0x14, 0x14, 0x08, // 70 p
- 0x08, 0x14, 0x14, 0x18, 0x7c, // 71 q
- 0x7c, 0x08, 0x04, 0x04, 0x08, // 72 r
- 0x48, 0x54, 0x54, 0x54, 0x20, // 73 s
- 0x04, 0x3f, 0x44, 0x40, 0x20, // 74 t
- 0x3c, 0x40, 0x40, 0x20, 0x7c, // 75 u
- 0x1c, 0x20, 0x40, 0x20, 0x1c, // 76 v
- 0x3c, 0x40, 0x30, 0x40, 0x3c, // 77 w
- 0x44, 0x28, 0x10, 0x28, 0x44, // 78 x
- 0x0c, 0x50, 0x50, 0x50, 0x3c, // 79 y
- 0x44, 0x64, 0x54, 0x4c, 0x44, // 7a z
- 0x00, 0x08, 0x36, 0x41, 0x00, // 7b {
- 0x00, 0x00, 0x7f, 0x00, 0x00, // 7c |
- 0x00, 0x41, 0x36, 0x08, 0x00, // 7d }
- };
- void lcd_write(uint8_t dc, uint8_t data)
- {
- if (dc)
- LCD_DC_HI;
- else
- LCD_DC_LO;
- LCD_SCE_LO;
- for (int i = 0; i < 8; i++)
- {
- if (data&(1<<7))
- LCD_DN_HI;
- else
- LCD_DN_LO;
- LCD_SCLK_LO;
- LCD_SCLK_HI;
- data <<= 1;
- }
- LCD_SCE_HI;
- LCD_DN_LO;
- }
- void lcd_char(char c)
- {
- lcd_write(LCD_D, 0x00);
- for (int i = 0; i < 5; i++)
- lcd_write(LCD_D, pgm_read_byte(ascii_table+(c-0x20)*5+i));
- lcd_write(LCD_D, 0x00);
- }
- void lcd_str(const char* str)
- {
- while (pgm_read_byte(str))
- {
- lcd_char(pgm_read_byte(str));
- str++;
- }
- }
- void lcd_clear(void)
- {
- for (int i = 0; i < LCD_WIDTH*LCD_HEIGHT/8; i++)
- lcd_write(LCD_D, 0x00);
- }
- void lcd_backlight(uint8_t enabled)
- {
- if (enabled)
- LCD_BACKLIGHT_HI;
- else
- LCD_BACKLIGHT_LO;
- }
- void lcd_init(void)
- {
- // configure the LCD pins as outputs
- DDRA |= (1<<1);
- DDRA |= (1<<0);
- DDRD |= (1<<2);
- DDRD |= (1<<3);
- DDRD |= (1<<4);
- DDRD |= (1<<5);
- // initialize the LCD pins
- LCD_SCE_HI;
- LCD_BACKLIGHT_HI;
- LCD_RST_LO;
- LCD_RST_HI;
- // extended instruction set
- lcd_write(LCD_C, 0x21);
- // set Vop to 5V
- lcd_write(LCD_C, 0xA0);
- // set the temperature coefficient
- lcd_write(LCD_C, 0x04);
- // set the bias system
- lcd_write(LCD_C, 0x15);
- // active mode, horizontal addressing, basic instruction set
- lcd_write(LCD_C, 0x20);
- // normal mode
- lcd_write(LCD_C, 0x0C);
- // clear the LCD
- lcd_clear();
- }
- int main(void)
- {
- lcd_init();
- int j = 0;
- while (1)
- {
- lcd_clear();
- for (int i = 0; i < 6; i++)
- {
- if ((i+j)%2 == 0)
- lcd_str(PSTR("Hello, World"));
- else
- lcd_str(PSTR("------------"));
- }
- j++;
- _delay_ms(1000);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment