デジットで入手したフルカラーLEDの制御プログラムです。

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /**
00002  * This program is test for p9813 IC 
00003  **/
00004 
00005 
00006 #include "mbed.h"
00007 
00008 //DigitalOut led(LED1);
00009 BusOut leds(LED1,LED2,LED3,LED4);
00010 AnalogIn analog(p15);
00011 
00012 
00013 #define H 1
00014 #define L 0
00015 
00016 DigitalOut di(p10);//signal
00017 DigitalOut ci(p11);//clock
00018 
00019 void sendBit(char bit){
00020     ci =L;
00021     di = (bit==0 ? L:H );
00022     ci=H;//read DI at rising edge
00023 }
00024 char toGrayCode(char byte){
00025     char shift = byte>>1;
00026     return shift^byte;
00027 }
00028 
00029 void sendByte(char byte){
00030     char mask =0x80;
00031     for(  ; mask != 0x00 ; mask>>=1){// 1000 0000
00032         sendBit(byte & mask);
00033     }
00034 }
00035 
00036 void sendStartFrame(){
00037     for(int i = 0; i<4 ;i++){
00038         sendByte(0x00);
00039     }
00040 }
00041 
00042 void sendStopFrame(){
00043     sendStartFrame();
00044 }
00045 
00046 
00047 void sendRGB(char rb,char gb ,char bb){
00048     /*
00049     printf("******\n");
00050     printf("r is %X \n",rb);
00051     printf("g is %X \n",gb );
00052     printf("b is %X \n",bb );
00053     printf("******\n\n");
00054     */
00055     char r = toGrayCode(rb);
00056     char g = toGrayCode(gb);
00057     char b = toGrayCode(bb);
00058     
00059     sendStartFrame();
00060     sendBit(H);
00061     sendBit(H);
00062     // error check
00063     sendBit( (~b) & 0x80 );//mask by 1000 0000
00064     sendBit( (~b) & 0x40 );//mask by 0100 0000
00065     sendBit( (~g) & 0x80 );//mask by 1000 0000
00066     sendBit( (~g) & 0x40 );//mask by 0100 0000
00067     sendBit( (~r) & 0x80 );//mask by 1000 0000
00068     sendBit( (~r) & 0x40 );//mask by 0100 0000
00069     //send RGB data
00070     sendByte(b);
00071     sendByte(g);
00072     sendByte(r);
00073     sendStopFrame();
00074 }
00075 
00076 void sendRGB(int rgb){
00077     char r = (char) ((rgb & 0x00FF0000) >> 16);
00078     char g = (char) ((rgb & 0x0000FF00) >> 8);
00079     char b = (char) ( rgb & 0x000000FF);
00080     //printf("r:%X,g:%X,b:%X \n",r,g,b);
00081     sendRGB(r,g,b);
00082 }
00083 
00084 
00085 
00086 int main() {
00087     int rgb =0x000000;
00088     int color[] ={
00089         0x00000000,
00090         0x000000FF,
00091         0x0000FF00,
00092         0x0000FFFF,
00093         0x00FF0000,
00094         0x00FF00FF,
00095         0x00FFFF00,
00096         0x00FFFFFF};
00097     leds =0x0;
00098     int index=0;
00099     while(1) {
00100         //printf("%d\n",index);
00101         leds=leds+1;
00102         sendRGB(color[index]);
00103         index++;    
00104         if(index == 8){
00105             index = 0;
00106             //printf("******");
00107         }
00108         wait(2.0*analog.read());
00109         /*
00110         leds=leds+1;
00111         sendRGB(0xFF,0x00,0x00);
00112         wait(2.0*analog.read());
00113         leds=leds+1;
00114         sendRGB(0x00,0xFF,0x00);
00115         wait(2.0*analog.read());
00116         leds=leds+1;
00117         */
00118     }
00119 }