我是個單片機新手,寫了一段程序,但是有示波器測試不對,不知道哪里出了問題,跪求高手指點下!小弟不勝感激!qq郵箱770510477@qq.com
/*******************************************************************************/ //*版權(quán)信息: //*文 件 名:UCS5603-V1.0 //*當前版本:V1.0 //*晶震頻率:24MHZ(內(nèi)部時鐘) /********************************************************************************/ #include//MCU頭文件 #include "intrins.h" //包含nop指令頭文件 #define nop _nop_(); //宏定義 /********************************定義控制端口************************************/ sbit DO=P2^4; //定義信號輸出DO /**********************************定義變量**************************************/ unsigned int IC=5; //控制UCS5603個數(shù) unsigned int LED_PX; //像素點數(shù) unsigned int PWM=4095; //UCS5603灰度 unsigned int Rda,Gda,Bda; //R、G、B灰度數(shù)據(jù) unsigned int bdata LED_data; //可位操作的數(shù)據(jù)發(fā)送暫存變量聲明 sbit bit0=LED_data^0; //被發(fā)送的數(shù)據(jù)各位定義 sbit bit1=LED_data^1; sbit bit2=LED_data^2; sbit bit3=LED_data^3; sbit bit4=LED_data^4; sbit bit5=LED_data^5; sbit bit6=LED_data^6; sbit bit7=LED_data^7; sbit bit8=LED_data^8; sbit bit9=LED_data^9; sbit bit10=LED_data^10; sbit bit11=LED_data^11; bit flag=0; //定義一個標志位 /*************************************延時函數(shù)*************************************/ void delay(unsigned int n) //n=1,延時500us { unsigned int i; while(n--) for(i=0;i<860;i++); } /*************************************延時4us函數(shù)*************************************/ void delay_us(unsigned int ticks) { for(;ticks!=0;ticks--) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } } /************************發(fā)送0碼函數(shù),H電平360ns+900,**********************/ void send_data_0() { DO=0xff; nop; nop; nop; nop; nop; nop; nop; DO=0x00; nop; nop; nop; nop;nop;nop;nop;nop;nop;nop;nop;nop; } /************************發(fā)送1碼函數(shù),H電平700ns+550**********************/ void send_data_1() { DO=0xff; nop; nop; nop; nop; nop; nop; nop;nop;nop;nop;nop; DO=0x00; nop; nop; nop; nop; nop; nop; nop; } /**************************發(fā)送1個字節(jié)數(shù)據(jù),高位先發(fā)*******************************/ void send_data(unsigned int DATA) { LED_data=DATA; if(bit11) send_data_1(); else send_data_0(); if(bit10) send_data_1(); else send_data_0(); if(bit9) send_data_1(); else send_data_0(); if(bit8) send_data_1(); else send_data_0(); if(bit7) send_data_1(); else send_data_0(); if(bit6) send_data_1(); else send_data_0(); if(bit5) send_data_1(); else send_data_0(); if(bit4) send_data_1(); else send_data_0(); if(bit3) send_data_1(); else send_data_0(); if(bit2) send_data_1(); else send_data_0(); if(bit1) send_data_1(); else send_data_0(); if(bit0) send_data_1(); else send_data_0(); } /******************************發(fā)送W時長數(shù)據(jù)*************************************/ void W_Bit(void) { DO=0x00; delay_us(18); //15us } /*********************************發(fā)送工作碼數(shù)據(jù)**************************************/ void Wokr_Bit(void) { send_data(0xfff); send_data(0xfff); send_data(0xfff); send_data(0xfff); send_data(0x01); W_Bit(); send_data(0xfff);//電流設(shè)定值=21ma } /*********************************發(fā)送rest-bit數(shù)據(jù)**************************************/ void rest_Bit(void) { DO=0x00; delay(8); //1500us } /*********************************發(fā)送1幀數(shù)據(jù)**************************************/ void date_5603(void) { unsigned char i; rest_Bit(); Wokr_Bit(); for(i=0;i<10;i++) { send_data(0xfff); send_data(0); send_data(0); } } /*********************************main**************************************/ void main (void) { while(1) { date_5603(); } }