首先,建立ASF工程,然后选SAMD21开发板。然后加入OLED模块:
然后加入以下代码:
- #include <asf.h>
- int main(void)
- {
- //! the page address to write to
- uint8_t page_address;
- //! the column address, or the X pixel.
- uint8_t column_address;
- //! store the LCD controller start draw line
- uint8_t start_line_address = 0;
- system_init();
- delay_init();
- // Initialize SPI and SSD1306 controller
- ssd1306_init();
- // set addresses at beginning of display
- ssd1306_set_page_address(0);
- ssd1306_set_column_address(0);
- // fill display with lines
- for (page_address = 0; page_address <= 8; page_address++) {
- ssd1306_set_page_address(page_address);
- for (column_address = 0; column_address < 128; column_address++) {
- ssd1306_set_column_address(column_address);
- /* fill every other pixel in the display. This will produce
- horizontal lines on the display. */
- ssd1306_write_data(0x0f);
- }
- }
- // scroll the display using hardware support in the LCD controller
- while (true) {
- ssd1306_set_display_start_line_address(start_line_address++);
- delay_ms(250);
- }
- }
其管脚定义在config里。
- #ifndef CONF_SSD1306_H_INCLUDED
- #define CONF_SSD1306_H_INCLUDED
- #include <board.h>
- // Interface configuration for SAM D21 Xplained Pro
- # define SSD1306_SPI EXT3_SPI_MODULE
- # define CONFIG_SSD1306_FRAMEBUFFER
- # define SSD1306_DC_PIN EXT3_PIN_5
- # define SSD1306_RES_PIN EXT3_PIN_10
- # define SSD1306_CS_PIN EXT3_PIN_15
- # define SSD1306_SPI_PINMUX_SETTING EXT3_SPI_SERCOM_MUX_SETTING
- # define SSD1306_SPI_PINMUX_PAD0 EXT3_SPI_SERCOM_PINMUX_PAD0
- # define SSD1306_SPI_PINMUX_PAD1 PINMUX_UNUSED
- # define SSD1306_SPI_PINMUX_PAD2 EXT3_SPI_SERCOM_PINMUX_PAD2
- # define SSD1306_SPI_PINMUX_PAD3 EXT3_SPI_SERCOM_PINMUX_PAD3
- // Minimum clock period is 50ns[url=home.php?mod=space&uid=517595]@3.3V[/url] -> max frequency is 20MHz
- #define SSD1306_CLOCK_SPEED 1000000UL
- #define SSD1306_DISPLAY_CONTRAST_MAX 40
- #define SSD1306_DISPLAY_CONTRAST_MIN 30
- #endif /* CONF_SSD1306_H_INCLUDED */
运行效果如下:
|