Kazuhiro Ouchi
/
VFD
VFD command test program
main.cpp
- Committer:
- kanpapa
- Date:
- 2011-10-02
- Revision:
- 0:b2dddd322c12
- Child:
- 1:05518314979e
File content as of revision 0:b2dddd322c12:
/* mbed VFD Control for GP1059A01 =============== Status LED ----------- LED1: LED2: LED3: LED4: =============== GP1059A01 INTERFACE CONNECTION --------------- 1 D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 GND 10 INT 11 WR 12 RD 13 CS 14 C/D 15 5V 16 5V 17 5V 18 GND 19 GND 20 ebb(+70V) ===================== mbed CONNECTION --------------------- mbed GP1059A01(I/O) --------------------- p5 1 (D0) I/O p6 2 (D1) I/O p7 3 (D2) I/O p8 4 (D3) I/O p9 5 (D4) I/O p10 6 (D5) I/O p11 7 (D6) I/O p12 8 (D7) I/O p13 10 (INT) O p14 11 (WR) I p15 12 (RD) I p16 13 (CS) I p17 14 (C/D) I GND 9,18,19 (GND) ===================== */ #include "mbed.h" Serial pc(USBTX, USBRX); // VFD DATA PORT BusInOut DATA(p5, p6, p7, p8, p9, p10, p11, p12); // __ // Write Signal (WR) DigitalOut WR(p14); // __ // Read Signal (RD) DigitalOut RD(p15); // __ // Chip Select Signal (CS) DigitalOut CS(p16); // _ // Command / Data Select Signal (C/D) DigitalOut CD(p17); // // Frame Signal DigitalIn INT(p13); // LED Status DigitalOut led1(LED2); DigitalOut led2(LED3); DigitalOut led3(LED4); const uint8_t HIGH = 1; const uint8_t LOW = 0; const uint16_t MAX_ADDRESS = 0x01fff; void send_cmd(uint8_t cmd) { // LED ON led1 = HIGH; // C/D SET HIGH CD = HIGH; wait_us(1); // CS SET LOW CS = LOW; wait_us(1); // WR SET LOW WR = LOW; wait_us(1); // COMMAND SET DATA = cmd; wait_us(1); // WR SET HIGH WR = HIGH; wait_us(1); // CS SET HIGH CS = HIGH; wait_us(1); // LED OFF led1 = LOW; return; } void send_data(uint8_t data) { // LED ON led2 = HIGH; // C/D SET HIGH CD = LOW; wait_us(1); // CS SET LOW CS = LOW; wait_us(1); // WR SET LOW WR = LOW; wait_us(1); // DATA SET DATA = data; wait_us(1); // WR SET HIGH WR = HIGH; wait_us(1); // CS SET HIGH CS = HIGH; wait_us(1); // LED OFF led2 = LOW; return; } // Write/Read address is automatically incremented (00H) void cmd_00H(){ send_cmd(0); return; } void cmd_01H(){ send_cmd(1); return; } // Luminance Adjustment (06H) void luminance_adjustment(uint8_t data) { send_cmd(6); send_data(data); return; } // Data Write/Read(02H,03H); void write_display_data(uint8_t data){ send_cmd(2); // 04H send_data(data); return; } // 04H,05H: Setting address of Write-Read void set_write_read_address(uint16_t address){ send_cmd(4); // 04H: Setting lower address of Write-Read send_data((uint8_t)(address && 0x0ff)); // mask upper address send_cmd(5); // 05H: Setting upper address of Write-Read send_data((uint8_t)(address >> 8)); // 8bit shift return; } // 07H,08H: Setting address display started void set_disp_start_address(uint16_t address){ send_cmd(7); // 07H: Setting lower address display started send_data((uint8_t)(address && 0x0ff)); send_cmd(8); // 08H: Setting upper address display started send_data((uint8_t)(address >> 8)); return; } // TEST PATTERN void test_pattern(){ uint8_t d = 0; //cmd_00H(); // Write/Read address is automatically incremented luminance_adjustment(8); // 51.9% set_write_read_address(0); // Start address: 000000H set_disp_start_address(0); // Display address: 000000H for (uint16_t i = 0; i < MAX_ADDRESS; i++){ write_display_data(d++); if (d > 255) { d = 0; } } return; } void blink_LED() { for (int i = 0 ; i < 10 ; i++) { led3 = 1; wait(0.2); led3 = 0; wait(0.2); } return; } int main() { led1 = LOW; led2 = LOW; led3 = LOW; CS = HIGH; WR = HIGH; RD = HIGH; CD = HIGH; // Start Sign blink_LED(); // TEST test_pattern(); // END Sign blink_LED(); }