51单片机pwm调光电路参考源程序:
int potpin=0//定义模拟接口0
int ledpin=11//定义数字接口11(PWM 输出)
int val=0// 暂存来自传感器的变量数值
void setup()
{
pinMode(ledpin,OUTPUT)//定义数字接口11 为输出
Serial.begin(9600)//设置波特率为9600
//注意:模拟接口自动设置为输入
}
void loop()
{
val=analogRead(potpin)// 读取传感器的模拟值并赋值给val
Serial.println(val)//显示val 变量
analogWrite(ledpin,val/4)// 打开LED 并设置亮度(PWM 输__________出最大值255)
delay(10)//延时0.01 秒
}
原理图:
PWM简介:
Pulse Width Modulation 就是通常所说的PWM,译为脉冲宽度调制,简称脉宽调制。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法,由于计算机不能输出模拟电压,只能输出0 或5V 的的数字电压值,我们就通过使用高分辨率计数器,利用方波的占空比被调制的方法来对一个具体模拟信号的电平进行编码。
//程序两个按键接的是外部中断0、1的输入口,按下键就触发相应的中断//变量和变暗是PWM来控制的,具体在定时中断中说明
#include <reg51.h>
sbit K1 =P3^2 //亮度增加键
sbit K2 =P3^3 //亮度减少键
sbit led=P0^0
bit t=0
unsigned char zhankongbi=0
unsigned char a=0
void delay (unsigned char i)
void main ()
{
EA=1
EX0=1
IT0=1
EX1=1
IT1=1
TR0=1 //启动定时器
ET0=1 //允许定时器0中断
TMOD=0x02
TH0=(65536-1000)/256
TL0=(65536-1000)%256
while(1)
}
void delay (unsigned char i)
{
unsigned char a
while(i--)
{
for(a=120a>0a--)
}
}
void zengjia () interrupt 0 // 变亮按键
{
if(K1==0)
{
delay (1)
if(K1==0)
{
t=1
}
}
}
void jianshao () interrupt 2 // 变暗按键
{
if(K2==0)
{
delay (1)
if(K2==0)
{
t=0
}
}
}
void time () interrupt 1
{
TH0=(65536-1000)/256
TL0=(65536-1000)%256
if(t)//当按下变量按键时
{
a++
if(a<=3)
{
led=1 //LED控制高电平为7毫秒
}
else if(a<=10)
{
led=0 //LED控制低电平为3毫秒
}
else if(a==11)
{
a=0
}
}
else//当按下变暗键时
{
a++
if(a<=7)
{
led=1 //LED控制高电平为3毫秒
}
else if(a<=10)
{
led=0 //LED控制低电平为7毫秒
}
else if(a==11)
{
a=0
}
}
}
//可见变亮开关按下LED控制PWM脉宽比为7:3
//变暗开关按下LED控制PWM脉宽比为3:7
//这样就达到了控制LED亮暗的目的,这个程序没有实现亮到按的逐步变化。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)