📄 dds.c
字号:
#include "intrins.h"
#include"reg51.h"
#include "lcd1602.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
#define key_bus P0
sbit reset=P1^0;
sbit sclk=P1^1;
sbit load=P1^2; //FQUD
sbit sdata=P1^3; //DATA
bit TIflag=1;//Note:It must be 1.
#define KEYPAD_IN XBYTE[0XF050]//XBYTE[0xA000]
#define KEYPAD_OUT XBYTE[0XF051]//XBYTE[0x8000]
sbit ds=P1^3;
sbit sh=P1^4;
sbit st=P1^5;
void WriteSIOByte(unsigned char led,unsigned char sel,unsigned char seg)
{
unsigned char i;
for (i=0;i<8;i++)
{
led=led<<1; ds=CY; sh=1; sh=0;
}
_nop_();//延时
for (i=0;i<8;i++)
{
sel=sel<<1; ds=CY; sh=1; sh=0;
}
_nop_();//延时
for (i=0;i<8;i++)
{
seg=seg<<1; ds=CY; sh=1; sh=0;
}
st=0;
st=1;//打入并行数据
}
/*************************AD9850初始化********************************/
void ad9850init()
{
reset=0;
reset=1;
reset=0;
load=0;
}
/*************************AD9850显示正弦波********************************/
AD9850(float freq)
{
float fw;
uchar temp;
uchar i,j;
uchar d[5]; //d[4]中存放控制字最高位,即相位控制字 //Freq=MCLK*FW/2^32
fw=freq*85.89934592;
d[4]=0;
d[0]=(unsigned long)fw;
d[1]=(unsigned long)fw>>8;
d[2]=(unsigned long)fw>>16;
d[3]=(unsigned long)fw>>24;
load=0;
sclk=0;
sclk=1;
sclk=0;
load=1;
load=0;
for(i=0;i<5;i++)
{
temp=d[i];
for(j=0;j<8;j++)
{
sclk=0;
if(temp&1) sdata=1;
else sdata=0;
sclk=1;
temp=temp>>1;
}
}
load=1;
load=0;
load=0;
load=0;
}
main()
{
uchar s[20]=0; //8位数字,含小数点
float freq=1000;
float step_value=100;
int step_state=2;//0=1HZ,1=10HZ,2=100HZ,3=1KHZ,4=10KHZ,5=100KHZ,6=1MHZ
int state=0; //state=0等待输入步进值状态,state=1改变频率值状态
ad9850init();
AD9850(freq);
P1=0x2;
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -