⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gen12.c

📁 一个信号发生器的程序。
💻 C
字号:
#include<absacc.h>                /*6M晶振*/
#include<reg51.h>
#define uchar unsigned char
#define adr244 XBYTE[0xa000]
#define dac0832 XBYTE[0xb000]
sbit clk=P1^6;
sbit dout=P1^5;
sbit stb=P1^7;
sbit ctrl=P1^0;
uchar buff[7];
uchar kc;
uchar ky;
uchar kp;
uchar sdata;
unsigned int q;
unsigned int temp,tmp;
uchar flagt;
uchar kflag;
uchar value;
uchar code seven[]={0x7e,0x50,0xe6,0xae,0x9c,0xba,0xfa,0x0e,0xfe,0xbe,0x7d,0x53,0x00};
uchar bl[4];  /*bl[0]时间常数变量高位,bl[1]时间常数低位,bl[2]占空比常数%,bl[3]幅值常数*/
uchar bli,blt;
uchar zkb;/*占空比变量*/
uchar kpwav;
uchar funi;

void init()
{EA=1;EX1=1;value=254;zkb=50;temp=200;}

void disp()
{uchar n,k,kpp;
 stb=0;
 for(n=0;n<=6;n++)
   {kpp=1;
    for(k=0;k<=7;k++)
      { if((buff[n]&kpp)==0)
          flagt=0;
        else flagt=1;
        kpp=kpp*2;
        clk=0;
        dout=flagt;
        clk=1;
      }
    }
 stb=1; 
 }

void time(q)
{unsigned int x;
 for(x=0;x<q;x++)
    {;}
}

void change()
{ buff[5]=seven[sdata];
  buff[4]=seven[tmp/10000];
  buff[3]=seven[(tmp%10000)/1000];
  buff[2]=seven[(tmp%1000)/100];
  buff[1]=seven[(tmp%100)/10];
  buff[0]=seven[tmp%10];
}
void change0()
{ buff[5]=seven[sdata];
  buff[4]=0x80;
  buff[3]=0;
  buff[2]=0;
  buff[1]=0;
  buff[0]=0;
}
void change1()
{ buff[5]=0xd2;
  buff[4]=0x7c;
  buff[3]=0x5e;
  buff[2]=0x80;
  buff[1]=seven[sdata/10];
  buff[0]=seven[sdata%10];
}



void keydac() interrupt 2 using 2
{
  EX1=0;
  kc=adr244;  time(1000);
  ky=kp;
  kp=adr244;
  if(kc=kp)
     {if((kc&0x80)==0) kp=4;
        else if((kc&0x40)==0) kp=3;
           else if((kc&0x20)==0) kp=2;
              else if((kc&0x10)==0) kp=1;
                 else if((kc&0x08)==0) kp=0;
                    else kp=5;
     }
  time(200);
}

