找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4102|回復(fù): 0
收起左側(cè)

51單片機(jī)控制PCF8591輸出4種波形周期可調(diào)

[復(fù)制鏈接]
ID:95068 發(fā)表于 2015-11-15 13:01 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit  SCL=P2^6;
sbit  SDA=P2^7;
sbit  key1=P3^6;
sbit  key2=P3^7;
uint n=0;                 
uchar code  Sinwave[]={    //正弦波波表
127, 152, 176, 198, 217, 233, 245, 252,
255, 252, 245, 233, 217, 198,176, 152,
127, 102, 78,  56,  37,  21,  9,   2,
0,   2,   9,  21,  37,  56,  78, 102
};
uchar code Triwave[] = {   //三角波波表
0,  16,  32,  48,  64,  80,  96, 112,
128, 144, 160, 176, 192, 208,224, 240,
255, 240, 224, 208, 192, 176, 160, 144,
128, 112,  96,  80,  64,  48,  32,  16
};
uchar code Sawwave[] = {   //鋸齒波表
0, 8, 16, 24, 32, 40,  48,  56,
64,72,80,  88,  96, 104, 112,120,
128, 136, 144, 152, 160, 168, 176,184,
192, 200, 208, 216, 224,232, 240, 248,
};
uchar code Squwave[]={   //方波波表
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255
};
uint f=30;
void delay()
{ ; ; ;}

void  delay10()
{ uint i,j;
  for(i=0;i<10;i++)
    for(j=0;j<250;j++);
}
  void  delay11()
{ uint i,j;
  for(i=0;i<f;i++)
    for(j=0;j<250;j++);
}
void init()
{  SCL=1;
   delay();
   SDA=1;
   delay();
}

void start()
{   init();
        SDA=0;
        delay();
}
void write(uchar date)
{         uchar i,temp;
     temp=date;
         for(i=0;i<8;i++)
          { temp=temp<<1;
            SCL=0;
            delay();
            SDA=CY;
            delay();
            SCL=1;
            delay();
          }
         SCL=0;
         delay();
         SDA=1;
         delay();
}

void respons()
{         uchar i;
     SCL=1;
         delay();
         while((SDA==1)&&(i<250))
           i++;
         SCL=0;
         delay();
}

void stop()
{
        SDA=0;
        delay();
        SCL=1;
        delay();
        SDA=1;
        delay();
}
  void writewave(uchar xc)
{  
      init();       
      start();
             write(0x90);
          respons();
          write(0x40);
          respons();
          write(xc);
          respons();
          stop();           
}
void keyscan()
{ if(key1==0)
   {
            delay10();
         if(key1==0)
         { f+=10;
           while(!key1);
         }
   }
   if(key2==0)
   {
            delay10();
         if(key2==0)
         { f-=10;
         if(f<=20) f=20;
           while(!key2);
         }
   }  
}
void  main()
{
   while(1)
   {  keyscan();
   for(n=0;n<32;n++)
        { writewave(Sinwave[n]);
     delay11();        }
    for(n=0;n<32;n++)
     { writewave(Triwave[n]);
       delay11();  }
        for(n=0;n<32;n++)
     { writewave(Sawwave[n]);
        delay11();}
         for(n=0;n<32;n++)
   { writewave(Squwave[n]);
      delay11(); }

    }
}


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表