基于单片机的信号发生器的设计与实现_第1页
基于单片机的信号发生器的设计与实现_第2页
基于单片机的信号发生器的设计与实现_第3页
基于单片机的信号发生器的设计与实现_第4页
基于单片机的信号发生器的设计与实现_第5页
已阅读5页,还剩26页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附录#include"delay.h"#include"sys.h"#include"usart.h"#include"AD9833.h"#include"lcd1602.h" unsignedchark_num=0; unsignedlongBujinData=1; unsignedlongFreqData=100; unsignedintAmpData=100; unsignedcharWaveModle=2; unsignedcharflag_key,flag_show,flag_k1,flag_k2,flag_k3,flag_k4;/*************************************************函数:voidRCC_Configuration(void)功能:复位和时钟控制配置参数:无返回:无**************************************************/voidRCC_Configuration(void){ErrorStatusHSEStartUpStatus;//定义外部高速晶体启动状态枚举变量RCC_DeInit();//复位RCC外部设备寄存器到默认值RCC_HSEConfig(RCC_HSE_ON);//打开外部高速晶振HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部高速时钟准备好if(HSEStartUpStatus==SUCCESS)//外部高速时钟已经准别好{FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的用法.位置:RCC初始化子函数里面,时钟起振之后FLASH_SetLatency(FLASH_Latency_2);//flash操作的延时 RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置AHB(HCLK)时钟等于==SYSCLKRCC_PCLK2Config(RCC_HCLK_Div1);//配置APB2(PCLK2)钟==AHB时钟RCC_PCLK1Config(RCC_HCLK_Div2);//配置APB1(PCLK1)钟==AHB1/2时钟RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//配置PLL时钟==外部高速晶体时钟*9=72MHzRCC_PLLCmd(ENABLE);//使能PLL时钟while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//等待PLL时钟就绪{}RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟=PLL时钟while(RCC_GetSYSCLKSource()!=0x08)//检查PLL时钟是否作为系统时钟{}}RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//允许GPIOB、AFIO时钟}/*************************************************函数:voidGPIO_Configuration(void)功能:GPIO配置 PB11PB10PB0PA7PA6PA5PA4PA3参数:无返回:无**************************************************/voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;//定义GPIO初始化结构体 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_10|GPIO_Pin_1|GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); /*PC6*/}voidKey(){ if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==Bit_RESET) { delay_ms(5); if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==Bit_RESET&&flag_k1==0) { flag_key=1; flag_k1=1; } } else { flag_k1=0; } if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==Bit_RESET) { delay_ms(5); if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==Bit_RESET&&flag_k2==0) { flag_key=2; flag_k2=1; } } else { flag_k2=0; } if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==Bit_RESET) { delay_ms(5); if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==Bit_RESET&&flag_k3==0) { flag_key=3; flag_k3=1; } } else { flag_k3=0; } if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==Bit_RESET) { delay_ms(5); if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==Bit_RESET&&flag_k4==0) { flag_key=4; flag_k4=1; } } else { flag_k4=0; }}intmain(void){ unsignedchardat1[]="Setf"; unsignedchardat2[]="sin"; unsignedchardat3[]="HZ"; unsignedchardat4[]="AM="; unsignedchardat5[]="SetA"; unsignedchardat6[]="SetB"; unsignedchardat7[]="Tri"; unsignedchardat8[]="Squ"; unsignedchardat9[]="KHZ"; RCC_Configuration(); GPIO_Configuration();// uart_init(115200); //串口初始化为115200 delay_init(); delay_ms(500); LCD1602_Init(); delay_ms(50); DispStrAt(dat1,0,0); DispStrAt(dat8,6,0); DispDecSpaceAt(FreqData,0,1,7); DispStrAt(dat3,7,1); DispDecSpaceAt(BujinData,10,0,6); DispDecSpaceAt(AmpData/3.3,13,1,3); DispStrAt(dat4,10,1);AD9833_Init_GPIO();AD9833_WaveSeting(FreqData,0,WaveModle,0);//2KHz, 频率寄存器0,正弦波输出,初相位0AD9833_AmpSet(AmpData); //设置幅值,幅值最大255 while(1) { // DelayMs(100); //延时100ms Key(); if(flag_key==3) { flag_key=0; k_num++; if(k_num==3) k_num=0; if(k_num==0) DispStrAt(dat1,0,0); if(k_num==1) DispStrAt(dat5,0,0); if(k_num==2) DispStrAt(dat6,0,0); } elseif(flag_key==4) { flag_key=0; WaveModle=WaveModle+1; if(WaveModle==3)WaveModle=0; if(WaveModle==1){AD9833_WaveSeting(FreqData,0,SIN_WAVE,0);DispStrAt(dat2,6,0);} elseif(WaveModle==0){AD9833_WaveSeting(FreqData,0,TRI_WAVE,0);DispStrAt(dat7,6,0);} elseif(WaveModle==2){AD9833_WaveSeting(FreqData,0,SQU_WAVE,0);DispStrAt(dat8,6,0);} } if(k_num==0) { if(flag_key==1) { flag_key=0; if(FreqData<12000000) FreqData=FreqData+BujinData; AD9833_WaveSeting(FreqData,0,WaveModle,0); if(FreqData<10000000) { DispDecSpaceAt(FreqData,0,1,7);DispStrAt(dat3,7,1); } else{ DispDecSpaceAt(FreqData/1000,0,1,6);DispStrAt(dat9,6,1); }// while(key1==0); } elseif(flag_key==2) { flag_key=0; if(FreqData>1) FreqData=FreqData-BujinData; if(FreqData>12000000) FreqData=0; AD9833_WaveSeting(FreqData,0,WaveModle,0); if(FreqData<10000000) { DispDecSpaceAt(FreqData,0,1,7);DispStrAt(dat3,7,1); } else{ DispDecSpaceAt(FreqData/1000,0,1,6);DispStrAt(dat9,6,1); }// while(key2==0); } } elseif(k_num==1) { if(flag_key==1) { flag_key=0; if(AmpData<165) AmpData=AmpData+3.3; AD9833_AmpSet(AmpData); DispDecSpaceAt(AmpData/3.3,13,1,3);DispStrAt(dat4,10,1);// while(!key1); } if(flag_key==2) { flag_key=0; { if(AmpData>3.3) AmpData=AmpData-3.3; } AD9833_AmpSet(AmpData); DispDecSpaceAt(AmpData/3.3,13,1,3);DispStrAt(dat4,10,1);// while(!key2);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论