123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633 |
- #include <stdbool.h>
- #include <stdint.h>
- #include "fonts.h"
- #include "jlx12864.h"
- #include "pins.h"
- uint8_t lcd_type = 0;
- void init_uc1701(void);
- void init_ssd1306(void);
- void ssd1306_off();
- void ssd1306_on();
- void delay(int i)
- {
- volatile int j,k;
- for(j=0;j<i;j++)
- for(k=0;k<110;k++);
- }
- void transfer_command(int data) {
- uint8_t i;
- gpio_set(OLED_CS, 0);
- gpio_set(OLED_CD, 0);
- for(i=0;i<8;i++) {
- gpio_set(OLED_SCK, 0);
- if (data & 0x80)
- gpio_set(OLED_MOSI, 1);
- else
- gpio_set(OLED_MOSI, 0);
- gpio_set(OLED_SCK, 1);
- data <<= 1;
- }
- gpio_set(OLED_CS, 1);
- }
- void transfer_data(int data) {
- uint8_t i;
- gpio_set(OLED_CS, 0);
- gpio_set(OLED_CD, 1);
- for(i=0;i<8;i++) {
- gpio_set(OLED_SCK, 0);
- if (data & 0x80)
- gpio_set(OLED_MOSI, 1);
- else
- gpio_set(OLED_MOSI, 0);
- gpio_set(OLED_SCK, 1);
- data <<= 1;
- }
- gpio_set(OLED_CS, 1);
- }
- void init_lcd() {
-
- if (gpio_get(OLED_TYPE)) {
- gpio_set(LCD_BKLGHT, true);
- init_uc1701();
- lcd_type = 0;
- }
- else {
- init_ssd1306();
- lcd_type = 1;
- }
- }
- void init_uc1701()
- {
- gpio_set(OLED_CS, 0);
- gpio_set(OLED_RST, 0);
- delay(500);
- gpio_set(OLED_RST, 1);
- delay(200);
- transfer_command(0xe2);
- transfer_command(0x2c);
- transfer_command(0x2e);
- transfer_command(0x2f);
- transfer_command(0x24);
- transfer_command(0x81);
- transfer_command(0x1a);
- transfer_command(0xa2);
- transfer_command(0xc8);
- transfer_command(0xa0);
- transfer_command(0x40);
- transfer_command(0xaf);
- gpio_set(OLED_CS, 1);
- }
- void init_ssd1306()
- {
- gpio_set(OLED_CS, 0);
- gpio_set(OLED_RST, 0);
- delay(500);
- gpio_set(OLED_RST, 1);
- delay(200);
-
- transfer_command(0xAE);
-
- transfer_command(0x02);
-
- transfer_command(0x10);
-
- transfer_command(0x40);
-
- transfer_command(0xB0);
-
- transfer_command(0x81);
- transfer_command(0xFF);
-
- transfer_command(0xA6);
-
- transfer_command(0xA8);
-
- transfer_command(0x3F);
-
- transfer_command(0xAD);
- transfer_command(0x8B);
-
- transfer_command(0x33);
-
-
- transfer_command(0xA0);
-
- transfer_command(0xC0);
-
- transfer_command(0xD3);
- transfer_command(0x00);
-
- transfer_command(0xD5);
- transfer_command(0x80);
-
- transfer_command(0xD9);
- transfer_command(0x1F);
-
- transfer_command(0xDA);
- transfer_command(0x12);
-
- transfer_command(0xDB);
- transfer_command(0x40);
-
- transfer_command(0xAF);
- gpio_set(OLED_CS, 1);
- }
- void ssd1306_off() {
- transfer_command(0xAE);
- }
- void ssd1306_on() {
- transfer_command(0xAF);
- }
- void lcd_address(uint8_t page, uint8_t column) {
- gpio_set(OLED_CS, 0);
-
- if (lcd_type == 0) {
- column=column-1;
- }
- else {
- column=column+1;
- }
- page=page-1;
-
- transfer_command(0xb0 + page);
- transfer_command(((column >> 4) & 0x0f) + 0x10);
- transfer_command(column & 0x0f);
- }
- void clear_screen(void) {
- uint8_t i,j;
- gpio_set(OLED_CS, 0);
- for(j=0;j<8;j++) {
- lcd_address(1 + j,1);
- for(i=0;i<132;i++) {
- transfer_data(0x00);
- }
- }
- }
- void full_display(uint8_t data1, uint8_t data2) {
- int i,j;
- for(i=0; i<8; i++) {
- lcd_address(i+1,1);
- for(j=0;j<64;j++) {
- transfer_data(data1);
- transfer_data(data2);
- }
- }
- }
- void test_box(void) {
- int i,j;
- lcd_address(1,1);
- transfer_data(0xff);
- for(i=1;i<127;i++) {
- transfer_data(0x01);
- }
- transfer_data(0xff);
- lcd_address(2,1);
- transfer_data(0xff);
- for(i=1;i<127;i++) {
- transfer_data(0x80);
- }
- transfer_data(0xff);
- lcd_address(3,1);
- transfer_data(0xff);
- for(i=1;i<127;i++) {
- transfer_data(0x01);
- }
- transfer_data(0xff);
- for(j=4;j<=7;j++) {
- lcd_address(j,1);
- transfer_data(0xff);
- for(i=1;i<127;i++) {
- transfer_data(0x00);
- }
- transfer_data(0xff);
- }
- lcd_address(8,1);
- transfer_data(0xff);
- for(i=1;i<127;i++) {
- transfer_data(0x80);
- }
- transfer_data(0xff);
- }
- void test(void) {
- full_display(0xff,0xff);
- delay(1000);
- full_display(0x55,0x55);
- delay(1000);
- full_display(0xaa,0xaa);
- delay(1000);
- full_display(0xff,0x00);
- delay(1000);
- full_display(0x00,0xff);
- delay(1000);
- full_display(0x55,0xaa);
- delay(1000);
- full_display(0xaa,0x55);
- delay(1000);
- test_box();
- delay(1000);
- }
- void display_string_5x8(uint8_t page, uint8_t column, uint8_t reverse, char *text) {
- uint8_t i=0,k,disp_data;
- uint16_t j;
- bool is_symbol = 0;
- while (text[i] > 0x00) {
- if ((text[i] == 0xd0) || (text[i] == 0xd1))
- is_symbol = 1;
- if ((text[i] >= 0x20) && (text[i] <= 0x7e))
- is_symbol = 1;
- if (is_symbol) {
- if (text[i] == 0xd0)
- {
- i++;
- if(text[i] >= 0x90 && text[i] <= 0xbf)
- j = 6*(text[i] - 0x90);
- else
- j = 6*65;
- }
- else if(text[i] == 0xd1)
- {
- i++;
- if((text[i] >= 0x80 && text[i] <= 0x8f))
- j = 6*(text[i] - 0x50);
- else
- j = 6*64;
- }
- else
- j = 6*(text[i]-0x20);
- lcd_address(page,column);
- for(k=0;k<6;k++) {
- if (reverse==1) {
- if(text[i]>=0x80 || text[i]==0x01)
- disp_data = ~cyrillic_font5x8[j + k];
- else
- disp_data = ~Fonts5x8[j + k];
- }
- else {
- if(text[i]>=0x80 || text[i]==0x01)
- disp_data = cyrillic_font5x8[j + k];
- else
- disp_data = Fonts5x8[j + k];
- }
- transfer_data(disp_data);
- }
- i++;
- column+=6;
- if(column>123) {
- column=1;
- page++;
- }
- }
- else i++;
- }
- }
|