现在正在做一个程控滤波器。是一个07年全国大学生电子设计竞赛的题目 在编程方面 自己找资料中 只有一个c程序 用keil编译后有点问题 估计是因为没有加头文件 后来加了一个头文件也有一点问题 之前因为开始学的时候用的就是汇编 因此肯请各位大虾指教!!急!!本系统以51单片机和FPGA为核心,完成程控放大电路和程控滤波电路,同时设计完成了简易幅频特性测试仪。 单片机c程序清单 #include <ZLG7289.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar code LF[20]={40,7,28,14,7,27,20,14,10,6,31,27,23,19,16,13,11,9,7,6}; uchar code HF[20]={63,27,60,40,27,60,48,39,32,26,62,59,53,47,42,38,34,30,27,25}; sbit con1 = P1^7; sbit con0 = P1^4; sbit WR0= P1^3;
sbit a0=P3^0; sbit a1=P3^1; sbit a2=P3^3; sbit a3=P3^4; sbit a4=P3^5; sbit a5=P3^6; sbit a6=P3^7; uchar mod; // 模式 : 高通,低通,扫频 uchar key; // 键值 : uchar Ldat; // uchar Gdat; // uchar a; /* 函数: Delay(uint t) 功能: 延时 0.01-655.36 s 参数: t 类型 uint */ void Delay(uint t) { do { TH0 = 0xDC; TL0 = 0x00; TR0 = 1; while ( !TF0 ); TF0 = 0; TR0 = 0; } while (--t); } void Init(); uchar Set_value(); void Load_date(uchar modd ,uchar datt); void saoping(); void read_key() interrupt 0 { key = ZLG7289_Key(); Delay(2); TR0=1; } void main() { Init(); ZLG7289_Init(4); while(1) { if(key == 14) { key =17; a++; if(a==7) { a=0; } ZLG7289_Hide(0x0f); ZLG7289_Download(1, 0, 0, 11); ZLG7289_Download(1, 1, 0, 13); ZLG7289_Download(1, 2, 0, 0); ZLG7289_Download(1, 3, 0, a);
Delay(10); if(a==0) { a6=0;a5=0;a4=0;a3=0;a2=0;a1=0;a0=1;} if(a==1) { a6=0;a5=0;a4=0;a3=0;a2=0;a1=1;a0=0;} if(a==2) { a6=0;a5=0;a4=0;a3=0;a2=1;a1=0;a0=0;} if(a==3) { a6=0;a5=0;a4=0;a3=1;a2=0;a1=0;a0=0;} if(a==4) { a6=0;a5=0;a4=1;a3=0;a2=0;a1=0;a0=0;} if(a==5) { a6=0;a5=1;a4=0;a3=0;a2=0;a1=0;a0=0;} if(a==6) { a6=1;a5=0;a4=0;a3=0;a2=0;a1=0;a0=0;}
Delay(100); }
if(key == 15) { key =17; a--; if(a==0xff) { a=6; } ZLG7289_Hide(0x0f); ZLG7289_Download(1, 0, 0, 11); ZLG7289_Download(1, 1, 0, 13); ZLG7289_Download(1, 2, 0, 0); ZLG7289_Download(1, 3, 0, a); Delay(10); if(a==6) { a6=1;a5=0;a4=0;a3=0;a2=0;a1=0;a0=0;} if(a==5) { a6=0;a5=1;a4=0;a3=0;a2=0;a1=0;a0=0;} if(a==4) { a6=0;a5=0;a4=1;a3=0;a2=0;a1=0;a0=0;} if(a==3) { a6=0;a5=0;a4=0;a3=1;a2=0;a1=0;a0=0;} if(a==2) { a6=0;a5=0;a4=0;a3=0;a2=1;a1=0;a0=0;} if(a==1) { a6=0;a5=0;a4=0;a3=0;a2=0;a1=1;a0=0;} if(a==0) { a6=0;a5=0;a4=0;a3=0;a2=0;a1=0;a0=1;}
Delay(100); }
if(key == 11) //设置低通频率 { key=17; ZLG7289_Hide(0x73); ZLG7289_Download(0, 6, 0, 13); ZLG7289_Download(0, 5, 0, 14); ZLG7289_Download(1, 4, 0, 15); Ldat = Set_value(); Load_date(0,Ldat);
} if(key == 12) //设置高通频率 { key=17; ZLG7289_Hide(0x73); ZLG7289_Download(0, 6, 0, 12); ZLG7289_Download(0, 5, 0, 14); ZLG7289_Download(1, 4, 0, 15); Gdat = Set_value(); Load_date(2,Gdat); } if(key == 13) //扫频开关 { ZLG7289_Hide(0x00); saoping();
} } } void Init() { IE = 0x81; IP = 0x01; TMOD = 0x01; key = 17; ZLG7289_Flash(0x00); Delay(100); ZLG7289_Flash(0xff); a=0; a0=0; a1=1; a2=0; a3=0; a4=0; a5=0; a6=0;
} uchar Set_value() { uchar a=0; ZLG7289_Download(1, 0, 0, 0); ZLG7289_Download(1, 1, 0, 0); ZLG7289_Flash(0xfc); Delay(200); while(key>9){} a = key; ZLG7289_Download(1, 0, 0, key); ZLG7289_Flash(0xfd); key = 17; while((key>2)||((key==2)&&(a>0))||((key==0)&&(a==0))){} a=key*10+a; if(a<3) { con1=0; con0=1; } else { if(a>10) { con1=0; con0=0; } else { if((a==3)||(a==4)||(a==5)) { con0=1; con1=1; } else { con1=1; con0=0; } } } ZLG7289_Download(1, 1, 0, key); key = 17; ZLG7289_Flash(0xff); return(a); }
void Load_date(uchar modd ,uchar datt) {
uchar a[8]={0,0,0,0,0,0,0,0},k=0; uchar i=2; if(modd==0) { a[0]=0; a[1]=0; k=LF[datt-1]; for(;i<8;i++) { a=k>>(i-2)&0x01; } } if(modd==2) { a[0]=1; a[1]=0; k=HF[datt-1]; for(;i<8;i++) { a=k>>(i-2)&0x01; } } for(i=0,k=0;k<4;k++,i++) { P0 = a*32+a[i++]*16+k; WR0=0; WR0=1; } P0 = 0xf4; WR0 = 0; WR0 = 1; P0 = 0xe5; WR0 = 0; WR0 = 1; P0 = 0xe6; WR0 = 0; WR0 = 1; P0 = 0xe7; WR0 = 0; WR0= 1;
}
void saoping() { uint i,j; P2=0; for(i=0;i<20;i++) { P2++; for(j=0;j<10000;j++) {_nop_();} }
}
e7hRgxR5.rar (29.98 KB)
|