📄 新建文本文档.txt
字号:
C语言编程对DDS芯片的控制源程序
#include <io.h>
#include"system.h"
send(int a)
{
IOWR(PIO_DAT_BASE,0,a);
IOWR(PIO_CON_BASE,0,2);
IOWR(PIO_CON_BASE,0,0);
}
write_fw(int fre,int pha)
{
fre=fre*43;
send(pha<<3);
send(fre>>24);
send(fre>>16);
send(fre>>8);
send(fre);
IOWR(PIO_CON_BASE,0,1);
IOWR(PIO_CON_BASE,0,0);
}
disp(int dd)
{
int led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
IOWR(PIO_HEX3_BASE,0,led[(dd>>12)&15]);
IOWR(PIO_HEX2_BASE,0,led[(dd>>8)&15]);
IOWR(PIO_HEX1_BASE,0,led[(dd>>4)&15]);
IOWR(PIO_HEX0_BASE,0,led[dd&15]);
}
int keyscan()
{
volatile int i,j,col,row;
int key[4][4]={1,2,3,4,5,6,7,8,9,0,0xa,0xb,0xc,0xd,0xe,0xf};//键盘编码
while(1)
{
IOWR(PIO_KEY_BASE,0,0);//选择所有行
usleep(20);
if(IORD(PIO_KEY_BASE,0)!=15)//有键按下
{
row=1;
for(i=0;i<4;i++)//行扫描
{
IOWR(PIO_KEY_BASE,0,~row);//选择行
usleep(20);
col=IORD(PIO_KEY_BASE,0);//读取列值
if(col!=15)//有键按下
{
col=~col & 0xf;
for(j=0;j<4;j++)
{
col>>=1;if(col==0)break;//转换列值
}
break;
}
row<<=1;//扫描下一行
}
break;
}
}
while(IORD(PIO_KEY_BASE,0)!=15);//等待按键松开
return key[i][j];
}
int main()
{
volatile int flag1=0, flag2=0, flag3=0, flag4=0,flag5=0;
int keycode=0, ledo=0,freq=100000,m=0,n=0;
write_fw(freq,0);
IOWR(PIO_CON_BASE,0,0);
IOWR(PIO_HEX3_BASE,0,0x88);
IOWR(PIO_HEX2_BASE,0,0x88);
IOWR(PIO_HEX1_BASE,0,0x88);
IOWR(PIO_HEX0_BASE,0,0x88);
while(1)
{
write_fw(freq,0);
keycode=keyscan();
if(keycode<0xa && flag1!=0)
{
freq=freq*10+keycode;
ledo=(ledo<<4)+keycode;
disp(ledo);
continue;
}
if(keycode==0xa)
{
if(flag1==0)
{
flag1=1;
flag2=0;
flag3=0;
flag4=0;
flag5=0;
freq=0;
ledo=0;
disp(ledo);
continue;
}
else
{
flag1=0;
IOWR(PIO_HEX3_BASE,0,0x88);
IOWR(PIO_HEX2_BASE,0,0x88);
IOWR(PIO_HEX1_BASE,0,0x88);
IOWR(PIO_HEX0_BASE,0,0x88);
if(freq<10000000)
{
write_fw(freq,0);
}
continue;
}
}
if(keycode==9)
{
if (freq>1000)
{
freq=freq+100;
write_fw(freq,0);
}
continue;
}
if(keycode==0)
{
if (freq<10000000)
{
freq=freq-100;
write_fw(freq,0);
}
continue;
}
if(keycode==0xb)
{
flag1=0;
flag2=~flag2;
flag3=0;
flag4=0;
flag5=0;
}
if(keycode==0xc)
{
flag1=0;
flag2=0;
flag3=~flag3;
flag4=0;
flag5=0;
}
if(keycode==0xd)
{
flag1=0;
flag2=0;
flag3=0;
flag4=~flag4;
flag5=0;
}
if(keycode==0xe)
{
flag1=0;
flag2=0;
flag3=0;
flag4=0;
flag5=~flag5;
}
if (flag2) //按B键
{
IOWR(PIO_HEX3_BASE,0,0x83);
IOWR(PIO_HEX2_BASE,0,0x83);
IOWR(PIO_HEX1_BASE,0,0x83);
IOWR(PIO_HEX0_BASE,0,0x83);
while(1) //2FSK
{
if(IORD(PIO_M31_BASE,0))
write_fw(freq,0);
else
write_fw(freq/2,0);
if(IORD(PIO_KEY_BASE,0)!=15)
break;
}
}
if (flag3) //按C键
{
IOWR(PIO_HEX3_BASE,0,0xc6);
IOWR(PIO_HEX2_BASE,0,0xc6);
IOWR(PIO_HEX1_BASE,0,0xc6);
IOWR(PIO_HEX0_BASE,0,0xc6);
while(1) //2ASK
{
m=IORD(PIO_M31_BASE,0)*freq;
write_fw(m,0);
if(IORD(PIO_KEY_BASE,0)!=15) break;
}
}
if (flag4) //按D键
{
IOWR(PIO_HEX3_BASE,0,0xa1);
IOWR(PIO_HEX2_BASE,0,0xa1);
IOWR(PIO_HEX1_BASE,0,0xa1);
IOWR(PIO_HEX0_BASE,0,0xa1);
while(1) //2PSK
{
if(IORD(PIO_M31_BASE,0))
write_fw(freq,0);
else
write_fw(freq,90);
if(IORD(PIO_KEY_BASE,0)!=15) break;
}
}
if (flag5) //按E键
{
IOWR(PIO_HEX3_BASE,0,0x86);
IOWR(PIO_HEX2_BASE,0,0x86);
IOWR(PIO_HEX1_BASE,0,0x86);
IOWR(PIO_HEX0_BASE,0,0x86);
while(1) //MSK
{
m=freq+50000;n=freq-50000;
if(IORD(PIO_M31_BASE,0))
write_fw(m,0);
else
write_fw(n,0);
if(IORD(PIO_KEY_BASE,0)!=15) break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -