方波的占空比和频率调节-_第1页
方波的占空比和频率调节-_第2页
方波的占空比和频率调节-_第3页
方波的占空比和频率调节-_第4页
方波的占空比和频率调节-_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、/*/程序功能简介:本程序产生15HZ50KHZ的方波,并且实现频率和脉宽的独立调制,即可在改变频率的同时不改变脉宽,再改变脉宽的同时不改变频率;同时设置两个调节步长-在KEY键按下时,粗调,没有按下时,细调;程序思路:本程序用到两个定时器-定时器0和定时器1,其中定时器0工作在定时方式下,决定方波的频率;定时器1,同样工作在定时方式下,用于设定脉宽;/*/ #include "reg52.h"#include "math.h"#define uchar unsigned char#define uint unsigned int#define ALL

2、65536 /定时器工作方式1时,最大基数长度65536; #define F_osc 12000000 /晶振频率12M;/*各端口定义*/sbit KEY_F_UP=P02; /频率上调按钮;sbit KEY_F_DOWN=P03; /频率下调按钮;sbit KEY_W_UP=P04; /脉宽上调按钮;sbit KEY_W_DOWN=P05; /脉宽下调按钮;sbit KEY=P06; /粗细调节按钮-按下为粗调,否则为细调; sbit OUTPUT=P10; /波形输出;/*全局变量声明;*/uchar TIMER0_H,TIMER0_L,TIMER1_H,TIMER1_L; /定时器0

3、和定时器1的初值设置;uchar PERCENT=50; /初始占空比;uchar FLAG_F=0,FLAG_W=0; /频率调节标志和脉宽调制标志; uint FREQ=1000; /初始频率;float temp; /临时全局变量,用于数据传递;/*函数声明;*/void delay(uchar t; /延时函数,用于按键去抖;void init(; /初始化函数,用于定时器的初始化;void calculate_F(; /频率计算函数,当频率变化,计算出定时器0初值; void calculate_W(; /脉宽计算函数,脉宽变化时,计算出定时器1初值; void key_scan(;

4、 /按键扫描函数;void timer0(; /定时器0中断函数;void timer1(; /定时器1中断函数;/*/函数名称:delay(;/入口参数:uchar t;/出口参数:无;/函数功能:延时;/*/void delay(uchar tuchar i,j;while(t-for(i=0;i<100;i+for(j=0;j<100;j+;/*/ /函数名称:calculate_F(;/入口参数:无;/出口参数:无;/函数功能:频率计算函数,当频率变化,计算出定时器0初值; /*/ void calculate_F(temp=ALL-F_osc/12.0/FREQ;TIME

5、R0_H=(uinttemp/256;TIMER0_L=(uinttemp%256;/*/ /函数名称:calculate_W(;/入口参数:无;/出口参数:无;/函数功能:脉宽计算函数,脉宽变化时,计算出定时器1初值; /*/ void calculate_W(float TEMP;TEMP=(1-PERCENT/100.0*ALL+temp*PERCENT/100.0;TIMER1_H=(uintTEMP/256;TIMER1_L=(uintTEMP%256;/*/函数名称:key_scan(;/入口参数:无;/出口参数:无;/函数功能:按键扫描函数;/*/void key_scan(de

6、lay(4;if(!KEY_F_UP /频率上调键按下;FLAG_F=1; /置标志位;if(!KEYFREQ+=10;elseFREQ+;if(FREQ>50000FREQ=1;else if(!KEY_F_DOWN /频率下调键按下; FLAG_F=1; /置标志位;if(!KEYFREQ-=10;elseFREQ-;if(FREQ<1FREQ=50000;else if(!KEY_W_UP /脉宽上调键按下; FLAG_W=1; /置标志位;if(!KEYPERCENT+=5;elsePERCENT+;if(PERCENT>99PERCENT=1;else if(!KE

7、Y_W_DOWN /脉宽下调键按下; FLAG_W=1; /置标志位;if(!KEYPERCENT-=5;elsePERCENT-;if(PERCENT<1PERCENT=99;else ;/*/ /函数名称 timer0(;/入口参数:无;/出口参数:无;/函数功能:定时器0中断函数;/*/ void timer0( interrupt 1TH0=TIMER0_H;TL0=TIMER0_L;TR1=1; /开定时器1;OUTPUT=1;/*/ /函数名称 timer1(;/入口参数:无;/出口参数:无;/函数功能:定时器1中断函数;/*/ void timer1( interrupt

8、3TH1=TIMER1_H;TL1=TIMER1_L;TR1=0;/关定时器1,一定要这一步,因为定时器1的定时短于定时器0;OUTPUT=0;/*/函数名称 init(;/入口参数:无;/出口参数:无;/函数功能:定时器初始化函数;/*/void init(TMOD=0x11; /定时器0和定时器1都工作在方式1,16位计数器;calculate_F(; /初始为1KHZ,占空比为50%;calculate_W(;TH0=TIMER0_H;TL0=TIMER0_L;TH1=TIMER1_H;TL1=TIMER1_L;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;/*/函数名称 main(;/入口参数:无;/出口参数:无;/函数功能:主函数入口;/*/main(init(;

温馨提示

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

评论

0/150

提交评论