1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | #define F_CPU 1000000UL
|
6 |
|
7 | #define CD PB4 //orange
|
8 | #define DISPLAY_PORT PORTB
|
9 |
|
10 | //display commands
|
11 | #define Set_Com_End_H 0xF1
|
12 | #define Set_Com_End_L 0x67
|
13 | #define Set_LCD_Mapping_Control 0xC0
|
14 | #define Set_Scroll_Line_LSB 0x40
|
15 | #define Set_Scroll_Line_MSB 0x50
|
16 | #define Set_Panel_Loading 0x2B
|
17 | #define Set_LCD_Bias_Ratio 0xEB
|
18 | #define Set_Vbias_Potentiometer_H 0x81
|
19 | #define Set_Vbias_Potentiometer_L 0x5F
|
20 | #define Set_RAM_Address_Control 0x89
|
21 | #define Set_Display_Enable 0xAF
|
22 | #define Set_All_Pixels_On 0xA5
|
23 | #define System_Reset 0xE2
|
24 | #define Page_Address 0x60
|
25 | #define Column_LSB0 0x00
|
26 | #define Column_MSB0 0x10
|
27 |
|
28 | int main(void)
|
29 | {
|
30 | _delay_ms(10);
|
31 |
|
32 | sei();
|
33 |
|
34 | init_io();
|
35 |
|
36 | spi_init();
|
37 |
|
38 | display_init();
|
39 |
|
40 | while(1)
|
41 | {
|
42 | //display_cmd(Set_All_Pixels_On);
|
43 | _delay_ms(1000);
|
44 | display_clear();
|
45 | _delay_ms(1000);
|
46 | }
|
47 | }
|
48 |
|
49 | //functions
|
50 | //spi functions
|
51 | void spi_init()
|
52 | {
|
53 | SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0);
|
54 | }
|
55 |
|
56 | void spi_send(unsigned char data)
|
57 | {
|
58 | SPDR = data;
|
59 | while(!(SPSR & (1 << SPIF)));
|
60 | }
|
61 |
|
62 | //display
|
63 | void display_init()
|
64 | {
|
65 | unsigned char i;
|
66 | unsigned char init_instructions[11] = {0xf1, 0x67, 0xc0, 0x40, 0x50, 0x2b, 0xeb, 0x81, 0x5f, 0x89, 0xaf};
|
67 |
|
68 | for(i = 0; i < 11; i++)
|
69 | {
|
70 | display_cmd(init_instructions[i]);
|
71 | }
|
72 | }
|
73 |
|
74 | void display_cmd(unsigned char cmd)
|
75 | {
|
76 | DISPLAY_PORT &= ~(1 << CD);
|
77 | spi_send(cmd);
|
78 | }
|
79 |
|
80 | void display_data(unsigned char data)
|
81 | {
|
82 | DISPLAY_PORT |= (1 << CD);
|
83 | spi_send(data);
|
84 | }
|
85 |
|
86 | void display_set_page_address(unsigned char pa)
|
87 | {
|
88 | display_cmd(Page_Address + pa);
|
89 | }
|
90 |
|
91 | void display_set_column_address(unsigned char ca)
|
92 | {
|
93 | unsigned char H = 0x00;
|
94 | unsigned char L = 0x00;
|
95 |
|
96 | L = (ca & 0x0f);
|
97 | H = (ca & 0xf0);
|
98 | H = (H >> 4);
|
99 |
|
100 | display_cmd(Column_LSB0 + L);
|
101 | display_cmd(Column_MSB0 + H);
|
102 | }
|
103 |
|
104 | void display_clear(void)
|
105 | {
|
106 | unsigned char fill = 0x00;
|
107 | unsigned char p, c;
|
108 |
|
109 | for(p = 0; p < 26; p++)
|
110 | {
|
111 | for(c = 0; c < 160; c++)
|
112 | {
|
113 | display_set_page_address(0x00 + p);
|
114 | display_set_column_address(0x00 + c);
|
115 |
|
116 | display_data(fill);
|
117 | }
|
118 | }
|
119 |
|
120 | }
|
121 |
|
122 |
|
123 | //io;
|
124 | void init_io(void)
|
125 | {
|
126 | DDRB = 0xB0;
|
127 | PORTB = 0x00;
|
128 | }
|