📄 gen12.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 + -