标题: 51单片机输出双路pwm电路 [打印本页]
作者: nbb123456 时间: 2018-5-31 14:54
标题: 51单片机输出双路pwm电路
51单片机两路pwm波输出程序(可根据情况设置多路)
#include<reg52.h>
unsigned char count;
sbit pwm1=P1^0;
sbit pwm2=P3^1;
sbit jia=P2^2;
sbit jan=P2^3;
sbit zuo=P2^4;
sbit you=P2^5;
unsigned char jd1,jd2,m1,m2;
//延时程序
void delay(unsigned int x)
{
unsigned char i,j;
for(i=x;i>0;i--)
for(j=125;j>0;j--);
}
//定时0.1ms,
void Timer0_Init()
{
TMOD=0x01;
IE=0x82;
TH0=0xff;//65436/256;
TL0=0x9c;//65436%256
TR0=1;
}
void Timer0_Int() interrupt 1//中断程序
{
TH0=0xff;
TL0=0x9c;
//m1=count;
//m2=count;
if(m1<jd1)
pwm1=1;
else
pwm1=0;
if(m2<jd2)
pwm2=1;
else
pwm2=0;
count++;
count%=200; //20m秒需要数200次
m1=count;
m2=count;
/********************************************************/
根据io口及pwm需要情况可加m3,m4,m5……
/******************************************************/
}
void keyscan()
{
if(jia==0)
{
delay(10);
if(jia==0)
{
jd1+=1;
//count=0;
if(jd1>=31)
jd1=30;
while(jia==0);
}
}
if(jan==0)
{
delay(10);
if(jan==0)
{
jd1--;
if(jd1<=0)
jd1=1;
while(jan==0);
}
}
if(zuo==0)
{
delay(10);
if(zuo==0)
{
jd2+=1;
if(jd2>=31)
jd2=30;
while(zuo==0);
}
}
if(you==0)
{
delay(10);
if(you==0)
{
jd2-=1;
if(jd2<=0)
jd2=1;
while(you==0);
}
}
}
void main()
{
jia=1;
jan=1;
pwm1=1;
pwm2=1;
zuo=1;
you=1;
jd1=1;
jd2=1;
count=0;
Timer0_Init();
while(1)
{
keyscan();
}
}
作者: 指北针 时间: 2020-3-13 11:59
请问你这方式路数多了会不会闪烁呢?比如说我出24路
作者: greenhand.. 时间: 2020-6-2 17:36
我想问一下这个jia jan zuo you是什么?
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |