产生10Hz--1KHz方波的单片机程序

sbit dula = P2^6;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0பைடு நூலகம்71,0};
uchar bdata flag;//
sbit flag1=flag^0;//
#include <reg52.h>
#include <intrins.h>
//#include <math.h>
#include"stdio.h"
#define uchar unsigned char
#define uint unsigned int
sbit p20=P2^0;
sbit wela = P2^7;
default:break;
}
if(b!=17)//判断有键按下
{
temp1=17;
N=N+1;//判断共有几次键按下
if(b==12)//确认键按下
{
if(hz1<=1000&&hz1>=10)//输入的方波频率在10hz~1k hz范围内
{
TH1=(65536-(500*(1000/hz1)))/256;
sbit flag2=flag^1;//
uchar i=0,select;
ucharTH1_TMP,TL1_TMP;
uchar HZ[4]={0,0,0,0};
uchar temp0,temp1=17,N=0,control,count=0;
uint hz1=0,b=17;
void display();
hz1=0;
N=0;
b=17;
HZ[3]=0;
HZ[2]=0;
HZ[1]=0;
HZ[0]=0;
}
}
else
{
if(N==1)
{
HZ[3]=0;
HZ[2]=0;
HZ[1]=0;
HZ[0]=b;
hz1=b;
}else
if(N<=4)
{
hz1=hz1*10+b;
HZ[3]=HZ[2];
HZ[2]=HZ[1];
TL1=(65536-(500*(1000/hz1)))%256;
TH1_TMP=TH1;
TL1_TMP=TL1;
//TH1=(65536-1000)/256;
//TL1=(65536-1000)%256;
TR1=1;
N=0;
}
else
{
//输入频率超出范围即大于1K HZ或者小于10HZ,则无效,均清0
void init();
void main()
{
init();
select=0;
//TR1=1;
while(1)
{
switch(temp1)
{
case 0xee:b=1;break;
case 0xde:b=2;break;
case 0xbe:b=3;break;
case 0x7e:b=4;break;
TL0=(65536-5000)%256;
if(count==10)
{
if(flag1==0)
{
if(P3!=0x0f)
{
temp0=P3;
flag1=1;
P3=0xf0;
}
}
else
{
if(P3!=0xf0)
{
temp1=temp0|P3;
}
flag1=0;
P3=0x0f;
}
count=0;
}
P0=0XFF;
void timer1() interrupt 3//定时器1
{
//hz1=100;
//select=1;
//hz1=120;
TH1=TH1_TMP;
TL1=TL1_TMP;
//TH1=(65536-1000)/256;
//TL1=(65536-1000)%256;
p20=~p20;
}
void init()
{
P3=0x0f;
TMOD=0x01|0x10;
EA=1;
ET1=1;
ET0=1;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
//TH1=(65536-1000)/256;
//TL1=(65536-1000)%256;
//TR1=1;
case 0xed:b=5;break;
case 0xdd:b=6;break;
case 0xbd:b=7;break;
case 0x7d:b=8;break;
case 0xeb:b=9;break;
case 0xdb:b=0;break; //原为s10,此处代表数字0
case 0x7b:b=12;break;//s11为确认键
wela=1;
P0 = ~( 1<<(5-select) );
wela=0;
dula=1;
P0=table[HZ[select]];
dula=0;
select++;
if(select==4)
select=0;
}
/////////////////////////////////////////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////
void timer0() interrupt 1//定时器0
{
count=count+1;
TH0=(65536-5000)/256;
HZ[1]=HZ[0];
HZ[0]=b;
}
}
b=17;
}
}
}
////////////////////////////////////////////////////////////////////////////
////////////////////////// /////////////////////////////////////////////////////
合集下载

STC51单片机的函数信号发生器(c语言)

STC51单片机的函数信号发生器(c语言)

STC51单片机的函数信号发生器(c语言)————————————————————————————————作者:————————————————————————————————日期:基于51单片机的函数信号发生器设计报告摘要本系统利用单片机AT89C52采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生10Hz—10kHz的波形。

通过键盘来控制四种波形的类型选择、拨码开关控制频率的变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。

关键词:单片机AT89S52、DAC0832、液晶1602目录1. 系统设计1.1 设计要求1.2方案设计与论证1.2.1 信号发生电路方案论证 1.2.2 单片机的选择论证1.2.3 显示方案论证1.2.4 键盘方案论证1.3 总体系统设计1.4 硬件实现及单元电路设计1.4.1 单片机最小系统的设计1.4.2 波形产生模块设计1.4.3 显示模块的设计1.4.4 键盘模块的设计1.5 软件设计流程1.6 源程序2. 输出波形的种类与频率的测试2.1 测试仪器及测试说明2.2 测试结果3、附录3.1 参考文献3.2 附图1、系统设计经过考虑,我们确定方案如下:利用AT89C52单片机采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。

1.1、设计要求1)、利用单片机采用软件设计方法产生四种波形2)、四种波形可通过键盘选择3)、波形频率可调4)、需显示波形的种类及其频率1.2方案设计与论证1.2.1 信号发生电路方案论证方案一:通过单片机控制D/A,输出四种波形。

