利用51单片机产生一个频率为10HZ的矩形波 需要电路图 数据。占空比可调

如题所述

#include "reg51.h"

#define  uchar  unsigned  char

sbit  PWM = P2^0;

uchar  pwm_zq = 200;  //PWM周期  10HZ是100ms,500us*200 = 100ms
uchar  pwmH_i = 0;
uchar  pwm_i = 0;


void initTimer(void)
{
  TMOD=0x1;  //500us定时
  TH0=0xfe;
  TL0=0xc;
}

void main(void)
{
  initTimer();
  TR0=1;
  ET0=1;
  EA=1;
  pwmH_i = 100;
  while(1)
  {
    ;
  }
}

void timer0(void) interrupt 1
{
  TH0=0xfe;
  TL0=0xc;
  if(pwm_i<pwm_zq)
  {
    pwm_i++;
    if(pwm_i>=pwmH_i)
    {
      PWM = 0;
    }
  }
  else
  {
    PWM = 1; 
    pwm_i = 0;
  }
}

 

//pwmH_i越大,占空比越大。你自己根据实际情况设置。

追问

兄弟 求个比较完整的PROTEUS电路图

追答

仿真图不需要完整,就是个51的最小系统,电源,晶振复位电路,OK。没什么东西啊。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-02

#include<reg51.h>   // 用定时器0  控制 PWM
sbit P1_0 = P1^0;   // P1.0  PWM  输出
sbit key10 = P3^2;   // 调节 PWM0  占空比
sbit key11 = P3^3;
unsigned char PWM0 = 2;     // 占空比调整
unsigned char counter = 0;  // 计数的
bit  tt1;      // 标志位
void main()
{
 TMOD=0x01;
 TH0=(65536-5000)/256;      // 定时时间  可以修改
 TL0=(65536-5000)%256;   // 12 MHz
 EA=1;
 ET0=1;
 TR0=1;
 while(1)
 {                       // 调节 PWM0  占空比
 if(key10==0 && tt1==0) {tt1 = 1; PWM0++;} // K1、K2
 if(key11==0 && tt1==0) {tt1 = 1; PWM0--;} 
 if(key10==1 && key11==1) tt1=0;
 }
}
void Timer0(void) interrupt 1 // 定时器0   PWM 控制
{                           
  TH0=(65536-5000)/256;      // 定时时间  可以修改
  TL0=(65536-5000)%256; 
  counter++;
  if(counter >= 20) counter = 0;   // PWM  20级  可以修改
  if(counter >= PWM0) P1_0 = 0; else P1_0 = 1;
}

第2个回答  2013-04-07
周期是 100ms。

占空比,要怎么调呢?

参考一下吧:

http://hi.baidu.com/do_sermon/item/5011f5c4c8d1bd2b47d5c00d追问

利用51单片机产生4路矩形波:A,B,C,D。并且分为两路(一路快一路慢)当一路中的A处于高电平时B处于低电平当A处于低电平时B处于高电平。CD与AB相同。求帮忙

追答

呵呵,这么复杂,是在搞工程项目啊!

等等看吧,很快就会有人,提供QQ联系方式,进行有偿服务的。

第3个回答  2013-04-02
可以提供程序,原理图,仿真。但不是无偿。需要的可以私聊