• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

C程序,求指点,

我是个单片机新手,写了一段程序,但是有示波器测试不对,不知道哪里出了问题,跪求高手指点下!小弟不胜感激!qq邮箱770510477@qq.com

/*******************************************************************************/
//*版权信息:
//*文 件 名: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();    
  }
}

全部回复(2)
正序查看
倒序查看
chebd
LV.6
2
2017-10-31 00:02
沙发
0
回复
松松man
LV.1
3
2017-10-31 11:46
@chebd
沙发

能帮忙看下是不是哪里出问题了,我用示波器测试,发现1码发出来的高低电平不对

0
回复