51单片机实现波形发生器

51单片机实现波形发生器

51单片机实现波形发生器摘要这个系统是基于AT89C51单片机的波形信号发生器。

使用AT89C51单片机作为控制核心,该系统由数字/模拟转换电路(DAC0832)、运放电路(OP07)、按键电路和6位数码管等组成。

通过按键可控制方波、三角波、正弦波的产生,并且用数码管显示其对应的频率和波形的类型。

这个设计方法简单、性能良好,这个系统可在多种需要低频信号的场所使用,它具有良好的实用性。

关键词:AT89C51 数模转换电路数码管信号发生器1 总体方案设计本次设计的任务是设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。

示意图如下:基本要求如下:(1)具有产生正弦波、方波周期性波形的功能;(2)输出波形的频率范围为100Hz~20kHz(非正弦波频率按10次谐波计算);重复频率可调,频率步进间隔≤100Hz;(3)输出波形幅度范围0~5V(峰-峰值),可按步进0.1V(峰-峰值)调整;(4)具有显示输出波形的类型、重复频率(周期)和幅度的功能。

1.1 方案论证方案一:采用单片函数发生器可产生正弦波、方波等,操作简单易行,用 D/A 转换器的输出来改变调节电压,可以实现数控调整频率,但产生信号的频率稳定度不高。

方案二:利用芯片组成的电路输出波形,MAX038是MAXIM公司生产的一个只需要很少外部元件的精密高频波形产生器,它能产生准确的高频正弦波、三角波、方波。

输出频率和占空比可以通过调整电流、电压或电阻来分别地控制。

所需的输出波形可由在A0和A1输入端设置适当的代码来选择,且具有输出频率范围宽、波形稳定、失真小、使用方便等特点。

方案三:采用Atmel公司的AT89C51单片机编程方法实现,该方案可以通过编程的方法控制信号波形的频率和幅度,而在硬件电路不便的情况下,通过程序实现频率的变化和输出波形的选择,并同时在显示器显示相应的结果。

方案一输出信号频率不够稳定;方案二成本高,程序复杂度高;方案三软硬件结合,硬件成本低,软件起点低,用汇编语言即可完成,优化型相对比较好,容易实现,且满足设计要求。

频率可调的快速方波电脉冲发生器-

频率可调的快速方波电脉冲发生器-

本科毕业论文(设计)题目:频率可调的快速方波电脉冲发生器姓名:专业: 测控技术与仪器学院: 光电工程学院学号:指导教师:职称:2012年 4 月15 日摘要 (4)一、前言 (4)二、设计应用与指标 (5)三、总体结构 (6)四、各模块电路分析 (6)(一)内触发振荡电路 (7)(二)手动按键触发 (8)(三)触发方式选择电路 (8)(四)单稳态多谐振荡器 (9)(五)快速触发信号产生电路 (10)(六)可调延迟线(七)方波成形电路(八)低压稳压电源电路(九)高压稳压电源电路五、全文总结和建议 (17)(一)总结 (17)(二)给实际研究方案的建议 (17)致谢 (17)参考文献 (17)Abstract (18)本文对基于绝缘薄膜开关的方波脉冲发生器的设计及整体结构作了较详细的介绍, 并分析了方波发生器放电回路杂散参数对方波前沿的影响。

整机可产生幅值115~ 8kV、前沿小于115ns、脉宽40ns 的方波脉冲。

关键词:薄膜开关; 高电压; 方波发生器一、前言脉冲信号是一种离散信号,形状多种多样,与普通模拟信号(如正弦波)相比,波形之间在时间轴不连续(波形与波形之间有明显的间隔)但具有一定的周期性是它的特点。

最常见的脉冲波是矩形波(也就是方波)。