void wav22()                                 
{uchar i,topi,lowi;
 topi=value;lowi=-value;                          
    while((kp==2)&(kpwav==2)&(EX1==1))
      {for(i=lowi;i<topi;i++)
         {dac0832=i;}
       for(i=topi;i>lowi;i--)               
         {dac0832=i;}
      }
 EX1=1;
}
void wav23()                                 
{uchar i,topi,lowi;
 uchar temp100;
 temp100=temp/100;
 topi=value;lowi=-value;                          
    while((kp==2)&(kpwav==3)&(EX1==1))
      {for(i=lowi;i<topi;i=i+2)
         {dac0832=i;time(temp100);}
       for(i=topi;i>lowi;i=i-2)               
         {dac0832=i;time(temp100);}
      }
     EX1=1;
}
void wav24()
{dac0832=128;
time(100);
dac0832=value;
time(1);
while((kp==2)&(kpwav==4)&(EX1==1))
  dac0832=128;
EX1=1;
}
void wav25()
{dac0832=128;
time(100);
dac0832=-value;
time(1);
while((kp==2)&(kpwav==5)&(EX1==1))
  dac0832=128;
EX1=1;
}
void wav26()                                 
{unsigned int p1;
 unsigned int p2;
 p1=temp*zkb/100;
 p2=temp-p1;
 while((kp==2)&(kpwav==6)&(EX1==1))
  {
   dac0832=value;
   time(p1);
   dac0832=-value;
   time(p2);
  }EX1=1;
}
void wav28()         /*period 1ms  zkb 1:2*/
{while((kp==2)&(kpwav==8)&(EX1==1))
     {dac0832=value;
      time(6);       /*330us*/
      dac0832=-value;
      time(18);      /*660us*/
      }EX1=1;    
}
void wav29()          /*period 0.5ms zkb 3:2*/
{while((kp==2)&(kpwav==9)&(EX1==1))
     {dac0832=value;
      time(5);                /*300*/
      dac0832=-value;
      time(1);                /*200*/
      }    
}
void wav210()                                 
{uchar i;
 while((kp==2)&(kpwav==10)&(EX1==1))
    {for(i=-value;i<value;i=i+3)
       {dac0832=i;time(1);}
     for(i=value;i>-value;i=i-3)               
       {dac0832=i;time(1);}
    }EX1=1;
}
void wav211()
{dac0832=128;
 time(100);
 dac0832=value;
 time(temp);
 dac0832=128;
 EX1=1;
}
void wav212()                                 
{while((kp==2)&(kpwav==12)&(EX1==1))
    {dac0832=value-3;}
    EX1=1;
}
void wav213()
{uchar cl16;
 uchar i10;
 buff[6]=2;
 stb=0;
 ctrl=0;
 dac0832=128;
 while((kp==2)&(kpwav==13)&(EX1==1))
    {ctrl=0;time(2);ctrl=1;
     for(cl16=0;cl16<=16;cl16++)
        {dac0832=127;
            for(i10=0;i10<=10;i10++)
               time(temp);
               dac0832=value;
               time(1);
                    
         }
     EX1=1;
     kp=8; 
    }
}
void wav214()
{uchar cl16;
 unsigned int i10;
 i10=10*temp;
 buff[6]=2;
 stb=0;
 ctrl=0;
 dac0832=128;
 while((kp==2)&(kpwav==14)&(EX1==1))
    {ctrl=0;time(2);ctrl=1;
     for(cl16=0;cl16<=16;cl16++)
        {dac0832=127;
         time(i10);
         dac0832=value;
         time(1);
         }
     EX1=1;
     kp=8; 
    }
}
void wav215()
{buff[6]=2;
 stb=0;
 ctrl=0;
 dac0832=128;
 while((kp==2)&(kpwav==15)&(EX1==1))
    {ctrl=0;time(2);ctrl=1;
     time(temp);
     dac0832=value;
     time(1);
     dac0832=128;
     EX1=1;
     kp=8; 
    }
}



void key2()
{uchar cl16;
 uchar i10;
 sdata=kpwav; /*030523changed*/
 change1();
 EX1=1;     
 switch(kpwav)
                      {
                       case 0:                 /*block wave standard*/
                         {buff[6]=255;disp();
                          while((kp==2)&(kpwav==0)&(EX1==1))
                             {
                              dac0832=value;
                              time(1);
                              dac0832=-value;
                              time(1);
                             }                          
                         }break; 
                       case 1:                   /*block wave standard*/
                         {buff[6]=128;disp();
                          while((kp==2)&(kpwav==1)&(EX1==1))
                            {dac0832=value;
                             time(32);
                             dac0832=-value;
                             time(32);
                            }                          
                         }break;
                       case 2:
                         {buff[6]=64;disp();
                          wav22();                         
                         }break;
                       case 3:
                         {buff[6]=32;disp();
                          wav23();
                         }break;
                       case 4:
                         {buff[6]=16;disp();
                          wav24();
                         }break;
                       case 5:
                         {buff[6]=8;disp();
                          wav25();                          
                         }break;
                       case 6:
                         {buff[6]=4;disp();
                          wav26();                         
                         }break;
                       case 7:               /*030522changed*/
                         {buff[6]=2;disp();
                          stb=0;
                          while((kp==2)&(kpwav==7)&(EX1==1))
                             {ctrl=0;time(1);ctrl=1;
                              for(cl16=0;cl16<=17;cl16++)
                                 {dac0832=125;
                                   for(i10=0;i10<=10;i10++)
                                     time(temp);
                                   dac0832=value;
                                   time(3);
                                   
                                 }
                              EX1=1;
                              kp=8; 
                              }
                         }break;
                       case 8:
                         {buff[6]=1;disp();
                          wav28();                         
                         }break;
                       case 9:
                         {buff[6]=129;disp();
                          wav29();                         
                         }break;
                       case 10:
                         {buff[6]=65;disp();
                          wav210();                         
                         }break;
                       case 11:
                         {buff[6]=33;disp();
                          wav211();                         
                         }break;
                       case 12:
                         {buff[6]=17;disp();
                          wav212();                         
                         }break;
                       case 13:
                         {buff[6]=9;disp();
                          wav213();                         
                         }break;
                       case 14:
                         {buff[6]=5;disp();
                          wav214();                         
                         }break;
                       case 15:
                         {buff[6]=3;disp();
                          wav215();                         
                         }break;

                      }
EX1=1;
}

void key9()
{  uchar ttt;
   ttt=bli%4;          
   switch(ttt)
                      {
                       case 0:
                         {temp=bl[1]*100+bl[0];
                          tmp=temp;sdata=11;      
                          change();disp();kp=254;                          
                         }break; 
                       case 1: 
                         {temp=bl[1]*100+bl[0];
                          tmp=temp;sdata=11;
                          change();disp();kp=254;
                         }break;
                       case 2:
                         {
                          zkb=bl[2]%100;
                          tmp=zkb;sdata=2;
                          change();buff[4]=0;disp();kp=254;
                         }break;
                       case 3:
                         {if((blt>=255)|(blt<128)) bl[3]=128;
                          value=bl[3];
                          tmp=(value-128)*40;sdata=10;
                          change();buff[4]=0;buff[3]++;disp();kp=254;
                         }break;
                      }
EX1=1;
kp=254;
}
main()
{
 time(766);                                     /* 20ms */
 tmp=30602;
 sdata=0;
 change();
 disp();
 kp=7;
 init();
 bl[1]=2;
 bl[2]=50;
 bl[3]=254;
 dac0832=0x80;
 while(1==1)
     {switch(kp)
           {
  /*1号键E*/case 0:                /* 功能切换 */ 
               {dac0832=128;    /*0528changed*/
                while(INT1==0)
                   {funi++;
                    kpwav=funi%16;
                    sdata=kpwav;
                    change1();
                    buff[2]=0;
                    disp();
                    time(6000);                   
                   }
                 EX1=1;kp=254;
               }break;
  /*3号键C*/case 1:                 /*  变量加一 */
               {
                while(INT1==0) 
                   {blt++;
                    tmp=blt;sdata=12;change();
                    disp();time(6000);                             
                   }
                   kp=7;EX1=1; 
               }break;
  /*2号键F*/case 2:                      /* 功能确定 */  
               {while(INT1==0) time(300);             
                EX1=1;
                key2();                              
               }break;   
  /*5号键A*/case 3:                 /*变量切换*/
                {while(INT1==0)
                   {bli++;blt=bl[bli%4];
                    sdata=bli%4;change0();disp();time(6000);
                   }
                 kp=7;EX1=1;
                }break;
  /*6号键B*/case 4:                    /* 变量确定 */
               {
                 while(INT1==0) time(300); 
                 EX1=1;
                 key9();
               }break;
   
   /*4号键D*/case 5:                             /* 变量减一 */
               {while(INT1==0)
                  {blt--;
                   tmp=blt;sdata=12;
                   change();disp();time(6000);
                  }
                kp=7;EX1=1;
               }break;
            case 7:
               {bl[bli%4]=blt;kp=254;
               }break;
            case 8:
               {tmp=16;
                change();buff[5]=0;buff[4]=0;
                disp();kp=254;
               }break;
            case 254:
               {time(10);EX1=1;
               }break;
            default:
               { time(10);
               }  
         }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -