信号发生器的制作基于AD9850
单片机源程序如下:
/*******************************************************
项目名:基于ARM Cortex-M3 函数信号发生器
涉及便件连接情况: PA0~7--------DDS模块 D0~D7
PB4 PB5 PB6----DDS模块fqud reset w_clk
PB0 PB2 PB3----液晶12864 CS(RS) DIO(RW) CLK(EP)
PE0 PE1 PE2 ----KEY3 KEY4 KEY5
PD1 PG5------KEY1 KEY2
PD0 PG2------LED1 LED2
PF0 PF1-----接24C04 SDA SCL
程序主要功能:
作者:suqingxiao huangrenji liangping
*********************************************************/
#include
#include "AD9850.h"
#include "24C04.h"
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
#define TASK_STK_SIZE 64
/**************************************
CONSTANTS 常量
**************************************/
/************************************
VARIABLES 变量
*************************************/
uint16 now_color=0; //当前色
uint16 state=0,flag=0; //状态
uint16 frist_in=0; //初次进入标志
unsigned long num,aa=1,temp=0;
unsigned long ulData = 0;
unsigned char buff[5];
unsigned char display[10];
unsigned char fshi1=0,fge1=0,temp1=0;
unsigned char fshi2=0,fge2=0,temp2=0;
unsigned char fshi3=0,fge3=0,temp3=0;
unsigned long dat=0,dat2,dat3;
unsigned char wan=0, qian=0,ge=0,shi=0,bai=0;
unsigned char wan2, qian2,ge2,shi2,bai2;
unsigned char wan3, qian3,ge3,shi3,bai3;
unsigned char ge4,shi4;
static OS_STK GstkStart[TASK_START_STK_SIZE];//启动任务的堆栈
static OS_STK GstkLED[TASK_LED_STK_SIZE];
OS_STK Task1Stk[TASK_STK_SIZE];
OS_STK Task2Stk[TASK_STK_SIZE];
/*************************************
FUNCTION PROTOTYPES 函数声明
**************************************/
static void taskStart (void *parg); //启动任务
static void taskLED(void *parg); //任务0
void Task1(void *data);
void Task2(void *data);
/***********************************************
功能:主程序
************************************************/
int main (void)
{
OSInit(); // OS-II 初始化uC/OS-II的内核
OSTaskCreate( taskStart,
(void *)0,
&GstkStart[TASK_START_STK_SIZE-1],
TASK_START_PRIO );
/* 初始化启动任务 */
OSStart(); // 启动uC/OS-II*/
return(0);
}
/****************************************
** Function name: Task_Start
** input parameters: *p_arg
*****************************************/
static void taskStart (void *parg)
{
(void)parg;
targetInit(); // 初始化目标单片机
#if OS_TASK_STAT_EN > 0
OSStatInit(); // 使能统计功能
#endif
/* 在这里创建其他任务 */
OSTaskCreate( taskLED,
(void *)0,
&GstkLED[TASK_LED_STK_SIZE-1],
TASK_LED_PRIO ); // 建处理任务
OSTaskCreate(Task1, (void *)2, &Task1Stk[TASK_STK_SIZE - 1],2);
OSTaskCreate(Task2, (void *)3, &Task2Stk[TASK_STK_SIZE - 1], 3);
KEY_Init(KEY1 | KEY2 | KEY3 |KEY4 |KEY5 ); //按键初始化
LCDInit(); //LCD12864初始化 // LCD初始化
clear_all(); // 清屏
while (1)
{
/* 启动任务可在这里挂起 */
OSTaskSuspend(OS_PRIO_SELF);
}
}
/***********************************************
名称:任务0
功能:
**********************************************/
static void taskLED(void *parg)
{
(void)parg;
Display(ulData);//开机显示
SystemInit();// 系统初始化
init();//24C04初始化
num=read_add(1);//选波型,读波型
/******正弦波****/
shi=read_add(2);//读24C04中正弦波十位
bai=read_add(3);//读24C04中正弦波百位
//qian=read_add(6);
//wan=read_add(5);
dat=read_add(6);////读24C04中正弦波频率
dat=wan*10000+qian*1000+bai*100+shi*10;//读24C04中正弦波频率
fge1=read_add(7);//读24C04中正弦波幅度小数位
fshi1=read_add(8);
temp1=read_add(9);//读24C04中正弦波幅度值
temp1=fshi1*10+fge1;//读24C04中正弦波幅度值
/*************/
/*****方波****/
shi2=read_add(10);//读24C04中方波十位
bai2=read_add(11);//读24C04中方波百位
//qian=read_add(6);
//wan=read_add(5);
dat2=read_add(12);//读24C04中方波频率
dat2=wan2*10000+qian2*1000+bai2*100+shi2*10;
fge2=read_add(13);//读24C04中方波幅度小数位
fshi2=read_add(14);
temp2=read_add(15);//读24C04中方波幅度
temp2=fshi2*10+fge2;//读24C04中方波幅度
/*************/
/*****三角波*****/
shi3=read_add(16);//读24C04中三角波十位
bai3=read_add(17);//读24C04中三角波百位
//qian=read_add(6);
//wan=read_add(5);
dat3=read_add(18);//读24C04中三角波*频率
dat3=wan3*10000+qian3*1000+bai3*100+shi3*10;
fge3=read_add(19);//读24C04中三角波幅度小数位
fshi3=read_add(20);
temp3=read_add(21);//读24C04中三角波幅度值
temp3=fshi3*10+fge3;//读24C04中三角波幅度值
/*************/
//num=temp;
for(;;)
{
if(flag==1)//标志位为1时可以操作24C04
{
flag=0;//标志位清0
write_add(1,num);//选波型 写到24C04
/******正弦波*******/
write_add(2,shi);//写正弦波频率的十位到24C04
write_add(3,bai);//写正弦波频率的百位到24C04
// write_add(6,qian);
//write_add(5,wan);
dat=wan*10000+qian*1000+bai*100+shi*10;
write_add(6,dat);//写正弦波频率值到24C04
write_add(7,fge1);//写正弦波幅值的小数位到24C04
write_add(8,fshi1);
temp1=fshi1*10+fge1;//写正弦波幅值到24C04
write_add(9,temp1);
/************/
/***方波*****/
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』