占空比输出程序c语言,关于51单片机输出频率和占空比可调的PWM波程序问题
//程序功能简介:本程序产生15HZ~~~50KHZ的方波,并且实现频率和脉宽的独立调制,即可
//在改变频率的同时不改变脉宽,再改变脉宽的同时不改变频率;同时设置
//两个调节步长------在KEY键按下时,粗调,没有按下时,细调;
//程序思路: 本程序用到两个定时器------定时器0和定时器1,其中定时器0工作在定时方式下,
//决定方波的频率;定时器1,同样工作在定时方式下,用于设定脉宽;
//------------------------------------------------------------------------------------
#include
#define uint unsigned int
#define ALL 65536 //定时器工作方式1时,最大基数长度 65536;
#define F_osc 12000000 //晶振频率12M;
sbit KEY_F_DOWN=P0^3; //频率下调按钮;
sbit KEY_W_UP=P0^4; //脉宽上调按钮;
sbit KEY_W_DOWN=P0^5; //脉宽下调按钮;
sbit KEY=P0^6; //粗细调节按钮-----按下为粗调,否则为细调;
sbit OUTPUT=P1^0; //波形输出;
uchar PERCENT=50; //初始占空比;
uchar FLAG_F=0,FLAG_W=0; //频率调节标志和脉宽调制标志;
uint FREQ=50000; //初始频率;
float temp; //临时全局变量,用于数据传递;
void init(); //初始化函数,用于定时器的初始化;
void calculate_F(); //频率计算函数,当频率变化,计算出定时器0初值;
void calculate_W(); //脉宽计算函数,脉宽变化时,计算出定时器1初值;
void key_scan(); //按键扫描函数;
void timer0(); //定时器0中断函数;
void timer1(); //定时器1中断函数;
{
uchar i,j;
{
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
}
{
temp = ALL - F_osc/12.0/FREQ;
TIMER0_L = (uint)temp%256;
}
{
float TEMP;
TIMER1_L = (uint)TEMP%256;
}
{
delay(4);
{
FLAG_F=1; //置标志位;
FREQ+=10;
FREQ++;
FREQ=1;
}
{
FLAG_F=1; //置标志位;
FREQ-=10;
FREQ--;
FREQ=50000;
}
{
FLAG_W=1; //置标志位;
PERCENT+=5;
PERCENT++;
PERCENT=1;
}
{
FLAG_W=1; //置标志位;
PERCENT-=5;
PERCENT--;
PERCENT=49;
}
{
TH0=TIMER0_H;
TL0=TIMER0_L;
TR1=1; //开定时器1;
OUTPUT=1;
}
{
TH1=TIMER1_H;
TL1=TIMER1_L;
TR1=0; //关定时器1,一定要这一步,因为定时器1的定时短于定时器0;
OUTPUT=0;
}
{
TMOD=0x11; //定时器0和定时器1都工作在方式1,16位计数器;
calculate_F(); //初始为1KHZ,占空比为50%;
calculate_W();
TL0=TIMER0_L;
TL1=TIMER1_L;
ET1=1;
TR1=1;
}
{
init();
{
key_scan();
if(FLAG_F) //改变频率时要注意要进行脉宽的重新设置;
{
calculate_F();
calculate_W();
FLAG_F=0;
}
{
calculate_W();
FLAG_W=0;
}
}
}
占空比输出程序c语言,关于51单片机输出频率和占空比可调的PWM波程序问题相关推荐
- 无线控制模块c语言编程,51单片机对无线模块nRF24L01简单的控制收发程序
它的一些物理特性如工作频段.供电电压.数据传输速率就不详细介绍了,直接上代码. 1.首先是发送端: // Define SPI pins #include #define uchar unsigned ...
- 基于51单片机数字温度报警器_DS18B20可调上下限
51单片机数字温度报警器_DS18B20可调上下限 (仿真+程序+原理图) 原理图:Altium Designer 仿真版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言: ...
- c语言编写51单片机中断程序,执行过程是怎样的?
Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序: #include<reg52.h> void main(void) { EA=1; //开放总中断 ...
- 【C 语言实现51单片机计时器】
C语言实现51单片机计时器 代码如下 接线如下 代码如下 #include <reg51.h>sbit Hc38A=P2^2; sbit Hc38B=P2^3; sbit Hc38C=P2 ...
- 温度报警程序c语言设计,51单片机课程设计:基于DS18B20的温度报警器
51单片机课程设计:基于DS18B20的温度报警器 本程序用于读取DS18B20温度,同时具备报警功能,工程分为3个文件,main.c.temp.c.temp.h,经本人修改部分代码,适用于吉林农业大 ...
- keil流水灯c语言程序两个一起亮,51单片机学习之陆 —— 1.2 第一个c51程序(点亮流水灯)...
原标题:51单片机学习之陆 -- 1.2 第一个c51程序(点亮流水灯) 由于学校的板子跟我买的板子有些差异,为了大家的阅读,以后的所有程序编写烧录都以老师发的板子为主. 1 事先准备 a 驱动安装, ...
- 51单片机七人多数表决器仿真设计( proteus仿真+程序+报告+讲解视频)
51单片机七人多数表决器仿真设计( proteus仿真+程序+报告+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0033 51 ...
- 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告)
本设计: 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告) Proteus仿真版本:proteus7.8 程序编译器:keil 4 编程语言:C语言 编号C0018 ----本设计分享下 ...
- 51单片机播放音乐(三):PWM播放任意波形
51单片机播放音乐(三):PWM播放任意波形 原理 PWM 仿真电路图 音频文件转成PWM代码 单片机代码 仿真输出波形 本文完整源码 原理 PWM 详细的参考这篇文章,这里简单说一下 脉冲宽度调制( ...
最新文章
- javascript小数相减会出现一长串的小数位数的原因
- 实现数据集多( 高 )维可视化(附代码)
- 成功解决pandas\core\indexing.py:179: SettingWithCopyWarning: A value is trying to be set on a copy of a
- 三千多天之前我没有编辑完的技术文档
- MongoDb分片集群认证
- 华为ipd项目管理流程_IPD:一套卓越的产品开发经营体系
- GrowingIO创始人兼CEO张溪梦:互联网下半场,数据如何驱动企业突破增长重围?
- “呵呵呵”之后 B站又申请了“一键三连”商标
- 使用Kotlin的Android Toast
- 使用boost中的线程池
- C语言段错误的有用总结
- java获取当前周数_java获取周数的方法
- 在vc++如何响应键盘和鼠标事件-visual c++
- 基于wifi的物联网技术,主要有哪些优势?
- 【WPS表格】函数的3种引用方式,4种切换模式
- ShuZu数组中插入一个数
- 前端切图实战(PSD设计稿转化为前端)
- 基于eBPF的开源工具Kindling之page-fault事件可观测性实现机制
- Farmer John 木瓜地 C++
- ovs-docker实现容器网络vlan隔离
热门文章
- alpine linux 安装教程,Alpine linux硬盘安装
- 计算机网络脆弱性评估方法研究
- SpringBoot实现zip文件下载
- C语言经典例题100道(没错,就是你要找的那个)
- 甲方和乙方怎么区别?
- 联想服务器TS130主板芯片组,【ThinkServer TS130参数】ThinkServer TS130系列服务器参数-ZOL中关村在线...
- LED灯光偏色的原因
- VB 让图片自动适应picturebox控件大小的方法
- 电路设计基础--光耦接口电路的设计和参数选取--高速光耦TLP109
- matlab目标跟踪物流应用,目标跟踪系统的MATLAB 源程序包