郑州郑飞大酒店:51单片机控制AD9851产生20HZ-1MHZ的正弦波

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 01:07:27
查看文章
51单片机控制AD9851产生20HZ-1MHZ的正弦波
2009-08-13 22:16

详细说明:51单片机控制AD9851产生20HZ-1MHZ的正弦波,并且实现了按不同步进频率扫屏-51 single-chip AD9851 produced control 20HZ-1MHZ the sine wave, and realize a different step frequency sweep screen
#include "reg51.h"
#include"stdio.h"
#define SELECT_LCD() CS0=0; CS1=1; CS2=0
#define SELECT_NONE() CS0=1; CS1=1; CS2=1
#define Set0(x) x=0
#define Set1(x) x=1
sbit CS0 = P2^5 ;
sbit CS1 = P2^6 ;
sbit CS2 = P2^7 ;
sbit Lcd_RW = P2^4 ;
sbit Lcd_RS = P2^3 ;
sbit DDS_FQ=P1^0;
sbit DDS_CLK=P1^1;
sbit DDS_DATA=P1^2;
unsigned long ddsseg[15]={1432,2147,2863,7158,14317,21475,71583,143166,214748,715829,1431656,2147484,42949672,57266231,71582788};
/**********************   * 20 * 30 * 40 *100 * 200 * 300 * 1 K * 2 K * * 3 K * 10 K * 20 K * 30 K * 600 K * 800 K * 1 M *****/
/*****************************函数声明************************************/
void LcdWrite(unsigned char value , bit RS);
unsigned char LcdRead(bit RS);
void LcdWriteCmd(unsigned char value , unsigned char attrib);
void LcdWriteData(unsigned char value);
unsigned char LcdReadData();
void LcdInit(void);
void LocateXY(char x , char y);
void PutChar(char x , char y , char value);
void PutStr(char x , char y , char* str);
/*--------------------------------------------------------------------------*/
/*------------------------------通用延时程序--------------------------------*/
void delay(unsigned int time)     // time*0.5ms延时
{
unsigned int i,j;
for(j=0;j{
for(i=0;i<60;i++)
{;}
}
}
/*--------------------------------------------------------------------*/
/*-----------------------------液晶显示模块---------------------------*/
void LcdWrite(unsigned char value , bit RS)
{
/* 1. 设置RS信号线 */
Lcd_RS = RS ;
/* 2. 设置RW信号线为读 */
Lcd_RW = 0 ;
/* 3. 设置LCD片选 */
SELECT_LCD();
/* 4. 通过P0端口写值 */
P0 = value ;
/* 5. 锁存 */
SELECT_NONE();
}
/***************************************
说明: LCD读函数,完成LCD读操作的物理时序
RS:   0 - 写指令
1 - 写数据
return: 读出的具体值
*****************************************/
unsigned char LcdRead(bit RS)
{
unsigned char rt ;
/* 1. 设置RS信号线 */
Lcd_RS = RS ;
/* 2. 设置RW信号线为读 */
Lcd_RW = 1 ;
/* 3. 释放P0口 */
P0 = 0xff ;
/* 4. 设置LCD片选 */
SELECT_LCD();
SELECT_LCD();
SELECT_LCD();
SELECT_LCD();
/* 5. 通过P0端口读值 */
rt = P0 ;
/* 6. 锁存 */
SELECT_NONE();
return rt ;
}
/***************************************
说明: LCD写指令
value: 写的具体值
attrib: 0 - 不检测忙信号
1 - 监测忙信号
*****************************************/
void LcdWriteCmd(unsigned char value , unsigned char attrib)
{
/* 监测忙状态 */
if(attrib)
while( LcdRead(0)&0x80 ) ;
LcdWrite(value , 0);
}
/***************************************
说明: LCD写数据
*****************************************/
void LcdWriteData(unsigned char value)
{
/* 监测忙状态 */
while( LcdRead(0)&0x80 ) ;
LcdWrite(value , 1);
}
/***************************************
说明: LCD读数据
*****************************************/
unsigned char LcdReadData()
{
/* 监测忙状态 */
while( LcdRead(0)&0x80 ) ;
return LcdRead(1);
}
/***************************************
说明: LCD初始化函数,需要按照产品
说明书完成
*****************************************/
void LcdInit(void)
{
delay(800);
/* 写指令0x38连续3次, 不检测忙信号*/
LcdWriteCmd(0x38 , 0 );
delay(10);
LcdWriteCmd(0x38 , 0 );
delay(10);
LcdWriteCmd(0x38 , 0 );
delay(10);
/* 以后的读写操作均要判断忙信号 */
LcdWriteCmd(0x38 , 1 );
/* 先设置关屏 */
LcdWriteCmd(0x08 , 1 );
/* 清屏 */
LcdWriteCmd(0x01 , 1 );
/* 设置光标显示模式 */
LcdWriteCmd(0x06 , 1 );
/* 开屏并显示光标 */
LcdWriteCmd(0x0c , 1 );
}
/***************************************
说明: 设置光标定位
*****************************************/
void LocateXY(char x , char y)
{
unsigned char temp;
temp = x & 0xf;
y &= 0x1;
if ( y )temp |= 0x40;
temp |= 0x80;
LcdWriteCmd(temp,1);
}
/***************************************
说明: 显示字符
x: 横坐标 y: 纵坐标
value: 显示的字符
*****************************************/
void PutChar(char x , char y , char value)
{
LocateXY(x,y);
LcdWriteData(value);
}
/***************************************
说明: 显示字符串
*****************************************/
void PutStr(char x , char y , char* str)
{
unsigned char i,len=0;
/* 计算字符串长度 */
while (str[len] >31)
len++;
/* 显示字符串 */
for (i=0;i{
PutChar(x++,y,str[i]);
if ( x == 16 )
{
x = 0; y ^= 1;
}
}
}
/*---------------------------------------------------------------------*/
/*--------------------------AD9851控制模块-----------------------------*/
void Send(unsigned int control,unsigned long value)
{
unsigned char t;
DDS_FQ=0;
for(t=0;t<32;t++)//控制频率
{
DDS_CLK=0;
if(value&0x01)
Set1(DDS_DATA);
else
Set0(DDS_DATA);
DDS_CLK=1;
value=value>>1;
}
for(t=0;t<8;t++)//控制状态
{
DDS_CLK=0;
if(control&0x01)
Set1(DDS_DATA);
else
Set0(DDS_DATA);
DDS_CLK=1;
control=control>>1;
}
DDS_FQ=1;
}
void Init_DDS()
{
Send(0x01,0x00000000);
delay(10);
}
void main()
{
unsigned char i=0;
Init_DDS();
LcdInit();
PutStr(0,0,"DDS");
delay(2000);
while(1)
{
if(i==16)
i=0;
Send(0x01,ddsseg[i]);
switch(i)
{
case 0:
PutStr(0,0,"DDS    +10HZ");
PutStr(0,1,"    20   HZ");
break;
case 1:
PutStr(0,0,"DDS    +10HZ");
PutStr(0,1,"    30   HZ");
break;
case 2:
PutStr(0,0,"DDS    +10HZ");
PutStr(0,1,"    40   HZ");
break;
case 3:
PutStr(0,0,"DDS   +100HZ");
PutStr(0,1,"   100   HZ");
break;
case 4:
PutStr(0,0,"DDS   +100HZ");
PutStr(0,1,"   200   HZ");
break;
case 5:
PutStr(0,0,"DDS   +100HZ");
PutStr(0,1,"   300   HZ");
break;
case 6:
PutStr(0,0,"DDS    +1KHZ");
PutStr(0,1,"    1   KHZ");
break;
case 7:
PutStr(0,0,"DDS    +1KHZ");
PutStr(0,1,"    2   KHZ");
break;
case 8:
PutStr(0,0,"DDS    +1KHZ");
PutStr(0,1,"    3   KHZ");
break;
case 9:
PutStr(0,0,"DDS   +10KHZ");
PutStr(0,1,"    10 KHZ");
break;
case 10:
PutStr(0,0,"DDS   +10KHZ");
PutStr(0,1,"    20 KHZ");
break;
case 11:
PutStr(0,0,"DDS   +10KHZ");
PutStr(0,1,"    30 KHZ");
break;
case 12:
PutStr(0,0,"DDS +200KHZ");
PutStr(0,1,"   600 KHZ");
break;
case 13:
PutStr(0,0,"DDS +200KHZ");
PutStr(0,1,"   800 KHZ");
break;
case 14:
PutStr(0,0,"DDS +200KHZ");
PutStr(0,1,"   1    MHZ");
break;
default: break;
}
i++;
delay(6000);
}
}
类别:默认分类 | |添加到搜藏 |分享到i贴吧 | 浏览(360) |评论 (1)
上一篇:嵌入式系统若干技术的发展与趋势    下一篇:粒子滤波2007年参考文献
相关文章:
51单片机的AD9851串行驱动程序51单片机的AD9851并行驱动程序
最近读者:
登录后,您就出现在这里。
zxdxmz污点……lik_firebabytaomailnumen123cxd1542蒙振天在_云端
网友评论:
1畅想山河
2010-08-18 00:12 |回复 很好,谢谢!
发表评论:
内 容:

"); //-->
©2010 Baidu