脉冲信号可以用来表示信息,也可以用来作为载波,比如脉冲调制中的脉冲编码调制(PCM),脉冲宽度调制(PWM)等等,还可以作为各种数字电路、高性能芯片的时钟信号。

所谓脉冲信号表现在平面坐标上就是一条有无数断点的曲线,也就是说在周期性的一些地方点的极限不存在,比如锯齿波,也有电脑里用到的数字电路的信号,0,1。

脉冲信号,也就是像脉搏跳动这样的信号,相对于直流,断续的信号,如果用水流形容,直流就是把龙头一直开着淌水,脉冲就是不停的开关龙头形成水脉冲。

你把手电打开灯亮,这是直流,你不停的开关灯亮、熄,就形成了脉冲,开关速度的快慢就是脉冲频率的高低。

二、设计应用与指标随着科学技术的发展, 在许多科学研究领域和军事技术中, 脉冲前沿在纳秒一级的脉冲技术得到广泛应用, 如核物理和电子导弹的研究及电磁脉冲的测量等, 这就需要对脉冲进行准确测量。

基于NE555的频率可调方波发生器电路

基于NE555的频率可调方波发生器电路

基于NE555的频率可调⽅波发⽣器电路
很多时候在测试的时候会⽤到不同频率的信号源,在没有此电路前最简单的⽅法就是写个单⽚机程序让单⽚机跑起来去让IO⼝输出⼀个⽅波信号,这样的好处是频率可以调,占空⽐也可以调。

弊端就是⿇烦。

往往在实际测试使⽤的时候不需要多精准的信号,下⾯就是最近做的⼀个电路,⽤NE555芯⽚做的,外围⼏个电阻电容,频率有1Hz、10Hz、100Hz、1KHz、10KHz、100KHz六种,⽅波占空⽐为50%,这个电路做起来简单,成本也低,其中R3和D1可以去除,我是为了直观看到信号画上去的⼀个指⽰灯。

此电路经过protues仿真测试OK,但因时间关系还没有实际做成PCB实物。

下⾯是仿真界⾯
By Urien
2019年11⽉22⽇ 11:45:54。

用80c51单片机产生方波的程序设计

用80c51单片机产生方波的程序设计

一、实验目的和要求
1、掌握定时器/计数器计数功能的使用方法。

2、掌握定时器/计数器的中断、查询使用方法。

3、掌握Proteus软件与Keil软件的使用方法。

4、掌握单片机系统的硬件和软件设计方法。

二、设计要求
1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计
数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。

2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,设定计
数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。

三、电路原理图
四、实验程序流程图和程序清单
五、实验结果
六、实验总结
通过本次实验加强了对于定时器与计数器的运用,熟悉了定时器与计数器的中断查询不同方式的工作方法。

七、思考题
利用定时器0,在P1.0口线上产生周期为200微秒的连续方波,利用定时器1,对P1.0口线上波形进行计数,满50个,则取反P1.1口线状态,在P 1.1口线上接示波器观察波形。

(整理)基于MCS-51单片机的频率可调的方波发生器设计 2ahu.

(整理)基于MCS-51单片机的频率可调的方波发生器设计  2ahu.

基于MC51单片机的频率可调的方波信号发生器用单片机产生频率可调的方波信号。

输出方波的频率范围为1Hz-200Hz,频率误差比小于0.5%。

要求用“增加”、“减小”2 个按钮改变方波给定频率,按钮每按下一次,给定频率改变的步进步长为1Hz,当按钮持续按下的时间超过2 秒后,给定频率以10 次/秒的速度连续增加(减少),输出方波的频率要求在数码管上显示。

用输出方波控制一个发光二极管的显示,用示波器观察方波波形。

开机默认输出频率为5Hz。

1:系统设计(1)分析任务要求,写出系统整体设计思路任务分析:方波信号的产生实质上就是在定时器溢出中断次数达到规定次数时,将输出I/O 管脚的状态取反。

由于频率范围最高为200Hz,即每个周期为5ms(占空比1:1,即高电平2.5ms,低电平2.5 ms),因此,定时器可以工作在8 位自动装载的工作模式。

涉及以下几个方面的问题:按键的扫描、功能键的处理、计时功能以及数码管动态扫描显示等。

问题的难点在按键连续按下超过2S 的计时问题,如何实现计时功能。

系统的整体思路:主程序在初始化变量和寄存器之后,扫描按键,根据按键的情况执行相应的功能,然后在数码显示频率的值,显示完成后再回到按键扫描,如此反复执行。

