
VFD command test program
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* 00002 00003 mbed VFD Control for GP1059A01 00004 00005 =============== 00006 Status LED 00007 ----------- 00008 LED1: 00009 LED2: 00010 LED3: 00011 LED4: 00012 00013 =============== 00014 GP1059A01 INTERFACE CONNECTION 00015 --------------- 00016 1 D0 2 D1 00017 3 D2 4 D3 00018 5 D4 6 D5 00019 7 D6 8 D7 00020 9 GND 10 INT 00021 11 WR 12 RD 00022 13 CS 14 C/D 00023 15 5V 16 5V 00024 17 5V 18 GND 00025 19 GND 20 ebb(+70V) 00026 00027 00028 00029 ===================== 00030 mbed CONNECTION 00031 --------------------- 00032 mbed GP1059A01(I/O) 00033 --------------------- 00034 p5 1 (D0) I/O 00035 p6 2 (D1) I/O 00036 p7 3 (D2) I/O 00037 p8 4 (D3) I/O 00038 p9 5 (D4) I/O 00039 p10 6 (D5) I/O 00040 p11 7 (D6) I/O 00041 p12 8 (D7) I/O 00042 p13 10 (INT) O 00043 p14 11 (WR) I 00044 p15 12 (RD) I 00045 p16 13 (CS) I 00046 p17 14 (C/D) I 00047 GND 9,18,19 (GND) 00048 ===================== 00049 00050 */ 00051 00052 #include "mbed.h" 00053 00054 Serial pc(USBTX, USBRX); 00055 LocalFileSystem local("local"); 00056 00057 // VFD DATA PORT 00058 BusOut DATA(p5, p6, p7, p8, p9, p10, p11, p12); 00059 // __ 00060 // Write Signal (WR) 00061 DigitalOut WR(p14); 00062 // __ 00063 // Read Signal (RD) 00064 DigitalOut RD(p15); 00065 // __ 00066 // Chip Select Signal (CS) 00067 DigitalOut CS(p16); 00068 // _ 00069 // Command / Data Select Signal (C/D) 00070 DigitalOut CD(p17); 00071 // 00072 // Frame Signal 00073 DigitalIn INT(p13); 00074 00075 // LED Status 00076 DigitalOut led1(LED1); 00077 DigitalOut led2(LED2); 00078 DigitalOut led3(LED3); 00079 DigitalOut led4(LED4); 00080 00081 00082 const uint8_t HIGH = 1; 00083 const uint8_t LOW = 0; 00084 const uint16_t MAX_ADDRESS = 0x01fff; 00085 00086 FILE *fp; 00087 char in_filename[] = "/local/rom1.bin"; 00088 00089 void send_cmd(uint8_t cmd) 00090 { 00091 CD = HIGH; // C/D SET HIGH 00092 DATA = cmd; // COMMAND SET 00093 CS = LOW; // CS SET LOW 00094 WR = LOW; // WR SET LOW 00095 wait_us(2); // wait 2us 00096 WR = HIGH; // WR SET HIGH 00097 CS = HIGH; // CS SET HIGH 00098 wait_us(4); // wait 4us 00099 00100 return; 00101 } 00102 00103 void send_data(uint8_t data) 00104 { 00105 CD = LOW; // C/D SET HIGH 00106 DATA = data; // DATA SET 00107 CS = LOW; // CS SET LOW 00108 WR = LOW; // WR SET LOW 00109 wait_us(2); // wait 2us 00110 WR = HIGH; // WR SET HIGH 00111 CS = HIGH; // CS SET HIGH 00112 wait_us(4); // wait 4us 00113 00114 return; 00115 } 00116 00117 // Luminance Adjustment (06H) 00118 void luminance_adjustment(uint8_t data) 00119 { 00120 send_cmd(6); 00121 send_data(data); 00122 00123 return; 00124 } 00125 00126 // 04H,05H,02H: Setting address of Write 00127 void set_write_read_address(uint16_t address){ 00128 send_cmd(4); // 04H: Setting lower address of Write-Read 00129 send_data((uint8_t)(address & 0x0ff)); // mask upper address 00130 00131 send_cmd(5); // 05H: Setting upper address of Write-Read 00132 send_data((uint8_t)(address >> 8)); // 8bit shift 00133 00134 send_cmd(2); // 02H: Data Write 00135 00136 return; 00137 } 00138 00139 // 07H,08H: Setting address display started 00140 void set_disp_start_address(uint16_t address){ 00141 send_cmd(7); // 07H: Setting lower address display started 00142 send_data((uint8_t)(address & 0x0ff)); 00143 00144 send_cmd(8); // 08H: Setting upper address display started 00145 send_data((uint8_t)(address >> 8)); 00146 00147 return; 00148 } 00149 00150 // TEST PATTERN 00151 void test_pattern(){ 00152 led1 = 1; 00153 set_disp_start_address(0); // Display address: 000000H 00154 led1 = 0; 00155 00156 led2 = 1; 00157 luminance_adjustment(0x0f); // 100% 00158 led2 = 0; 00159 00160 for (uint16_t d = 0; d < 256 ; d++){ 00161 led3 = 1; 00162 set_write_read_address(0); // Start address: 000000H 00163 led3 = 0; 00164 00165 for (uint16_t i = 0; i < MAX_ADDRESS; i++){ 00166 led4 = 1; 00167 send_data(d); 00168 led4 = 0; 00169 } 00170 } 00171 00172 return; 00173 } 00174 00175 void test_datafile(){ 00176 if ( NULL == (fp = fopen( in_filename, "r" )) ) { 00177 pc.printf("File open error.\n"); 00178 led1 = HIGH; 00179 return; 00180 } 00181 00182 led1 = 1; 00183 set_disp_start_address(0); // Display address: 000000H 00184 led1 = 0; 00185 00186 led2 = 1; 00187 luminance_adjustment(0x0f); // 100% 00188 led2 = 0; 00189 00190 led3 = 1; 00191 set_write_read_address(0); // Start address: 000000H 00192 led3 = 0; 00193 00194 char d[8]; // 1char 8byte buffer 00195 int char_cnt = 0; 00196 00197 // 8byte = 1CHAR 00198 while(fgets(d, 8, fp) != NULL && char_cnt < 10) { 00199 for (int byte_num = 0; byte_num < 8 ; byte_num++){ // byte 00200 pc.printf("d[%d]:%02x ",byte_num,d[byte_num]); 00201 uint8_t a = 0; 00202 for (int bit_num = 7; bit_num >= 0; bit_num--){ // bit 00203 if ((d[byte_num] & 0x80) != 0) { 00204 a = a + (2 ^ bit_num); 00205 } 00206 d[byte_num] = d[byte_num] << 1; 00207 pc.printf("a:%02x d:%02x ",a,d[byte_num]); 00208 } 00209 if ((d[byte_num] & 0x80) != 0) a++; 00210 00211 led4 = 1; 00212 pc.printf("A:%02x ",a); 00213 send_data(a); 00214 led4 = 0; 00215 00216 for (int e = 0; e < 7 ; e++) send_data(0); 00217 } 00218 char_cnt++; 00219 } 00220 fclose(fp); 00221 00222 return; 00223 } 00224 00225 void blink_LED() { 00226 for (int i = 0 ; i < 5 ; i++) { 00227 led4 = 1; 00228 wait(0.2); 00229 led4 = 0; 00230 wait(0.2); 00231 } 00232 return; 00233 } 00234 00235 int main() { 00236 00237 led1 = LOW; 00238 led2 = LOW; 00239 led3 = LOW; 00240 led4 = LOW; 00241 00242 CS = HIGH; 00243 WR = HIGH; 00244 RD = HIGH; 00245 CD = HIGH; 00246 00247 // Start Sign 00248 blink_LED(); 00249 00250 // TEST 00251 //test_pattern(); 00252 00253 test_datafile(); 00254 00255 // END Sign 00256 blink_LED(); 00257 }
Generated on Tue Jul 26 2022 19:09:55 by
