#pragma once #include #include #include "expander.h" #define LCD_WriteCommand(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_INTERNAL_VLCD 0x6 #define UC1601S_BIAS_RATIO_6 0x0 #define UC1601S_BIAS_RATIO_7 0x1 #define UC1601S_BIAS_RATIO_8 0x2 #define UC1601S_BIAS_RATIO_9 0x3 #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); void LCD_Clear(void); void LCD_GoTo(unsigned char x, unsigned char y); void LCD_WriteTextP(__flash const char *t); void LCD_WriteText(const char *t); void LCD_WriteChar(char c); #define LCD_WriteData(c) LCD_WriteChar(c) static inline void uc1601s_set_column_address(unsigned char addr) { uc1601s_write_command(UC1601S_CA30 | (addr&0x0f)); uc1601s_write_command(UC1601S_CA74 | (addr>>4)); } 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); } 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 &= 0x6; uc1601s_write_command(UC1601S_LC21 | lc); } static inline void uc1601s_system_reset(void) { uc1601s_write_command(UC1601S_SYSTEMRESET); } 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); }