中断程序负责方波的产生、按键连续按下超过2S 后频率值以10Hz/s 递增(递减)。

(2)选择单片机型号和所需外围器件型号,设计单片机硬件电路原理图采用MCS51 系列单片机At89S51 作为主控制器,外围电路器件包括数码管驱动、独立式键盘、方波脉冲输出以及发光二极管的显示等。

数码管驱动采用2 个四联共阴极数码管显示,由于单片机驱动能力有限,采用74HC244 作为数码管的驱动。

在74HC244 的7 段码输出线上串联100 欧姆电阻起限流作用。

独立式按键使用上提拉电路与电源连接,在没有键按下时,输出高电平。

发光二极管串联500欧姆电阻再接到电源上,当输入为低电平时,发光二极管导通发光。

《单片机原理与应用》频率占空比可调的方波发生器

《单片机原理与应用》频率占空比可调的方波发生器1 单片机介绍及仿真原理MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。

称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片”解决方案。

该系列单片机多应用于需要电池供电的便携式仪器仪表中。

单片机有集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。

单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。

单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。

另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。

本课题讨论的方波发生器的核心是目前应用极为广泛的 51系列单片机。

本次课程设计运用的仿真软件是Proteus。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051ARM、8086和MSP430等。

在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

2 设计原理本设计通过单片机80C51的P3口的P3.0和P3.1两个引脚输出两路方波信号,通过P1口的矩阵键盘(只用到其中4个)来控制输出方波的相位和频率变化以及复位。

基于单片机的方波发生器设计


2、方案的设计与选择

本设计用到一个AT89C52微处理器,2个按键9C52用到两个定时器,定时器0和定时器1。其
中定时器0工作在定时方式1下,决定方波频率;
定时器1工作在定时方式1下,用来设定占空比。
2、方案的设计与选择

按键1控制方波信号频率。按下按键1时,进行频率的调 节,占空比不变。1键按下时,频率增加10Hz。频率最 大值为300Hz,当频率大于最大值时,重新赋值为50Hz。
5、实验结果仿真

2) 按下按键 1 调节方波频率。方波波形频率 不断增加,而占空比依然为 50%未变。
5、实验结果仿真

3) 重新在初始状态下进行仿真。 按下按键 3 调节方波占空比, 方波波形的占空比发生变化, 而频率未变。
6

结果分析
在本次设计中, 方波信号发生器的频率和占空比都 独立可调。 输出方波信号的占空比范围为 0%— 100%,调节精度为 10%;频率范围为 50Hz— 300Hz,调节精度为 10Hz。频率和占空比之间的 调节彼此独立。 进行频率调节时, 每次可以增加 10Hz,超过 300Hz输出为 50Hz 的方波;进行占 空比调节时,每次可增加10%,超出 100%时输出 占空为 0%方波。
4、软件设计

方波发生器的软件设计包括: 主程序 延时子程序 系统初始化程序 键盘中断子程序 定时器中断子程序
4.1 主程序

