版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 液压升降台安全操作规程培训
- 型煤皮带工安全操作规程培训
- 洞口、临边作业安全防护培训
- 钢管焊接与切割施工安全技术交底培训
- 北京代理公司注册合同范本
- 把钩工操作规程培训课件
- 电气防火及消防设施检测方案培训
- 导线架设安全针对性措施培训课件
- 主体阶段电工安全技术交底培训课件
- 重型板式给料机岗位操作规程培训
- 2026秋人教版九年级英语上册Unit1 The changing World分课时教学设计
- 2026年仁寿县医疗事业单位人员招聘考试参考题库及答案解析
- 统编版小学四年级语文上册全册习作范文+素材积累(新课标版)
- 中国邮政集团重庆分公司笔试真题
- 2026辽宁沈阳汽车集团有限公司所属企业沈汽华制(沈阳)汽车产业服务有限公司招聘12人笔试备考题库及答案详解
- 2026年水利知识竞赛必刷200题(突破训练)附答案详解
- 水利水电工程单元工程施工质量检验表与验收表(SLT631.7-2025)
- 新时代中职生礼仪规范全套课件
- 新东方岗位考核制度
- 工业自动化项目实施总结
- GB/T 18210-2025光伏方阵电流-电压特性的现场测量
评论
0/150
提交评论