资源简介
51单片机控制AD9834的信号发生器。通过按键可以设置输出方式及输出频率,并通过1602液晶显示
代码片段和文件信息
/*****************************************************
AD9834波形产生程序
*****************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define FCLK 50000000
#define FREQ_0 0
#define FREQ_1 1
sbit FSYNC = P3^4;
sbit SCLK = P3^5;
sbit SDATA = P3^6;
sbit RESET = P3^7;
sbit CHANGE = P3^2;
//液晶接口
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
uchar i=0jkkey10num;
uchar sintrisqu;
ulong freq=0.0;
ulong m;
uchar code tab1[]={0xf70xfb0xfd0xfc}; //键盘
uchar code tab2[]=“frequency:“; //初始化液晶显示
uchar tab[6]; //存储设置值
/**************************
发送控制字
**************************/
void Send_Con(uint Con_word)
{
uchar i;
FSYNC =0; //低电平使数据有效
for(i=0;i<16;i++) //传输16位控制字
{
SDATA =Con_word&0x8000; //最高位不变,最高位赋给SDATA
Con_word<<=1; //控制字左移一位,准备下一次
SCLK =0; //产生下降沿,传输SDATA
SCLK =1;
}
FSYNC =1; //高电平,无效
}
/****************************
发送频率字
****************************/
void Send_Freq(uint Freq_word)
{
uchar i;
FSYNC =0; //低电平使数据有效
for(i=0;i<16;i++) //传输16位频率字
{
SDATA =Freq_word&0x8000; //最高位不变,最高位赋给SDATA
Freq_word<<=1; //频率字左移一位,准备下一次
SCLK =0; //产生下降沿,传输SDATA
SCLK =1;
}
FSYNC =1; //高电平,无效
}
/*****************************
发送相位字
注:根据情况可设定入口参数,设置相位
*****************************/
void Send_Phase()
{
Send_Con(0xC000); //设置初相位为0
}
/*******************************************************
设置频率值
Freq_value(value)=Freq_data(data)*FCLK/2^28
2^28=268435456=0x10000000
*******************************************************/
void writing_Freq(uchar freq_number ulong Freq_value)
{
ulong FREQREG = (ulong)(268435456.0/FCLK*Freq_value);
uint LSB_D = (uint)FREQREG;
uint MSB_D = (uint)(FREQREG>>14);
if(freq_number == FREQ_0)
{
LSB_D &= ~(1U<<15);
LSB_D |= 1<<14;
MSB_D &= ~(1U<<15);
MSB_D |= 1<<14;
}
else
{
LSB_D &= ~(1<<14);
LSB_D |= 1U<<15;
MSB_D &= ~(1<<14);
MSB_D |= 1U<<15;
}
Send_Freq(LSB_D);
Send_Freq(MSB_D);
}
void delay(uint x) /*延时函数*/
{
uint ij;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void wri(uchar com) /*写指令函数*/
{
rs=0;
rw=0;
en=1;
P0=com;
delay(5);
en=0;
}
void wrd(uchar dat) /*写数据函数*/
{
rs=1;
rw=0;
en=1;
P0=dat;
delay(5);
en=0;
}
/**************************************
按键: 0 1 2 3
4 5 6 7
8 9 设置 确定
正弦波 三角波 方波
每次按下设置键后,选择波形,正弦or三角or方波,按下后,再输入频率值,最后按确定键
**
- 上一篇:sublime xm
l插件 - 下一篇:SM4密码算法.pdf
相关资源
- 基于虚拟仪器LabVIEW技术的电能质量扰
- 函数信号发生器ICL8038
- 基于fpga的DDS信号发生器四种波形
- 北邮 专业实验 数字信号发生器
- 一种基于DDS芯片AD9835的多种信号发生
- LabVIEW信号发生器
- 单片机实现信号发生器原理图和源代
- 简易函数信号发生器的设计
- 基于DAC0832的DDS信号发生器报告+原理图
- 基于labview的多通道信号发生器
- 基于vhdl语言的信号发生器
- 基于labview的虚拟函数信号发生器的设
- 《基于FPGA的任意信号发生器》毕业论
- 基于labview的一个简单的多信号发生器
- 基于FPGA波形发生器和扫频信号发生器
- 基于51单片机的低频信号发生器的设计
- 低频信号发生器protues仿真与C程序
- 基于FPGA的幅度和相位可调信号发生器
- 基于LabView的虚拟信号发生器
- 基于AD9850的信号发生器的设计
- 基于声卡的LabVIEW虚拟信号发生器设计
- 1khz-10MHZ信号发生器设计
- 基于AD9850的信号发生器的设计与实现
- 基于DSP的设计正弦波信号发生器
- VHDL语言实现简易多功能信号发生器
- 基于51单片机的正弦信号发生器设计
- 基于LPC213X/LPC214X的简易信号发生器
- 低频信号发生器使用说明
- 基于单片机和dac0832的可调的信号发生
- labview简易信号发生器
评论
共有 条评论