Suga koubou
/
digit_led_screen
Kyohritsu Digit LED SCREEN (MATRIX)
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 00003 #define R0 (1<<0) // P2.0 (p26) 00004 #define G0 (1<<1) // P2.1 (p25) 00005 #define B0 (1<<2) // P2.2 (p24) 00006 #define R1 (1<<3) // P2.3 (p23) 00007 #define G1 (1<<4) // P2.4 (p22) 00008 #define B1 (1<<5) // P2.5 (p21) 00009 #define A (1<<4) // P0.4 (p30) 00010 #define B (1<<5) // P0.5 (p29) 00011 #define C (1<<10) // P0.10 (p28) 00012 #define D (1<<11) // P0.11 (p27) 00013 #define CLK (1<<24) // P0.24 (p16) 00014 #define STB (1<<25) // P0.25 (p17) 00015 #define OE (1<<26) // P0.26 (p18) 00016 00017 #define P0_MASK (A|B|C|D|CLK|STB|OE) 00018 #define P2_MASK (R0|G0|B0|R1|G1|B1) 00019 00020 DigitalOut myled(LED1); 00021 00022 uint32_t data[32][32]; 00023 int line = 0, pwm = 0; 00024 00025 void isrTimer () { 00026 uint32_t p0, p2; 00027 int i, rgb; 00028 00029 LPC_GPIO0->FIOMASK = ~P0_MASK; 00030 LPC_GPIO2->FIOMASK = ~P2_MASK; 00031 00032 p0 = ((line << 8) & (C|D)) | ((line << 4) & (A|B)) | OE; 00033 LPC_GPIO0->FIOPIN = p0; 00034 00035 for (i = 0; i < 32; i ++) { 00036 p2 = 0; 00037 rgb = data[line][i]; 00038 if ((rgb & 0xff) > pwm) p2 |= R0; 00039 if (((rgb >> 8) & 0xff) > pwm) p2 |= G0; 00040 if (((rgb >> 16) & 0xff) > pwm) p2 |= B0; 00041 rgb = data[line + 16][i]; 00042 if ((rgb & 0xff) > pwm) p2 |= R1; 00043 if (((rgb >> 8) & 0xff) > pwm) p2 |= G1; 00044 if (((rgb >> 16) & 0xff) > pwm) p2 |= B1; 00045 LPC_GPIO2->FIOPIN = p2; 00046 00047 p0 |= CLK; 00048 LPC_GPIO0->FIOPIN = p0; 00049 p0 &= ~CLK; 00050 LPC_GPIO0->FIOPIN = p0; 00051 } 00052 00053 p0 |= STB; 00054 LPC_GPIO0->FIOPIN = p0; 00055 p0 &= ~(STB|OE); 00056 LPC_GPIO0->FIOPIN = p0; 00057 00058 pwm += 32; 00059 if (pwm > 256) { 00060 pwm = 0; 00061 line ++; 00062 if (line >= 16) { 00063 line = 0; 00064 } 00065 } 00066 00067 LPC_GPIO0->FIOMASK = 0; 00068 LPC_GPIO2->FIOMASK = 0; 00069 } 00070 00071 int main() { 00072 Ticker t; 00073 int x, y, r, g, b; 00074 00075 LPC_GPIO0->FIODIR = P0_MASK; 00076 LPC_GPIO2->FIODIR = P2_MASK; 00077 LPC_GPIO0->FIOSET = OE; 00078 memset(data, 0, sizeof(data)); 00079 00080 t.attach_us(&isrTimer, 50); 00081 00082 for (;;) { 00083 x = 32.0 * rand() / RAND_MAX; 00084 y = 32.0 * rand() / RAND_MAX; 00085 r = 255.0 * rand() / RAND_MAX; 00086 g = 255.0 * rand() / RAND_MAX; 00087 b = 255.0 * rand() / RAND_MAX; 00088 data[y][x] = (b << 16) | (g << 8) | r; 00089 wait_ms(5); 00090 } 00091 }
Generated on Sun Jul 17 2022 06:17:32 by 1.7.2