| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <string.h>
- #include "gpio.h"
- #include "lcd.h"
- #include "log.h"
- void ssd1309_on(lcd_handle_t *h, int flag)
- {
- if(flag) {
- lcd_write_reg(h,0x8D);
- lcd_write_reg(h,0x14);
- lcd_write_reg(h,0xAF);
- }
- else {
- lcd_write_reg(h,0x8D);
- lcd_write_reg(h,0x10);
- lcd_write_reg(h,0xAE);
- }
- return 0;
- }
- int ssd1309_init(lcd_handle_t *h)
- {
- ssd1309_reset();
- lcd_write_reg(h,0xFD);
- lcd_write_reg(h,0x12);
- lcd_write_reg(h,0xAE);//--turn off oled panel
- lcd_write_reg(h,0xd5);//--set display clock divide ratio/oscillator frequency
- lcd_write_reg(h,0xA0);
- lcd_write_reg(h,0xA8);//--set multiplex ratio(1 to 64)
- lcd_write_reg(h,0x3f);//--1/64 duty
- lcd_write_reg(h,0xD3);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
- lcd_write_reg(h,0x00);//-not offset
- lcd_write_reg(h,0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
- lcd_write_reg(h,0xA1);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
- lcd_write_reg(h,0xC8);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
- lcd_write_reg(h,0xDA);//--set com pins hardware configuration
- lcd_write_reg(h,0x12);
- lcd_write_reg(h,0x81);//--set contrast control register
- lcd_write_reg(h,0x7F);// Set SEG Output Current Brightness
- lcd_write_reg(h,0xD9);//--set pre-charge period
- lcd_write_reg(h,0x82);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
- lcd_write_reg(h,0xDB);//--set vcomh
- lcd_write_reg(h,0x34);//Set VCOM Deselect Level
- lcd_write_reg(h,0xA4);// Disable Entire Display On (0xa4/0xa5)
- lcd_write_reg(h,0xA6);// Disable Inverse Display On (0xa6/a7)
- ssd1309_refresh(h);
- ssd1309_on(h,1);
-
- return 0;
- }
- int ssd1309_refresh(lcd_handle_t *h)
- {
- int i,n,offset;
-
- for(i=0;i<8;i++) {
- lcd_write_reg(h,0xb0+i); //设置行起始地址
- lcd_write_reg(h,0x00); //设置低列起始地址
- lcd_write_reg(h,0x10); //设置高列起始地址
- gpio_set(DC_GPIO, 1);
- lcd_hw_write(h, &h->buf[i*h->width], h->width);
- }
- }
|