标题:
51单片机pwm多级调试源程序
[打印本页]
作者:
kqk123
时间:
2018-7-7 10:08
标题:
51单片机pwm多级调试源程序
pwm多级调试
单片机源程序如下:
#include <reg51.h>
#include <math.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*PWM控制端*/
sbit DIM2 = P1^0;
sbit DIM1 = P1^1;
/*使能端*/
sbit EN1 = P3^7;
sbit EN2 = P3^6;
sbit dianyuan = P1^4;
/*按键*/
sbit key1 = P3^4;
sbit key2 = P3^5;
uchar t = 0; //每次定时器溢出加1
uchar PWM = 0; //占空比控制
void delayms(uint x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
void keyscan()
{
if((key1 == 0)&&(key2 == 0))
{
delayms(10);
if((key1 == 0)&&(key2 == 0))
{
PWM = 250; //0mA
}
}
else if((key1 == 0)&&(key2 == 1))
{
delayms(10);
if((key1 == 0)&&(key2 == 1))
{
PWM = 125; //60mA
}
}
else if((key1 == 1)&&(key2 == 0))
{
delayms(10);
if((key1 == 1)&&(key2 == 0))
{
PWM = 83; //80mA
}
}
else
PWM = 0;//120mA
}
void main()
{
TMOD = 0x00; //定时器0,工作模式2,8位定时模式
TH0 = 0xff; //写入预置初值(取值1-255,数越大PWM频率越高)
TL0 = 0xf5; //写入预置值 (取值1-255,数越大PWM频率越高)
TR0 = 1; //启动定时器
ET0 = 1; //允许定时器0中断
EA = 1; //允许总中断
// PWM = 125; //初始速度
EN1 = 1;
EN2 = 1;
while(1)
{
/* PWM += 1;
Delay10ms();
Delay10ms();
Delay10ms();
if(PWM == 250)
{
PWM=0;
}
*/
keyscan();
}
}
/*定时器0中断模拟PWM*/
void timer0() interrupt 1
{
t++; //每次定时器溢出加1
if(t == 250) //PWM周期 100个单位
{
t=0; //使t=0,开始新的PWM周期
DIM1=0; //输出低
DIM2=0; //输出低
}
if(PWM==t) //按照当前占空比切换输出为高电平
{
DIM1=1; //输出高
DIM2=1;
}
}
复制代码
所有资料51hei提供下载:
PWM.zip
(21.04 KB, 下载次数: 19)
2018-7-7 10:07 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1