#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。没什么东西啊。
#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;
}
利用51单片机产生4路矩形波:A,B,C,D。并且分为两路(一路快一路慢)当一路中的A处于高电平时B处于低电平当A处于低电平时B处于高电平。CD与AB相同。求帮忙
追答呵呵,这么复杂,是在搞工程项目啊!
等等看吧,很快就会有人,提供QQ联系方式,进行有偿服务的。