/*******************************************************************************/ //*版权信息: //*文 件 名:UCS5603-V1.0 //*当前版本:V1.0 //*晶震频率:24MHZ(内部时钟) /********************************************************************************/ #include//MCU头文件 #include "intrins.h" //包含nop指令头文件 #define nop _nop_(); //宏定义 /********************************定义控制端口************************************/ sbit DO=P2^4; //定义信号输出DO /**********************************定义变量**************************************/ unsigned int IC=5; //控制UCS5603个数 unsigned int LED_PX; //像素点数 unsigned int PWM=4095; //UCS5603灰度 unsigned int Rda,Gda,Bda; //R、G、B灰度数据 unsigned int bdata LED_data; //可位操作的数据发送暂存变量声明 sbit bit0=LED_data^0; //被发送的数据各位定义 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; //定义一个标志位 /*************************************延时函数*************************************/ void delay(unsigned int n) //n=1,延时500us { unsigned int i; while(n--) for(i=0;i<860;i++); } /*************************************延时4us函数*************************************/ void delay_us(unsigned int ticks) { for(;ticks!=0;ticks--) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } } /************************发送0码函数,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; } /************************发送1码函数,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; } /**************************发送1个字节数据,高位先发*******************************/ 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(); } /******************************发送W时长数据*************************************/ void W_Bit(void) { DO=0x00; delay_us(18); //15us } /*********************************发送工作码数据**************************************/ void Wokr_Bit(void) { send_data(0xfff); send_data(0xfff); send_data(0xfff); send_data(0xfff); send_data(0x01); W_Bit(); send_data(0xfff);//电流设定值=21ma } /*********************************发送rest-bit数据**************************************/ void rest_Bit(void) { DO=0x00; delay(8); //1500us } /*********************************发送1帧数据**************************************/ 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(); } } /*==================================结束=============================================*/
菜鸟C,想请教下这段程序问题出在哪里,帮我指出下 谢谢
小弟是个C菜鸟,自己写了段程序,编译也没有问题,但是实际我用示波器去测试的时候,发现我的12位数据,原本全部要发12个1的,但是其中却参杂了1111 0000 1111 变成这样的,自己琢磨了,觉得是不是我的位定义错了,所以想请C语言高手帮忙看下,指点下,小弟不胜感激,邮箱770510477@qq。com