IT民工

IT民工

0个粉丝

2

问答

0

专栏

0

资料

IT民工  发布于  2020-11-26 15:29:11
采纳率 0%
2个问答
人之初,性本善
2270

Hi3516 如何实现通过PWM控制LED亮度??

 

请教各位大佬
我在一个3516的板端看到一个pwm应用程序,可以控制两路led灯亮度,操作如下
./hi_pwm 1 50;
./hi_pwm 3 50;
如上两条命令, 可以控制两路LED灯的亮度,其中hi_pwm是一个文件, 1和3是两路不同LED灯,50就是亮度,设置0 则关闭,设置 100则是最亮的,请教一下各位前辈这是如何实现的?

我来回答
回答2个
时间排序
认可量排序

1

0个粉丝

1

问答

16

专栏

6

资料

1 2020-12-04 11:39:04
认可0

include

unsigned char a, b;

sbit K1 = P3^2; //定义两个调整占空比的按键

sbit K2 = P3^3;

//—————————————————————

void delay(unsigned int i)

{
unsigned char j;

while(i--)  for(j = 0; j < 60; j++); 

}

//—————————————————————

void main()

{
TMOD = 0x01; //T0定时方式1

TH0 = (65536 - 500) / 256; //500us@12MHz

TL0 = (65536 - 500) % 256;

TR0 = 1;

ET0 = 1;

EA = 1;



a = 0;

b = 10;

while(1)  {
  if(!K1) {delay(20); if(!K1) {b++; if(b > 19) b = 19; while(!K1);}}

  if(!K2) {delay(20); if(!K2) {b--; if(b < 1)  b = 1;  while(!K2);}}

  //以上两行是检查按键、延时消抖、修改占空比、等待按键释放,b = 1~19



  P0 = ((b / 10) << 4) + b % 10; //显示占空比等级

}

}

//—————————————————————

void time0() interrupt 1

{
TL0 = (65536 - 493) % 256; //补偿中断进入时间

TH0 = (65536 - 493) / 256; //500us@12MHz

a--;                       //a = 1~20

if(a == 0)  {a = 20; P2 = 0;} //周期=20*500us

if(a <= b)  P2 = 255;      //输出到示波器

P1 = ~P2;   //输出到LED,低电平发光

}

//—————————————————————

当 PWM 参数稍小时,亮度有些不足,这可以适当减小一些限流电阻的阻值进行弥补。

用来显示 PWM 的 LED,其中的电流是间断的,所以,它的限流电阻可以比平常时小一些,100欧左右,是经验数据。

Tracy_9216

1个粉丝

6

问答

79

专栏

29

资料

Tracy_9216 2020-12-04 15:34:30
认可0

PWM就是通过占空比来控制输出电压的,调整一下占空比就可以了

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区