现在正在做一个程控滤波器。是一个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[i]=k>>(i-2)&0x01;
}
}
if(modd==2)
{
a[0]=1;
a[1]=0;
k=HF[datt-1];
for(;i<8;i++)
{
a[i]=k>>(i-2)&0x01;
}
}
for(i=0,k=0;k<4;k++,i++)
{
P0 = a[i]*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_();}
}
}