简单的利用PWM做个呼吸灯

2020-02-05 09:17发布

还不是很懂,给点建议
#include <reg52.h>
typedef unsigned char uchar;
#define Ton 50
#define LED P0

unsigned char Maikuan=0;
uchar Occupy_led;     //占空比越大,灯越亮
bit light;
uchar m;

void Inittime()                 //初始化函数
{
TMOD = 0x02; //定时器0,工作方式2,自动重装
TH0 = 256-Ton;
TL0 = 256-Ton;
ET0 = 1;
EA = 1;
TR0 = 1;
}                   //定时器0中断

void time0() interrupt 1 using 0
{
   Maikuan++;
}

void main()
{
Inittime();
while (1)
{
//所有的灯逐渐从暗到全亮,再由全亮到暗
for (m=254; m>0; m--)
{
  while (Maikuan!=Occupy_led)
  {
   LED = 0x00;           //亮
  }

  while (Maikuan!=127)
  {
   LED = 0xff;           //灭
  }
Maikuan = 0;
  if (light)
  {
    Occupy_led++;
  }
  else
  {
    Occupy_led--;
  }

  if (Occupy_led==128)
  {
    Occupy_led = 127;
    light = !light;
  }
  if (Occupy_led>128)
   {
    Occupy_led = 0;
    light = !light;
   }
  }
   
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
8irmb
1楼-- · 2020-02-05 12:04
for (m=254; m>0; m--)
{  
  while (Maikuan!=Occupy_led)
  {
   LED = 0x00;    //亮
  }

  while (Maikuan!=127)
  {
   LED = 0xff;    //灭
  }
上面的是PWM的主要部分。就是PWM。Maikuan会自动增加。因为定时器中断就加一。
Maikuan = 0;
上面的是清PWM计数。
Maikuan = 0;
  if (light)  
  {
    Occupy_led++;  
  }
  else
  {
    Occupy_led--;
  }
上面的是控制亮度变化用的变亮还是变暗由(『【light)』】控制
if (Occupy_led==128)
  {
    Occupy_led = 127;
    light = !light;  
  }
  if (Occupy_led>128)
   {
    Occupy_led = 0;
    light = !light;  
   }
上面这个是检测是否为全亮或全暗。
8irmb
2楼-- · 2020-02-05 12:59
请不要做浮躁的人
1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想
出来再参考别人的提示,你就知道自己和别人思路的差异。
2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用了很久
都是只对部分功能熟悉而已,不系统还是不够的。
3.看帮助,不要因为很难而自己是初学者所以就不看;帮助永远是最好的参考手册,
虽然帮助的文字有时候很难看懂,总觉得不够直观。
4.不要被对象、属性、方法等词汇所迷惑;最根本的是先了解最基础知识。
5.不要放过任何一个看上去很简单的小问题--他们往往并不那么简单,或者可以引伸
出很多知识点;不会举一反三你就永远学不会。
6.知道一点东西,并不能说明你会写脚本,脚本是需要经验积累的。
7.学脚本并不难,JSP、ASP、PHP等等也不过如此--难的是长期坚持实践和不遗余力的博览
群书;
8.看再多的书是学不全脚本的,要多实践
9.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;
10.学习脚本最好的方法之一就是多练习;
11.在任何时刻都不要认为自己手中的书已经足够了;
12.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;
13.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;
14.请把书上的例子亲手到电脑上实践,即使配套光盘中有源文件;
15.把在书中看到的有意义的例子扩充;并将其切实的运用到自己的工作中;
16.不要漏掉书中任何一个练习——请全部做完并记录下思路;
17.当你用脚本到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余
下的部分粗略的完成以保证这个代码的完整性,然后分析自己的错误并重新编写和工
作。
18.别心急,写脚本确实不容易;水平是在不断的实践中完善和发展的;
19.每学到一个脚本难点的时候,尝试着对别人讲解这个知识点并让他理解----你能
讲清楚才说明你真的理解了;
20.记录下在和别人交流时发现的自己忽视或不理解的知识点;
21.保存好你做过的所有的源文件----那是你最好的积累之一;
22.对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛来问的,首先
你要学会自己找答案,比如google、百度都是很好的搜索引擎,你只要输入关键字就
能找到很多相关资料,别老是等待别人给你希望,看的出你平时一定也很懒!
23,到一个论坛,你学会去看以前的帖子,不要什么都不看就发帖子问,也许你的问
题早就有人问过了,你再问,别人已经不想再重复了,做为初学者,谁也不希望自己
的帖子没人回的。
24,虽然不是打击初学者,但是这句话还是要说:论坛论坛,就是大家讨论的地方,
如果你总期望有高手总无偿指点你,除非他是你亲戚!!讨论者,起码是水平相当的
才有讨论的说法,如果水平真差距太远了,连基本操作都需要别人给解答,谁还跟你
讨论呢。

浮躁的人容易问:我到底该学什么;----别问,学就对了;
浮躁的人容易问:JS有钱途吗;----建议你去抢银行;
浮躁的人容易说:我要中文版!我英文不行!----不行?学呀!
浮躁的人分两种:只观望而不学的人;只学而不坚持的人;
浮躁的人永远不是一个高手。
captain2012
3楼-- · 2020-02-05 13:29
楼上说的确实在理,

一周热门 更多>