主程序包括系统初始化,和一个死循环系统。当有中断请求信号
产生时,跳出循环, 执行中断程序。
void main(void)
{ inti(); //系统初始化 while(1) {} }
基于单片机方波发生器设计

用单片机进行方波发生器的课程设计

学院课程设计报告课程名称:院部:专业班级:学生姓名:指导教师:完成时间:报告成绩:_____________________________一、概述 ------------------------------------------------------------------ 31.1、设计内容 ------------------------------------------------------ 31.2、设计的基本要求 ------------------------------------------------ 3二、方波发生器设计方案 ---------------------------------------------------- 42.1、方案介绍 ------------------------------------------------------ 42.2、方波发生器的原理与功能 ---------------------------------------- 4三、系统的硬件设计 -------------------------------------------------------- 63.1、单片机最小系统 ------------------------------------------------ 63.2、小键盘接口电路 ------------------------------------------------ 73.3、LED显示电路--------------------------------------------------- 8四、系统的软件设计 -------------------------------------------------------- 94.1、主程序 -------------------------------------------------------- 94.2、系统初始化子程序 --------------------------------------------- 104.3、显示子程序 --------------------------------------------------- 104.4、键盘扫描程序 ------------------------------------------------- 114.5、定时器中断子程序 --------------------------------------------- 12五、调试与性能分析 ------------------------------------------------------- 135.1硬件调试------------------------------------------------------- 135.2软件调试------------------------------------------------------- 13六、设计体会 ------------------------------------------------------------- 14 参考文献 ----------------------------------------------------------------- 15 附录A:基于单片机方波发生器的原理图-------------------------------------- 16 附录B:基于单片机方波发生器的程序清单------------------------------------ 17方波发生器设计一、概述单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。

STM32F030控制AD9851产生10Mhz正弦波(EWARM6.7开发环境)

AD9851是一个DDS芯片,主时钟周期达到180MHz,由外部时钟6倍频得到。

输出频率范围可以从1Hz到70MHz,频率控制精度很高。

参数如下:输出频率的计算公式如下:在这里采用datasheet里用的数据使输出频率为10MHz,更改频率控制字W1W2W3W4可以得到其他频率。

复位时序:频率控制字写入时序:AD9851有两种电路连接方法,并行和串行。

在这里采用串行的方式。

将如下main.c程序复制进去,并编译运行//程序描述:利用STM32F030控制DDS芯片AD9851产生10MHz正弦波信号/**********************************************************硬件电路端口连接cpu ad9851PC0----------WCLKPC1----------FQUDPC2----------RESTPA0~PA7--------D0~D7VCC----------------5VGND-----------GND----------------GND************************************************************//* Includes ------------------------------------------------------------------*/#include "stm32f0xx.h"/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*/#define uchar unsigned char#define uint unsigned inttypedef char int8; // -128~127typedef unsigned char uint8; // 0~255typedef int int16; // -32768~32767typedef unsigned int uint16; // 0~65535typedef long int32; // -2147483648~2147483647typedef unsigned long uint32; // 0~4294967295/* Private function prototypes -----------------------------------------------*//* Private functions ---------------------------------------------------------*/static __IO uint32_t TimingDelay;void RCC_Configuration(void);void GPIO_Configuration(void);void TimingDelay_Decrement(void);void Delay(__IO uint32_t nTime);void reset_ad9851(void);void set_ad9851(uint32 ad9851_frq);/* main program*param:*description:*/int main(void){RCC_Configuration( );GPIO_Configuration( );reset_ad9851( );set_ad9851(0x0e38e38e); //fout=10MHz}//Initial the system clockvoid RCC_Configuration(void){RCC_ClocksTypeDef RCC_Clocks;RCC_GetClocksFreq(&RCC_Clocks);SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);/* GPIOC Periph clock enable */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);}/* Configure PC8 and PC9 in output pushpull mode */void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOC, &GPIO_InitStructure);}//sub fuctionvoid Delay(__IO uint32_t nTime){TimingDelay = nTime;while(TimingDelay != 0);}void TimingDelay_Decrement(void){if (TimingDelay != 0x00){TimingDelay--;}}//step1:reset the ad9851void reset_ad9851(void){int reset_i;GPIO_SetBits(GPIOC , GPIO_Pin_2);for(reset_i=20; reset_i>0; reset_i--);GPIO_ResetBits(GPIOC , GPIO_Pin_2);for(reset_i=200; reset_i>0; reset_i--);}//step2:write the frequency and phase parameter to the ad9851void set_ad9851(uint32 ad9851_freg){uint8 w[5];uint8 i=0;int set_i;w[0]=9;w[1]=(ad9851_freg&0xff000000)>>24;w[2]=(ad9851_freg&0x00ff0000)>>16;w[3]=(ad9851_freg&0x0000ff00)>>8;w[4]=(ad9851_freg&0x000000ff);GPIO_ResetBits(GPIOC , GPIO_Pin_1);for(i=0;i<5;i++){GPIO_ResetBits(GPIOC , GPIO_Pin_0);for(set_i=20; set_i>0; set_i--);GPIO_Write(GPIOA,w[i]);for(set_i=20; set_i>0; set_i--);GPIO_SetBits(GPIOC , GPIO_Pin_0);for(set_i=20; set_i>0; set_i--);}//don't forger to reset the fqud port after write fqud parameterGPIO_ResetBits(GPIOC , GPIO_Pin_1);for(set_i=20; set_i>0; set_i--);GPIO_SetBits(GPIOC , GPIO_Pin_1);for(set_i=20; set_i>0; set_i--);GPIO_ResetBits(GPIOC , GPIO_Pin_1);}#ifdef USE_FULL_ASSERT/*** @brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval None*/void assert_failed(uint8_t* file, uint32_t line){/* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* Infinite loop */while (1){}}#endif附上实物拍照及正弦波波形图:怎么样,是不是很漂亮。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档