性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

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

做led控制器碰到個問題

大家好,我是剛進(jìn)入led控制器行業(yè),以前做的都是硬件多,現(xiàn)在公司要做led控制器,我參考別人板子做了個主控制,后面是再加驅(qū)動板子.軟件調(diào)試時候,仿真p2,p0口都看到有電平信號出來了,可我燒進(jìn)51后,再測試接口電平,就一直高電平,不知道怎么回事.是不是我軟件不行,高手請幫看下軟件到底對不對?通過給245信號,再經(jīng)過595放大驅(qū)動led
謝謝
做了好多天了,老調(diào)試不來,很希望能得到高手指點(diǎn)下
全部回復(fù)(9)
正序查看
倒序查看
2008-07-08 00:05
不知道怎么回事,老上傳不了
這么把程序發(fā)上去好了

#include
#include ///////調(diào)用絕對地址訪問函數(shù)////
#include ///////
#define uchar unsigned char
#define uint  unsigned int////內(nèi)部函數(shù)/////
#define hao 0xc0
sbit    oe   =P2^7;
sbit    rck  =P2^6;
sbit    sck  =P2^5;
sbit    datar=P2^4;

sbit    wog  =P3^5;
sbit    led  =P0^7;
sbit    s23   =P0^5;
sbit    s22   =P0^4;
sbit    s21   =P0^3;
sbit    s24   =P0^6;
sbit    SDA  =P2^1;
sbit    SCL  =P2^0;//////用到兩個字節(jié),第一個字節(jié)用來放模式,第2個字節(jié)用來放速度///不用也算了////////
bit input=0;
bit power=1;
uchar waita,timea,hui,liang,timeb;
uchar color,color1,mode,speed,speed1;
uchar s220,s221,s230,s231,s210,s211,s240,s241,mode; //key parmerter
bit addr,ishui,istype,istime,iscolor;
uchar huidu,speeddu,colordu,address,type;
uchar  code  spd[]={8,15,30,60,120,240,240};
uchar  code  spd1[]={2,5,13,19,28,45,90};
#define AddWr 0xa0 /*器件地址選擇及寫標(biāo)志*/
#define AddRd 0xa1 /*器件地址選擇及讀標(biāo)志*/
////////////////////////////////////////////////
void mDelay(uchar j)
{ uint i;
for(;j>0;j--)
{
for(i=0;i<125;i++)
{;}
}
}
/*發(fā)送起始條件*/
void Start(void)        /*起始條件*/
{
        SDA=1;
        SCL=1;
        _nop_ ();
        _nop_ ();
        _nop_ ();
        _nop_ ();
        SDA=0;
        _nop_ ();
        _nop_ ();
        _nop_ ();
        _nop_ ();
}
void Stop(void) /*停止條件*/
{
        SDA=0;
        SCL=1;
        _nop_ ();
        _nop_ ();
        _nop_ ();
        _nop_ ();
        SDA=1;
        _nop_ ();
        _nop_ ();
        _nop_ ();
        _nop_ ();
}
void Ack(void)  /*應(yīng)答位*/
{
        SDA=0;
        _nop_ ();
        _nop_ ();
        _nop_ ();
        _nop_ ();
        SCL=1;
        _nop_ ();
        _nop_ ();
        _nop_ ();
        _nop_ ();
        SCL=0;
}
void  NoAck(void)       /*反向應(yīng)答位*/
{
        SDA=1;
        _nop_ ();
        _nop_ ();
        _nop_ ();
        _nop_ ();
        SCL=1;
        _nop_ ();
        _nop_ ();
        _nop_ ();
        _nop_ ();
        SCL=0;
}
void Send(uchar Data)   /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/
{
        uchar BitCounter=8;       /*位數(shù)控制*/
        uchar temp;     /*中間變量控制*/
        do
        {
           temp=Data;
           SCL=0;
           _nop_ ();
           _nop_ ();
           _nop_ ();
           _nop_ ();
           if((temp&0x80)==0x80)/* 如果最高位是1*///////
                SDA=1;
           else
                SDA=0;
           SCL=1;//////////////////////發(fā)送準(zhǔn)備結(jié)束
           temp=Data<<1;        /*RLC*///////下一個字節(jié)
           Data=temp;
           BitCounter--;////////////
        }while(BitCounter);
         SCL=0;//////結(jié)束發(fā)送/////
}
uchar Read(void) /*讀一個字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/
{
        uchar temp=0;
        uchar temp1=0;
        uchar BitCounter=8;
        SDA=1;
        do{
          SCL=0;
          _nop_ ();
          _nop_ ();
          _nop_ ();
          _nop_ ();
          SCL=1;
          _nop_ ();
          _nop_ ();
          _nop_ ();
          _nop_ ();
          if(SDA)       /*如果Sda=1;*/
                temp=temp|0x01;  /*temp的最低位置1*/
          else
                temp=temp&0xfe;  /*否則temp的最低位清0*/
          if(BitCounter-1)
          {   temp1=temp<<1;
              temp=temp1;
          }
          BitCounter--;
        }while(BitCounter);
        return(temp);
}
void WrToROM(uchar Data[],uchar Address,uchar Num)///////////////寫數(shù)據(jù)到ROM中
{
     uchar i=0;
     uchar *PData;/////指針類
     PData=Data;
     Start();        
     Send(0xa0);   /////發(fā)送
     Ack();/////應(yīng)答
     Send(Address);  //////發(fā)送數(shù)據(jù)地址
     Ack();
     for(i=0;i     {
        Send(*(PData+i));
        Ack();
     }
     Stop();
}
void  RdFromROM(uchar Data[],uchar Address,uchar Num)////////從ROM中讀取
{
     uchar i=0;
     uchar *PData;
     PData=Data;
     for(i=0;i     {
        Start();
        Send(0xa0);///////////先寫后讀
        Ack();
        Send(Address+i);
        Ack();
        Start();
        Send(0xa1);
        Ack();
        *(PData+i)=Read();
        SCL=0;
        NoAck();
        Stop();
   }
}
//////////////////////////////////////
void   yanse0()
{
switch(color)
{
   case   0:
              datar=0;
              sck=0;
              sck=1;
              datar=1;
              sck=0;
              sck=1;
              datar=1;
              sck=0;
              sck=1;

              sck=0;
              sck=1;
              break;
   case   1:
              datar=1;
              sck=0;
              sck=1;
              datar=0;
              sck=0;
              sck=1;
              datar=1;
              sck=0;
              sck=1;

              sck=0;
              sck=1;
              break;
   case   2:
              datar=1;
              sck=0;
              sck=1;
              datar=1;
              sck=0;
              sck=1;
              datar=0;
              sck=0;
              sck=1;

              sck=0;
              sck=1;
              break;
  case   3:
              datar=0;
              sck=0;
              sck=1;
              datar=0;
              sck=0;
              sck=1;
              datar=1;
              sck=0;
              sck=1;

              sck=0;
              sck=1;
              break;
  case   4:
              datar=0;
              sck=0;
              sck=1;
              datar=1;
              sck=0;
              sck=1;
              datar=0;
              sck=0;
              sck=1;

              sck=0;
              sck=1;
              break;
   case   5:
              datar=1;
              sck=0;
              sck=1;
              datar=0;
              sck=0;
              sck=1;
              datar=0;
              sck=0;
              sck=1;

              sck=0;
              sck=1;
              break;
   case   6:
              datar=0;
              sck=0;
              sck=1;
              datar=0;
              sck=0;
              sck=1;
              datar=0;
              sck=0;
              sck=1;

              sck=0;
              sck=1;
              break;
  case   7:
              datar=1;
              sck=0;
              sck=1;
              datar=1;
              sck=0;
              sck=1;
              datar=1;
              sck=0;
              sck=1;

              sck=0;
              sck=1;
              break;
   default:
              break;
   }
}
////////////////////////////////////////////////
void comm() interrupt 4 using 3
{
if(RI)
{
    RI=0;
    if(addr==0)
   {
    if((address==SBUF)|(SBUF==0XFF))
     {
      istype=1;
      ishui=0;
      istime=0;
      addr=1;
     }
   }
   else if(istype)//////接收模式數(shù)據(jù)
   {
    istype=0;
    ishui=1;
    type=SBUF;
   }
   else if(ishui) //////接收灰度數(shù)據(jù)
   {
    ishui=0;
    istime=1;
    huidu=SBUF;
   }
   else if(istime)///////接收時間數(shù)據(jù)
   {
    istime=0;
    speeddu=SBUF;
addr=0;
    led=1;
input=1;
   }
}
else TI=0;
}
////////////////////////////////////////////////
void time0() interrupt 1 using 1
{
  timea++;
  /////////////scan key board begin//////////////
  if((s23==0)&(s230==0)&(s231==0))
  {
    s230=1;
  }
  else if((s23==0)&(s230==1)&(s231==0))
  {
    s230=0;
    s231=1;
  }
  else if((s23==1)&(s230==0)&(s231==1))
  {
   s231=0;
   mode=0;
   input=1;
   }
   //////////////key s22/////////////////////////////
  if((s22==0)&(s220==0)&(s221==0))
  {
    s220=1;
  }
  else if((s22==0)&(s220==1)&(s221==0))
  {
    s220=0;
    s221=1;
  }
  else if((s22==1)&(s220==0)&(s221==1))
  {
   s221=0;
   mode=1;
   input=1;
   }
if((s21==0)&(s210==0)&(s211==0))
  {
    s210=1;
  }
  else if((s21==0)&(s210==1)&(s211==0))
  {
    s210=0;
    s211=1;
  }
  else if((s21==1)&(s210==0)&(s211==1))
  {
   s211=0;
   mode=2;
   input=1;
   }
////////////////////////////////////////
if((s24==0)&(s240==0)&(s241==0))
  {
    s240=1;
  }
  else if((s24==0)&(s240==1)&(s241==0))
  {
    s240=0;
    s241=1;
  }
  else if((s24==1)&(s240==0)&(s241==1))
  {
   s241=0;
   mode=3;
   input=1;
   }
   /////////////scan key board end/////////////////////////
  if(timea>50)
   {
    waita++;
    timeb++;
    if(timeb>100)
    {
    timeb=0;
    led=~led;
    }
    timea=0;
   }
  liang--;
  if(liang>hui)  oe=1;
  else oe=0;
  if(liang==0)  liang=50;

  TH0  = 0Xfd; //5MS
  TL0  = 0x00;
}
/////////////////////////////
main()
{
  uchar a,b,c;
  TMOD=0x20;  //
  ET0 = 1;     // 允許定時器0中斷
  ES=1;         //默認(rèn)允許串口中斷
  SCON=0X50;    //
  PCON=0X80;    //
  TH0 =0Xc0;    //5MS
  TL0 =0x00;    //定時0設(shè)定初值
  TH1=0Xfb;
  TR0 = 1;      //開定時器1
  TR1 =1 ;      //開定時器1
  IT0=1;        //外部中斷0為脈沖觸發(fā)方式(下降沿)
  EX0=1;        //禁 止外部中斷0;
  WrToROM( );
  RdFromROM();  ////讀取該分控的地址
  ////address=0x04;
  IP  =0X10;    //串行口為高優(yōu)先級中斷
  EA  = 1;      //開總中斷
  input=0;
  color=1;
  type=0;
  speed=50;     //分控預(yù)先設(shè)置的默認(rèn)速度
  color=2;      //分控預(yù)先設(shè)置的顏色
  hui=50;       //分控預(yù)先設(shè)置的灰度數(shù)
  addr=0;        ////默認(rèn)的分控是拒絕接受任何數(shù)據(jù)的
///////////////////////////////////////////////
  for(;;)
   {
  ll:
       input=0;
   //type++;
       switch(type)
      {
        case 0://////0~~6為6種單色
         hui=huidu;
         speed=speeddu;
color=0;
for(a=0;a<4;a++)
{
         yanse0();
             }
rck=0;
             rck=1;
     do{
           if(input==1)  goto ll;
           }
         while(waita             waita=0;

             break;
  case 1:
         hui=huidu;
         speed=speeddu;
color=1;
for(a=0;a<4;a++)
{
     yanse0();
}
rck=0;
             rck=1;
     do{
           if(input==1)  goto ll;
           }
         while(waita             waita=0;
             break;
   case 2:
         hui=huidu;
         speed=speeddu;
         color=2;
for(a=0;a<4;a++)
{
     yanse0();
}
rck=0;
             rck=1;
     do{
           if(input==1)  goto ll;
           }
         while(waita             waita=0;
             break;
   case 3:
     hui=huidu;
         speed=speeddu;
         color=3;
for(a=0;a<4;a++)
{
         yanse0();
}
rck=0;
             rck=1;
         do{
         if(input==1)  goto ll;
           }
         while(waita             waita=0;
             break;
   case 4:
     hui=huidu;
         speed=speeddu;
         color=4;
for(a=0;a<4;a++)
{
     yanse0();
}
rck=0;
             rck=1;
     do{
         if(input==1)  goto ll;
           }
         while(waita             waita=0;
             break;
   case 5:
     hui=huidu;
         speed=speeddu;
         color=5;
for(a=0;a<4;a++)
{
     yanse0();
}
rck=0;
             rck=1;
     do{
           if(input==1)  goto ll;
           }
         while(waita             waita=0;
             break;
   case 6:
     hui=huidu;
         speed=speeddu;
         color=6;
for(a=0;a<4;a++)
{
         yanse0();
}
rck=0;
             rck=1;
     do{
           if(input==1)  goto ll;
           }
         while(waita             waita=0;
             break;
   case 7:
     hui=huidu;
         speed=speeddu;
         color=7;
for(a=0;a<4;a++)
{
         yanse0();
}
             rck=0;
             rck=1;
     do{
           if(input==1)  goto ll;
           }
         while(waita             waita=0;
             break;
  case 8://漸變
         speed=speeddu;
for(a=0;a<7;a++)
{
  color=a;
              for(b=0;b<4;b++)
  {
          yanse0();
  }
              rck=0;
              rck=1;
  for(c=0;c<50;c++)
  {
   hui=c;
       do{
             if(input==1)  goto ll;
            }
           while(waita               waita=0;
               if(input==1)  goto ll;
  }
  for(c=50;c>0;c--)
  {
   hui=c;
       do{
             if(input==1)  goto ll;
            }
           while(waita               waita=0;
  }
         if(input==1)  goto ll;
}
break;
  default:
         break;
      }

}
}
0
回復(fù)
2008-07-08 00:12
@zhongyuqiang
不知道怎么回事,老上傳不了這么把程序發(fā)上去好了#include#include///////調(diào)用絕對地址訪問函數(shù)////#include///////#defineucharunsignedchar#defineuint  unsignedint////內(nèi)部函數(shù)/////#definehao0xc0sbit    oe  =P2^7;sbit    rck  =P2^6;sbit    sck  =P2^5;sbit    datar=P2^4;sbit    wog  =P3^5;sbit    led  =P0^7;sbit    s23  =P0^5;sbit    s22  =P0^4;sbit    s21  =P0^3;sbit    s24  =P0^6;sbit    SDA  =P2^1;sbit    SCL  =P2^0;//////用到兩個字節(jié),第一個字節(jié)用來放模式,第2個字節(jié)用來放速度///不用也算了////////bitinput=0;bitpower=1;ucharwaita,timea,hui,liang,timeb;ucharcolor,color1,mode,speed,speed1;uchars220,s221,s230,s231,s210,s211,s240,s241,mode;//keyparmerterbitaddr,ishui,istype,istime,iscolor;ucharhuidu,speeddu,colordu,address,type;uchar  code  spd[]={8,15,30,60,120,240,240};uchar  code  spd1[]={2,5,13,19,28,45,90};#defineAddWr0xa0/*器件地址選擇及寫標(biāo)志*/#defineAddRd0xa1/*器件地址選擇及讀標(biāo)志*/////////////////////////////////////////////////voidmDelay(ucharj){uinti;for(;j>0;j--){for(i=0;i
希望大家見涼
0
回復(fù)
2008-07-08 00:15
@zhongyuqiang
希望大家見涼
0
回復(fù)
2008-07-08 00:17
@zhongyuqiang
2646981215447325.rar
0
回復(fù)
2008-07-08 22:23
怎么沒高手解釋下呢?自己頂下
0
回復(fù)
2008-07-08 22:32
硬件電路正確?仿真的時候,很多必須連接的線都不用連上的……
0
回復(fù)
2008-07-17 21:04
51系列單片機(jī)有一個還是兩個口是OC門的,需要上拉電阻,具體你看一下資料
0
回復(fù)
2008-07-22 17:56
你應(yīng)該是用51的單片機(jī),我很熟悉,有需要聯(lián)系下拉,QQ:395728911
呵呵
0
回復(fù)
2008-07-25 11:41
@zhongyuqiang
2646981215447454.rar
搞那么復(fù)雜,用SONIX的就行了啊,指令又不多.
0
回復(fù)
發(fā)