久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

紅外調(diào)光RGB

include
#define uint unsigned int
#define uchar unsigned char
unsigned char a[4];    //儲(chǔ)存用戶碼、用戶反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼
unsigned int LowTime,HighTime; //儲(chǔ)存高、低電平的寬度 
sbit led_r=P1^0;
sbit led_g=P1^2;
sbit led_b=P1^4;
sbit IR=P3^2;
sbit BEEP = P2^3;
bit  kg_flag;
bit  zb_flag;
bit  m_flag;
bit  bit_flag;
uchar num,tl,tb,tm,tj;
uchar number;
uchar scw;
uchar pwm_r,pwm_g,pwm_b;
uchar pwm[3];
uchar bright,bright_t;
uchar x[30]={0};
uchar type[30]={0};
void dealy(uint z)
{  uint x,y;	for(x=z;x>0;x--)
	for(y=110;y>0;y--);
}
/*void delay1ms()
{
   unsigned char i,j;	
	 for(i=0;i<10;i++)
	  for(j=0;j<33;j++)
	   ;		 
 }
void delay(unsigned char n)
 {
   unsigned char i;
	for(i=0;i>1;  //temp中的各數(shù)據(jù)位右移一位,因?yàn)橄茸x出的是高位數(shù)據(jù)									
			   TH0=0;         //定時(shí)器清0
			   TL0=0;         //定時(shí)器清0
			   TR0=1;         //開啟定時(shí)器T0
		      while(IR==0)   //如果是低電平就等待
	               ;	      //低電平計(jì)時(shí)
		  	   TR0=0;         //關(guān)閉定時(shí)器T0
			   LowTime=TH0*256+TL0;    //保存低電平寬度
			   TH0=0;         //定時(shí)器清0
			   TL0=0;         //定時(shí)器清0
			   TR0=1;         //開啟定時(shí)器T0
			   while(IR==1)   //如果是高電平就等待
			       ;			   
			   TR0=0;        //關(guān)閉定時(shí)器T0
			   HighTime=TH0*256+TL0;   //保存高電平寬度
			   if((LowTime<370)||(LowTime>640))
			  		    return 0;        //如果低電平長度不在合理范圍,則認(rèn)為出錯(cuò),停止解碼			
			   if((HighTime>420)&&(HighTime<620))   //如果高電平時(shí)間在560微秒左右,即計(jì)數(shù)560/1.085=516次
			           temp=temp&0x7f;       //(520-100=420, 520+100=620),則該位是0
			   if((HighTime>1300)&&(HighTime<1800)) //如果高電平時(shí)間在1680微秒左右,即計(jì)數(shù)1680/1.085=1548次
			           temp=temp|0x80;       //(1550-250=1300,1550+250=1800),則該位是1
		     }  			            
	   a[i]=temp;	//將解碼出的字節(jié)值儲(chǔ)存在a[i]																					 
    }  				 		 
  if(a[2]=~a[3])  //驗(yàn)證鍵數(shù)據(jù)碼和其反碼是否相等,一般情況下不必驗(yàn)證用戶碼
	 return 1;     //解碼正確,返回1
}


void exter_int0() interrupt 0
{  EX0=0;
         //關(guān)閉外中斷0,不再接收二次紅外信號(hào)的中斷,只解碼當(dāng)前紅外信號(hào)
     TH0=0;      //定時(shí)器T0的高8位清0
	  TL0=0;      //定時(shí)器T0的低8位清0
	  TR0=1;	    //開啟定時(shí)器T0	 
	  while(IR==0);          //如果是低電平就等待,給引導(dǎo)碼低電平計(jì)時(shí)
	  TR0=0;                //關(guān)閉定時(shí)器T0     
	  LowTime=TH0*256+TL0;  //保存低電平時(shí)間
	  TH0=0;      //定時(shí)器T0的高8位清0
	  TL0=0;      //定時(shí)器T0的低8位清0
	  TR0=1;	    //開啟定時(shí)器T0
	  while(IR==1);  //如果是高電平就等待,給引導(dǎo)碼高電平計(jì)時(shí)
	  TR0=0;        //關(guān)閉定時(shí)器T0
	  HighTime=TH0*256+TL0;	//保存引導(dǎo)碼的高電平長度
     if((LowTime>7800)&&(LowTime<8800)&&(HighTime>3600)&&(HighTime<4700))
		 {
		    //如果是引導(dǎo)碼,就開始解碼,否則放棄,引導(dǎo)碼的低電平計(jì)時(shí)
	       //次數(shù)=9000us/1.085=8294, 判斷區(qū)間:8300-500=7800,8300+500=8800.
	      if(DeCode()==1); // 執(zhí)行遙控解碼功能
		 {// beep();
      
        switch(a[2])
      {
      case 0x07:
      {kg_flag=1;
       TR0=1;
       dealy(5); 
       TR1=1;
       TR0=0;
       zb_flag=1;
       number=0;
       m_flag=1;
       bright_t=225;
       pwm[0]=bright_t;  
       pwm[1]=bright_t;
       pwm[2]=bright_t;
       }
        //TR0=1;
        break;
         case 0x06:
       { //TR0=0;
        kg_flag=0;
        pwm[0]=0;  
        pwm[1]=0;
        pwm[2]=0;
       } break; 
       //TR0=1;
       case 0x04:
		{
		 if((kg_flag==1)&&(m_flag==0))
          {
       if((0<=number)&&(number<=14))
		 {
		  if(bright_t!=25)
          {
           bright_t=bright_t-10;
          }
       }
          }
      }    break;
        case 0x05:
		{
		 if((kg_flag==1)&&(m_flag==0))
          {
       if((0<=number)&&(number<=14))
		 {
		  if(bright_t!=255)
          {
           bright_t=bright_t+10;
          }
       }
          }
      }        break;
        case 0x09:
       {  //TR0=0;
          //TR1=1; 
         if(kg_flag==1)
        {pwm[0]=bright_t; 
          pwm[1]=0;
          pwm[2]=0;
         } 
       }   break; 
         //TR0=1;
        case 0x08:
       {if(kg_flag==1)
         {pwm[0]=0; 
          pwm[1]=bright_t;
          pwm[2]=0;}  
        }break;
         case 0x0A:
       {if(kg_flag==1)
         {pwm[0]=0; 
          pwm[1]=0;
          pwm[2]=bright_t;}  
        }break; 
      }
    }
	 }
       EX0=1;
  }
 
void main()
 {
  init();
  while(1);
 } 
void timer1()interrupt 1   
 {
  TH1=(65536-200)/256;
  TL1=(65536-200)%256;
  if(scw==1)
    {
      scw=0;
      pwm_r=pwm[0];
      pwm_g=pwm[1];
      pwm_b=pwm[2];
    }
  else
    {
      if(pwm_r>0){led_r=0;pwm_r--;}
      else{led_r=1;}
      if(pwm_g>0){led_g=0;pwm_g--;}
      else{led_g=1;}
      if(pwm_b>0){led_b=0;pwm_b--;}
      else{led_b=1;}
      scw++;
       
    }
        請(qǐng)高手指點(diǎn)下兩個(gè)定時(shí)器怎么回事,SCW的值加大,按遙控調(diào)光就延時(shí),怎么回事,T1不工作
  }
全部回復(fù)(32)
正序查看
倒序查看
2016-04-01 17:14
怎么沒人回復(fù)呢,研究了下現(xiàn)在調(diào)光還是沒解決,按亮度調(diào)度后就開始一直閃爍
0
回復(fù)
2016-04-01 21:43
@l184890962
怎么沒人回復(fù)呢,研究了下現(xiàn)在調(diào)光還是沒解決,按亮度調(diào)度后就開始一直閃爍
你的紅外解碼程序有問題,解碼程序不能一直在哪暫停。
0
回復(fù)
2016-04-02 09:14
@yueyunno1
你的紅外解碼程序有問題,解碼程序不能一直在哪暫停。
怎么修改指點(diǎn)下大師
0
回復(fù)
2016-04-02 15:01
@yueyunno1
你的紅外解碼程序有問題,解碼程序不能一直在哪暫停。
請(qǐng)教下怎么改下才有用
0
回復(fù)
2016-04-05 09:26
怎么就沒高人指點(diǎn)下呢
0
回復(fù)
2016-04-05 09:36
@l184890962
怎么就沒高人指點(diǎn)下呢
估計(jì)高人今兒忙~ 在等等哩~
0
回復(fù)
2016-04-05 17:12
@l184890962
怎么就沒高人指點(diǎn)下呢
你的程序邏輯有問題,在 timer1函數(shù)中首先執(zhí)行的是else函數(shù),導(dǎo)致pwm_r都沒有初始化
0
回復(fù)
2016-04-06 09:02
@黑夜公爵
你的程序邏輯有問題,在timer1函數(shù)中首先執(zhí)行的是else函數(shù),導(dǎo)致pwm_r都沒有初始化
T1沒有起作用,T1定時(shí)器函數(shù)刪了一樣改變SCW的值定時(shí)時(shí)間是T0定時(shí)器而不是T1
0
回復(fù)
l184890962
LV.2
10
2016-04-06 10:21
@黑夜公爵
你的程序邏輯有問題,在timer1函數(shù)中首先執(zhí)行的是else函數(shù),導(dǎo)致pwm_r都沒有初始化
有沒有高手教下怎么修改
0
回復(fù)
2016-04-06 12:34
@l184890962
T1沒有起作用,T1定時(shí)器函數(shù)刪了一樣改變SCW的值定時(shí)時(shí)間是T0定時(shí)器而不是T1
你的程序完整么?scw這個(gè)變量只有初始0,和在time1中被賦值變化,time1是個(gè)中斷函數(shù),但是主程序沒有中斷入口,代碼估計(jì)不是樓主自己寫的吧
0
回復(fù)
l184890962
LV.2
12
2016-04-06 14:43
@黑夜公爵
你的程序完整么?scw這個(gè)變量只有初始0,和在time1中被賦值變化,time1是個(gè)中斷函數(shù),但是主程序沒有中斷入口,代碼估計(jì)不是樓主自己寫的吧
代碼是自已寫的,我是初學(xué)者,主程序中不是初始化了嗎怎么沒有中斷入口不太明白,具體怎么改能指點(diǎn)下嗎
0
回復(fù)
jcpower
LV.4
13
2016-04-07 13:43
@l184890962
有沒有高手教下怎么修改
你現(xiàn)在就是高人了呀!
0
回復(fù)
l184890962
LV.2
14
2016-04-08 11:45
@黑夜公爵
你的程序完整么?scw這個(gè)變量只有初始0,和在time1中被賦值變化,time1是個(gè)中斷函數(shù),但是主程序沒有中斷入口,代碼估計(jì)不是樓主自己寫的吧
#include
#define uint unsigned int
#define uchar unsigned char
unsigned char a[4];    //儲(chǔ)存用戶碼、用戶反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼
unsigned int LowTime,HighTime; //儲(chǔ)存高、低電平的寬度 
sbit led_r=P1^0;
sbit led_g=P1^2;
sbit led_b=P1^4;
sbit IR=P3^2;
sbit BEEP = P2^3;
bit  kg_flag;
bit  zb_flag;
bit  m_flag;
bit  s_flag;
bit  f_flag;
uchar num,tl,tb,tm,tj;tt;
uchar number;
uchar scw;
uchar pwm_r,pwm_g,pwm_b;
uchar pwm[3];
uchar bright,bright_t;
uchar x[30]={0};
uchar type[30]={0};
void dealy(uint z)
{  uint x,y;	for(x=z;x>0;x--)
	for(y=110;y>0;y--);
}

void init()
 { 
  TMOD=0x01;
  TH0=0;         //定時(shí)器清0
  TL0=0;
  EA=1;
  ET0=1; 
 // IT0=1;
  EX0=1;
  //PT0=1;
  //PX0=0;
  TR0=1;
 
  TH1=(65536-1000)/256;
  TL1=(65536-1000)%256;
  ET1=1;
  EA=1; 
  //IT0=1;
  //EX0=1;
  PT1=1;
  //PX0=0;
  TR1=1;
 scw=0;
  tl=20;tb=100;tm=20;tj=100;
  kg_flag=0;
  zb_flag=0; m_flag=0;s_flag=0;
  f_flag=0;
  bright=255;bright_t=255;
  pwm[0]=0;  
  pwm[1]=0;
  pwm[2]=0; 
}

//void beep()		//蜂鳴器響一聲函數(shù)
//{
 // unsigned char i;
  //for (i=0;i<100;i++)
  // {
  // delay1ms();
   //BEEP=!BEEP;       //BEEP取反
   //} 
  // BEEP=1;           //關(guān)閉蜂鳴器
  // delay(250);       //延時(shí)     
//}

      
bit DeCode(void)        
{
    
   unsigned char  i,j;
	unsigned char temp;    //儲(chǔ)存解碼出的數(shù)據(jù)
	for(i=0;i<4;i++)      //連續(xù)讀取4個(gè)用戶碼和鍵數(shù)據(jù)碼
	  {
		 for(j=0;j<8;j++)  //每個(gè)碼有8位數(shù)字
			 {
	         temp=temp>>1;  //temp中的各數(shù)據(jù)位右移一位,因?yàn)橄茸x出的是高位數(shù)據(jù)									
			   TH0=0;         //定時(shí)器清0
			   TL0=0;         //定時(shí)器清0
			   TR0=1;         //開啟定時(shí)器T0
		      while(IR==0)   //如果是低電平就等待
	               ;	      //低電平計(jì)時(shí)
		  	   TR0=0;         //關(guān)閉定時(shí)器T0
			   LowTime=TH0*256+TL0;    //保存低電平寬度
			   TH0=0;         //定時(shí)器清0
			   TL0=0;         //定時(shí)器清0
			   TR0=1;         //開啟定時(shí)器T0
			   while(IR==1)   //如果是高電平就等待
			       ;			   
			   TR0=0;        //關(guān)閉定時(shí)器T0
			   HighTime=TH0*256+TL0;   //保存高電平寬度
			   if((LowTime<370)||(LowTime>640))
			  		    return 0;        //如果低電平長度不在合理范圍,則認(rèn)為出錯(cuò),停止解碼			
			   if((HighTime>420)&&(HighTime<620))   //如果高電平時(shí)間在560微秒左右,即計(jì)數(shù)560/1.085=516次
			           temp=temp&0x7f;       //(520-100=420, 520+100=620),則該位是0
			   if((HighTime>1300)&&(HighTime<1800)) //如果高電平時(shí)間在1680微秒左右,即計(jì)數(shù)1680/1.085=1548次
			           temp=temp|0x80;       //(1550-250=1300,1550+250=1800),則該位是1
		     }  			            
	   a[i]=temp;	//將解碼出的字節(jié)值儲(chǔ)存在a[i]																					 
    }  				 		 
  if(a[2]=~a[3])  //驗(yàn)證鍵數(shù)據(jù)碼和其反碼是否相等,一般情況下不必驗(yàn)證用戶碼
	 return 1;     //解碼正確,返回1
}


void exter_int0() interrupt 0 using 0
{  EX0=0;
         //關(guān)閉外中斷0,不再接收二次紅外信號(hào)的中斷,只解碼當(dāng)前紅外信號(hào)
     TH0=0;      //定時(shí)器T0的高8位清0
	  TL0=0;      //定時(shí)器T0的低8位清0
	  TR0=1;	    //開啟定時(shí)器T0	 
	  while(IR==0);          //如果是低電平就等待,給引導(dǎo)碼低電平計(jì)時(shí)
	  TR0=0;                //關(guān)閉定時(shí)器T0     
	  LowTime=TH0*256+TL0;  //保存低電平時(shí)間
	  TH0=0;      //定時(shí)器T0的高8位清0
	  TL0=0;      //定時(shí)器T0的低8位清0
	  TR0=1;
     	    //開啟定時(shí)器T0
	  while(IR==1);  //如果是高電平就等待,給引導(dǎo)碼高電平計(jì)時(shí)
	  TR0=0;        //關(guān)閉定時(shí)器T0
	  HighTime=TH0*256+TL0;	//保存引導(dǎo)碼的高電平長度
     if((LowTime>7800)&&(LowTime<8800)&&(HighTime>3600)&&(HighTime<4700))
		 {
		    //如果是引導(dǎo)碼,就開始解碼,否則放棄,引導(dǎo)碼的低電平計(jì)時(shí)
	       //次數(shù)=9000us/1.085=8294, 判斷區(qū)間:8300-500=7800,8300+500=8800.
	      if(DeCode()==1);// 執(zhí)行遙控解碼功能
			 {// beep();
			   //TR1=0;
			   //TH1=(65536-1000)/256;
			   //TL1=(65536-1000)%256; 
			    //TR1=1; 
      
        switch(a[2])
      {
      case 0x07:
      {kg_flag=1;
       
       	
       f_flag=0;
       s_flag=0;
       zb_flag=0;
       number=0;
       m_flag=0;
       //bright_t=225;
       pwm[0]=bright_t;  
       pwm[1]=bright_t;
       pwm[2]=bright_t;
       
       }
        
        break;
        
         case 0x06:
       { 
        kg_flag=0;
        pwm[0]=0;  
        pwm[1]=0;
        pwm[2]=0;
       } break; 
       
       case 0x04:
		{
		 if((kg_flag==1)&&(m_flag==0)&&
         (s_flag==0)&&
         (zb_flag==0)&&(f_flag==0))
          {
          if(bright_t!=25)
          {
           bright_t=bright_t-10;
          }
           
          }
      }    break;
        case 0x05:
		{
		 if((kg_flag==1)&&(m_flag==0)&&
         (s_flag==0)&&
         (zb_flag==0)&&(f_flag==0))
          {
           if(bright_t!=255)
          {
           bright_t=bright_t+10;
          }
           
          }
      }        break;
        case 0x09:
       {  
           
         if(kg_flag==1)
        {pwm[0]=bright_t; 
          pwm[1]=0;
          pwm[2]=0;
         } 
       }   break; 
         
        case 0x08:
       {if(kg_flag==1)
         {pwm[0]=0; 
          pwm[1]=bright_t;
          pwm[2]=0;}  
        }break;
         case 0x0A:
       {if(kg_flag==1)
         {pwm[0]=0; 
          pwm[1]=0;
          pwm[2]=bright_t;}  
        }break; 
      }
    }
	 }
       EX0=1;
  }
 
void main()
 {
  init();
  while(1);
 } 
void timer1()interrupt 3 using 1  
 {
  
   
   TH1=(65536-1000)/256;
   TL1=(65536-1000)%256; 
     
    scw++;  
  if(scw==255)
    { 
      scw=0;
      
      pwm_r=pwm[0];
      pwm_g=pwm[1];
      pwm_b=pwm[2];
      
    }
  else
    {
      if(pwm_r>0){led_r=0;pwm_r--;}
      else{led_r=1;}
      if(pwm_g>0){led_g=0;pwm_g--;}
      else{led_g=1;}
      if(pwm_b>0){led_b=0;pwm_b--;}
      else{led_b=1;}                       這個(gè)調(diào)了下T1工作了但還是不能調(diào)光,調(diào)光部分怎么寫請(qǐng)高手指點(diǎn)
0
回復(fù)
l184890962
LV.2
15
2016-04-08 13:49
@l184890962
#include#defineuintunsignedint#defineucharunsignedcharunsignedchara[4];//儲(chǔ)存用戶碼、用戶反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼unsignedintLowTime,HighTime;//儲(chǔ)存高、低電平的寬度sbitled_r=P1^0;sbitled_g=P1^2;sbitled_b=P1^4;sbitIR=P3^2;sbitBEEP=P2^3;bitkg_flag;bitzb_flag;bitm_flag;bits_flag;bitf_flag;ucharnum,tl,tb,tm,tj;tt;ucharnumber;ucharscw;ucharpwm_r,pwm_g,pwm_b;ucharpwm[3];ucharbright,bright_t;ucharx[30]={0};uchartype[30]={0};voiddealy(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit(){TMOD=0x01;TH0=0;//定時(shí)器清0TL0=0;EA=1;ET0=1;//IT0=1;EX0=1;//PT0=1;//PX0=0;TR0=1;TH1=(65536-1000)/256;TL1=(65536-1000)%256;ET1=1;EA=1;//IT0=1;//EX0=1;PT1=1;//PX0=0;TR1=1;scw=0;tl=20;tb=100;tm=20;tj=100;kg_flag=0;zb_flag=0;m_flag=0;s_flag=0;f_flag=0;bright=255;bright_t=255;pwm[0]=0;pwm[1]=0;pwm[2]=0;}//voidbeep()//蜂鳴器響一聲函數(shù)//{//unsignedchari;//for(i=0;i420)&&(HighTime1300)&&(HighTime7800)&&(LowTime3600)&&(HighTime0){led_r=0;pwm_r--;}else{led_r=1;}if(pwm_g>0){led_g=0;pwm_g--;}else{led_g=1;}if(pwm_b>0){led_b=0;pwm_b--;}else{led_b=1;}這個(gè)調(diào)了下T1工作了但還是不能調(diào)光,調(diào)光部分怎么寫請(qǐng)高手指點(diǎn)
怎么沒有一個(gè)高手解答下
0
回復(fù)
jcpower
LV.4
16
2016-04-08 13:51
@l184890962
#include#defineuintunsignedint#defineucharunsignedcharunsignedchara[4];//儲(chǔ)存用戶碼、用戶反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼unsignedintLowTime,HighTime;//儲(chǔ)存高、低電平的寬度sbitled_r=P1^0;sbitled_g=P1^2;sbitled_b=P1^4;sbitIR=P3^2;sbitBEEP=P2^3;bitkg_flag;bitzb_flag;bitm_flag;bits_flag;bitf_flag;ucharnum,tl,tb,tm,tj;tt;ucharnumber;ucharscw;ucharpwm_r,pwm_g,pwm_b;ucharpwm[3];ucharbright,bright_t;ucharx[30]={0};uchartype[30]={0};voiddealy(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit(){TMOD=0x01;TH0=0;//定時(shí)器清0TL0=0;EA=1;ET0=1;//IT0=1;EX0=1;//PT0=1;//PX0=0;TR0=1;TH1=(65536-1000)/256;TL1=(65536-1000)%256;ET1=1;EA=1;//IT0=1;//EX0=1;PT1=1;//PX0=0;TR1=1;scw=0;tl=20;tb=100;tm=20;tj=100;kg_flag=0;zb_flag=0;m_flag=0;s_flag=0;f_flag=0;bright=255;bright_t=255;pwm[0]=0;pwm[1]=0;pwm[2]=0;}//voidbeep()//蜂鳴器響一聲函數(shù)//{//unsignedchari;//for(i=0;i420)&&(HighTime1300)&&(HighTime7800)&&(LowTime3600)&&(HighTime0){led_r=0;pwm_r--;}else{led_r=1;}if(pwm_g>0){led_g=0;pwm_g--;}else{led_g=1;}if(pwm_b>0){led_b=0;pwm_b--;}else{led_b=1;}這個(gè)調(diào)了下T1工作了但還是不能調(diào)光,調(diào)光部分怎么寫請(qǐng)高手指點(diǎn)

首先可以肯定,沒人看你的代碼

你的PWM調(diào)光原理是什么?你可以用一個(gè)給定數(shù)據(jù)調(diào)光,也就是程序自動(dòng)慢慢調(diào)節(jié),用于驗(yàn)證你的調(diào)光程序與硬件是否OK

其次你可以通過調(diào)試或是串口方式讀出接收到的代碼是否正確,接收到的代碼是否能得到執(zhí)行?

0
回復(fù)
l184890962
LV.2
17
2016-04-08 14:51
@l184890962
#include#defineuintunsignedint#defineucharunsignedcharunsignedchara[4];//儲(chǔ)存用戶碼、用戶反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼unsignedintLowTime,HighTime;//儲(chǔ)存高、低電平的寬度sbitled_r=P1^0;sbitled_g=P1^2;sbitled_b=P1^4;sbitIR=P3^2;sbitBEEP=P2^3;bitkg_flag;bitzb_flag;bitm_flag;bits_flag;bitf_flag;ucharnum,tl,tb,tm,tj;tt;ucharnumber;ucharscw;ucharpwm_r,pwm_g,pwm_b;ucharpwm[3];ucharbright,bright_t;ucharx[30]={0};uchartype[30]={0};voiddealy(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit(){TMOD=0x01;TH0=0;//定時(shí)器清0TL0=0;EA=1;ET0=1;//IT0=1;EX0=1;//PT0=1;//PX0=0;TR0=1;TH1=(65536-1000)/256;TL1=(65536-1000)%256;ET1=1;EA=1;//IT0=1;//EX0=1;PT1=1;//PX0=0;TR1=1;scw=0;tl=20;tb=100;tm=20;tj=100;kg_flag=0;zb_flag=0;m_flag=0;s_flag=0;f_flag=0;bright=255;bright_t=255;pwm[0]=0;pwm[1]=0;pwm[2]=0;}//voidbeep()//蜂鳴器響一聲函數(shù)//{//unsignedchari;//for(i=0;i420)&&(HighTime1300)&&(HighTime7800)&&(LowTime3600)&&(HighTime0){led_r=0;pwm_r--;}else{led_r=1;}if(pwm_g>0){led_g=0;pwm_g--;}else{led_g=1;}if(pwm_b>0){led_b=0;pwm_b--;}else{led_b=1;}這個(gè)調(diào)了下T1工作了但還是不能調(diào)光,調(diào)光部分怎么寫請(qǐng)高手指點(diǎn)
看來在這里請(qǐng)教是浪費(fèi)時(shí)間
0
回復(fù)
2016-04-08 17:19
@l184890962
看來在這里請(qǐng)教是浪費(fèi)時(shí)間
那么多工程師在回答問題,看來沒有找到好的方案呀,不過既然是請(qǐng)教,當(dāng)然需要耐心一些嘍。
0
回復(fù)
l184890962
LV.2
19
2016-04-08 17:24
@電源網(wǎng)-天邊
那么多工程師在回答問題,看來沒有找到好的方案呀,不過既然是請(qǐng)教,當(dāng)然需要耐心一些嘍。
問了這么多天沒有誰說點(diǎn)實(shí)際的,指點(diǎn)代碼哪里有問題改哪里這才是關(guān)鍵
0
回復(fù)
l184890962
LV.2
20
2016-04-08 17:27
@jcpower
首先可以肯定,沒人看你的代碼你的PWM調(diào)光原理是什么?你可以用一個(gè)給定數(shù)據(jù)調(diào)光,也就是程序自動(dòng)慢慢調(diào)節(jié),用于驗(yàn)證你的調(diào)光程序與硬件是否OK其次你可以通過調(diào)試或是串口方式讀出接收到的代碼是否正確,接收到的代碼是否能得到執(zhí)行?
調(diào)光時(shí)一直閃,按調(diào)光健后,要再按下其它顏色鍵再會(huì)變暗,而且一直閃
0
回復(fù)
2016-04-12 09:10

大概把你的程序看完了,主要問題還是在解碼那部分 ,算沒算 完全解碼一次,你在EX0等待了多久時(shí)間  如果這段時(shí)間 有TIME1中斷觸發(fā),會(huì)跳出來么?不知道你的PWM輸出頻率多少,猜測(cè)問題應(yīng)該是這里。

解碼的方式 最好是中斷查詢的方式   不怎么占用時(shí)間  

0
回復(fù)
l184890962
LV.2
22
2016-04-12 09:58
@xiaoxiong1988
大概把你的程序看完了,主要問題還是在解碼那部分,算沒算完全解碼一次,你在EX0等待了多久時(shí)間 如果這段時(shí)間有TIME1中斷觸發(fā),會(huì)跳出來么?不知道你的PWM輸出頻率多少,猜測(cè)問題應(yīng)該是這里。解碼的方式最好是中斷查詢的方式 不怎么占用時(shí)間 
沒有PWM,51模擬pwm,一個(gè)周期255MS,中斷查詢方式解碼怎么寫
0
回復(fù)
daihui713
LV.6
23
2016-04-14 18:18
@l184890962
沒有PWM,51模擬pwm,一個(gè)周期255MS,中斷查詢方式解碼怎么寫

中斷查詢解碼————意思就是  邊解碼  邊PWM循環(huán),   例如:以50us的時(shí)基礎(chǔ)作為定時(shí)中斷, 時(shí)間一到就去中斷里面解碼, 以累計(jì)的方式判斷什么引導(dǎo)碼 用戶碼 數(shù)據(jù)碼 反碼等,  中斷函數(shù)里面最多也就是++,判斷,循環(huán)存放之類的語句,占用不了多少時(shí)間,最多十幾u(yù)S就退出中斷了,這樣就不用一直在那里等電平的變化。退出后又接著繼續(xù)主函數(shù)中的PWM循環(huán),十幾US的執(zhí)行時(shí)間根本不影響PWM調(diào)光的視覺暫留效應(yīng),這樣就看不到閃。

 

給你個(gè)參考——利用定時(shí)器的固定時(shí)基來查詢紅外脈沖的寬度,從而進(jìn)行解碼!

可以自己去分析,至于中間的高電平是多少時(shí)間,低電平是多少時(shí)間都不用去管,只需計(jì)算兩個(gè)下降沿間隔時(shí)間就可以判斷0和1,同時(shí)也可以判斷是否是引導(dǎo)碼,或是結(jié)束碼,或是連續(xù)碼

定時(shí)器查看時(shí)間設(shè)置為125us,執(zhí)行定時(shí)器中斷程序一次

void Timer0 interrupt 1()                                                            

{      

        irTime++;   

        if(irTime==240) // ir解碼后碼值存放時(shí)間, 240*125us = 30ms   

       {

             irTime--;  

             codeCnt=0x3f;

       }       

       if(IR_IO)   Irprot_LastState=1; // 記錄IO狀態(tài)   

       else if(Irprot_LastState)       // 有下降沿 

       {      

              Irprot_LastState = 0;        // 下降沿后IO狀態(tài)記錄為0      

              if(irTime<24)                // 小于24*125us=3ms的間隔才進(jìn)行處理      

             {         

                    codeCnt++;  

                    codeCnt &= 0x1f;         

                    IR_data[codeCnt>>3] <<= 1;       

                    if( irTime>15)   

                    IR_data[codeCnt>>3]++;  // 大于15*125us=1.875ms的間隔為數(shù)據(jù)1      

             }    

             irTime = 0;                  // 下降沿處理完成,將時(shí)間清0   

        }

}

 

0
回復(fù)
l184890962
LV.2
24
2016-04-21 09:51
@daihui713
中斷查詢解碼————意思就是 邊解碼 邊PWM循環(huán),  例如:以50us的時(shí)基礎(chǔ)作為定時(shí)中斷,時(shí)間一到就去中斷里面解碼,以累計(jì)的方式判斷什么引導(dǎo)碼用戶碼數(shù)據(jù)碼反碼等, 中斷函數(shù)里面最多也就是++,判斷,循環(huán)存放之類的語句,占用不了多少時(shí)間,最多十幾u(yù)S就退出中斷了,這樣就不用一直在那里等電平的變化。退出后又接著繼續(xù)主函數(shù)中的PWM循環(huán),十幾US的執(zhí)行時(shí)間根本不影響PWM調(diào)光的視覺暫留效應(yīng),這樣就看不到閃。 給你個(gè)參考——利用定時(shí)器的固定時(shí)基來查詢紅外脈沖的寬度,從而進(jìn)行解碼!可以自己去分析,至于中間的高電平是多少時(shí)間,低電平是多少時(shí)間都不用去管,只需計(jì)算兩個(gè)下降沿間隔時(shí)間就可以判斷0和1,同時(shí)也可以判斷是否是引導(dǎo)碼,或是結(jié)束碼,或是連續(xù)碼定時(shí)器查看時(shí)間設(shè)置為125us,執(zhí)行定時(shí)器中斷程序一次voidTimer0interrupt1()                                        {           irTime++;         if(irTime==240)//ir解碼后碼值存放時(shí)間,240*125us=30ms         {            irTime--;              codeCnt=0x3f;      }             if(IR_IO)  Irprot_LastState=1;//記錄IO狀態(tài)        elseif(Irprot_LastState)    //有下降沿       {                 Irprot_LastState=0;      //下降沿后IO狀態(tài)記錄為0                 if(irTime>3]>3]++;  //大于15*125us=1.875ms的間隔為數(shù)據(jù)1                }              irTime=0;            //下降沿處理完成,將時(shí)間清0         }} 
意思是不是只要用一個(gè)定時(shí)器就可以解碼和PWM控制
0
回復(fù)
jcpower
LV.4
25
2016-04-24 10:22
@l184890962
意思是不是只要用一個(gè)定時(shí)器就可以解碼和PWM控制

代碼有什么問題?

首先你需要保證硬件沒問題,你是沒用心看我16樓的指點(diǎn)。

如果硬件有問題,你什么調(diào)代碼有用嗎???????

現(xiàn)在大把帶PWM片子,為何不用片內(nèi)PWM?

用片內(nèi)PWM正常的話,那就是傳輸數(shù)據(jù)的問題,查起來也方便。

0
回復(fù)
l457902798
LV.2
26
2016-04-25 08:57
@jcpower
代碼有什么問題?首先你需要保證硬件沒問題,你是沒用心看我16樓的指點(diǎn)。如果硬件有問題,你什么調(diào)代碼有用嗎???????現(xiàn)在大把帶PWM片子,為何不用片內(nèi)PWM?用片內(nèi)PWM正常的話,那就是傳輸數(shù)據(jù)的問題,查起來也方便。
都說了硬件沒有問題,程序問題,做產(chǎn)品要考慮成本問題不是做的玩
0
回復(fù)
jcpower
LV.4
27
2016-04-25 17:49
@l457902798
都說了硬件沒有問題,程序問題,做產(chǎn)品要考慮成本問題不是做的玩

好一個(gè)硬件沒問題。

通常出問題也只在一小部份,也不用把所有程序都貼出來。

現(xiàn)在你都沒搞清楚是收不到數(shù)還是收到的數(shù)據(jù)不正常?還是加載時(shí)不正常?

正常情況下。如你要控制50%的占空比,那你出問題你就要找收到的是不是50%占空比數(shù)據(jù)?

是加載過程中閃還是一直閃?

做產(chǎn)品是要考慮成本,但現(xiàn)在帶PWM的片子也1塊多,你要用幾毛的片子,那我也只能呵呵了?。。?

0
回復(fù)
jcpower
LV.4
28
2016-04-25 17:51
@jcpower
好一個(gè)硬件沒問題。通常出問題也只在一小部份,也不用把所有程序都貼出來?,F(xiàn)在你都沒搞清楚是收不到數(shù)還是收到的數(shù)據(jù)不正常?還是加載時(shí)不正常?正常情況下。如你要控制50%的占空比,那你出問題你就要找收到的是不是50%占空比數(shù)據(jù)?是加載過程中閃還是一直閃?做產(chǎn)品是要考慮成本,但現(xiàn)在帶PWM的片子也1塊多,你要用幾毛的片子,那我也只能呵呵了!?。?/span>

如果沒有加載數(shù)據(jù),就一直閃???那不是硬件問題?????

就算你用的軟PWM出問題,也歸為硬件問題,明白不?

0
回復(fù)
2016-04-26 11:15
@l184890962
意思是不是只要用一個(gè)定時(shí)器就可以解碼和PWM控制

一個(gè)定時(shí)器  邊解碼 邊輸出PWM 

如:設(shè)定一個(gè)基準(zhǔn)時(shí)間50us  中斷  處理解碼和PWM  

調(diào)試時(shí)  先把PWM屏蔽  測(cè)試解碼是否正常   然后把解碼屏蔽  測(cè)試PWM是否正常   然后兩個(gè)都不屏蔽測(cè)試 是否正常   

調(diào)程序 要有耐心   一步一步的測(cè)試   每個(gè)人寫程序的思路是不一樣的    只要你的思路正確了   怎么都能寫出功能完整的程序  

類似這種的 最好是靠定時(shí)中斷去處理    外部觸發(fā)中斷  需要速度跑出中斷   不然很容易中斷嵌套   

0
回復(fù)
2016-04-26 11:18
@jcpower
[圖片]如果沒有加載數(shù)據(jù),就一直閃???那不是硬件問題?????就算你用的軟PWM出問題,也歸為硬件問題,明白不?
閃的問題  首先要確定你的PWM 輸出沒有問題   最好用示波器去看PWM 波形  如果 不調(diào)光的時(shí)候PWM 正常  調(diào)光的時(shí)候 PWM有問題燈閃  那你說是不是解碼程序和PWM程序  在時(shí)間上有沖突呢?
0
回復(fù)
2016-04-26 11:20
@l184890962
意思是不是只要用一個(gè)定時(shí)器就可以解碼和PWM控制

你列出的程序  沒多少人會(huì)耐心的看完的  寫程序的習(xí)慣不好   看著挺費(fèi)勁   為什么不在每個(gè)函數(shù)之前 標(biāo)一下 函數(shù)功能?

0
回復(fù)
發(fā)