|
@@ -0,0 +1,150 @@
|
|
|
|
+#pragma once
|
|
|
|
+
|
|
|
|
+#include <avr/io.h>
|
|
|
|
+#include <util/delay.h>
|
|
|
|
+#include "expander.h"
|
|
|
|
+
|
|
|
|
+#define LCD_WriteCommand(x)
|
|
|
|
+#define LCD_WriteData(x)
|
|
|
|
+#define LCD_Clear()
|
|
|
|
+#define LCD_GoTo(x,y)
|
|
|
|
+#define LCD_WriteTextP(x)
|
|
|
|
+#define LCD_WriteText(x)
|
|
|
|
+
|
|
|
|
+#define UC1601S_CA30 0x00
|
|
|
|
+#define UC1601S_CA74 0x10
|
|
|
|
+#define UC1601S_TC 0x24
|
|
|
|
+#define UC1601S_PC 0x28
|
|
|
|
+#define UC1601S_ADV 0x30
|
|
|
|
+#define UC1601S_SL 0x40
|
|
|
|
+#define UC1601S_PA 0xb0
|
|
|
|
+#define UC1601S_PM 0x81
|
|
|
|
+#define UC1601S_LC4 0x84
|
|
|
|
+#define UC1601S_AC 0x88
|
|
|
|
+#define UC1601S_LC3 0xa0
|
|
|
|
+#define UC1601S_DC1 0xa4
|
|
|
|
+#define UC1601S_DC0 0xa6
|
|
|
|
+#define UC1601S_DC2 0xae
|
|
|
|
+#define UC1601S_LC21 0xc0
|
|
|
|
+#define UC1601S_SYSTEMRESET 0xe2
|
|
|
|
+#define UC1601S_NOP 0xe3
|
|
|
|
+#define UC1601S_BR 0xe8
|
|
|
|
+#define UC1601S_CEN 0xf1
|
|
|
|
+#define UC1601S_DST 0xf2
|
|
|
|
+#define UC1601S_DEN 0xf3
|
|
|
|
+
|
|
|
|
+#define UC1601S_DATA_OUTPUT() expander_set_dir(0, 0x00, 0x00)
|
|
|
|
+#define UC1601S_DATA_INPUT() expander_set_dir(0, 0xFF, 0x00)
|
|
|
|
+
|
|
|
|
+#define UC1601S_WR_PORT 1
|
|
|
|
+#define UC1601S_WR (1<<2)
|
|
|
|
+#define UC1601S_CD_PORT 1
|
|
|
|
+#define UC1601S_CD (1<<0)
|
|
|
|
+#define UC1601S_RD_PORT 1
|
|
|
|
+#define UC1601S_RD (1<<3)
|
|
|
|
+#define UC1601S_CS_PORT 1
|
|
|
|
+#define UC1601S_CS (1<<1)
|
|
|
|
+#define UC1601S_RST_PORT 1
|
|
|
|
+#define UC1601S_RST (1<<6)
|
|
|
|
+
|
|
|
|
+void uc1601s_write_command(unsigned char cmd);
|
|
|
|
+void uc1601s_write_data(unsigned char data);
|
|
|
|
+unsigned char uc1601s_read_data(void);
|
|
|
|
+void LCD_Initialize(void);
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_column_address(unsigned char addr) {
|
|
|
|
+ uc1601s_write_command(UC1601S_CA30 | (addr&0x0f));
|
|
|
|
+ uc1601s_write_command(UC1601S_CA74 | (addr>>4));
|
|
|
|
+ uc1601s_read_data();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_temp_compensation(unsigned char tc) {
|
|
|
|
+ tc &= 0x3;
|
|
|
|
+ uc1601s_write_command(UC1601S_TC | tc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_power_control(unsigned char pc) {
|
|
|
|
+ pc &= 0x7;
|
|
|
|
+ uc1601s_write_command(UC1601S_PC | pc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_scroll_line(unsigned char sl) {
|
|
|
|
+ sl &= 0x3f;
|
|
|
|
+ uc1601s_write_command(UC1601S_SL | sl);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_page_address(unsigned char pa) {
|
|
|
|
+ pa &= 0x0f;
|
|
|
|
+ uc1601s_write_command(UC1601S_PA | pa);
|
|
|
|
+ uc1601s_read_data();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_vbias(unsigned char pm) {
|
|
|
|
+ uc1601s_write_command(UC1601S_PM);
|
|
|
|
+ uc1601s_write_command(pm);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_partial_display(unsigned char lc) {
|
|
|
|
+ lc &= 0x1;
|
|
|
|
+ uc1601s_write_command(UC1601S_LC4 | lc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_ram_address(unsigned char ac) {
|
|
|
|
+ ac &= 0x3;
|
|
|
|
+ uc1601s_write_command(UC1601S_AC | ac);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601_set_frame_rate(unsigned char lc) {
|
|
|
|
+ lc &= 0x1;
|
|
|
|
+ uc1601s_write_command(UC1601S_LC3 | lc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_all_pixel_on(unsigned char dc) {
|
|
|
|
+ dc &= 0x1;
|
|
|
|
+ uc1601s_write_command(UC1601S_DC1 | dc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_inverse_display(unsigned char dc) {
|
|
|
|
+ dc &= 0x1;
|
|
|
|
+ uc1601s_write_command(UC1601S_DC0 | dc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_display_enable(unsigned char dc) {
|
|
|
|
+ dc &= 0x1;
|
|
|
|
+ uc1601s_write_command(UC1601S_DC2 | dc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_lcd_mapping(unsigned char lc) {
|
|
|
|
+ lc &= 0x3;
|
|
|
|
+ lc <<= 1;
|
|
|
|
+ uc1601s_write_command(UC1601S_LC21 | lc);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_system_reset(void) {
|
|
|
|
+ uc1601s_write_command(UC1601S_SYSTEMRESET);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#define UC1601S_BIAS_RATIO_6 0x0
|
|
|
|
+#define UC1601S_BIAS_RATIO_7 0x1
|
|
|
|
+#define UC1601S_BIAS_RATIO_8 0x2
|
|
|
|
+#define UC1601S_BIAS_RATIO_9 0x3
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_lcd_bias_ratio(unsigned char br) {
|
|
|
|
+ br &= 0x3;
|
|
|
|
+ uc1601s_write_command(UC1601S_BR | br);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_com_end(unsigned char cen) {
|
|
|
|
+ uc1601s_write_command(UC1601S_CEN);
|
|
|
|
+ uc1601s_write_command(cen);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_partial_display_start(unsigned char dst) {
|
|
|
|
+ uc1601s_write_command(UC1601S_DST);
|
|
|
|
+ uc1601s_write_command(dst);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void uc1601s_set_partial_display_end(unsigned char den) {
|
|
|
|
+ uc1601s_write_command(UC1601S_DEN);
|
|
|
|
+ uc1601s_write_command(den);
|
|
|
|
+}
|