久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3772|回復: 12
打印 上一主題 下一主題
收起左側

求大神用pwm控制LED燈的亮度

  [復制鏈接]
跳轉到指定樓層
樓主
ID:85540 發表于 2015-7-13 14:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求大神用pwm控制LED燈的亮度
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:72995 發表于 2015-7-13 15:00 | 只看該作者
控制輸出信號占空比就可以了

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:72399 發表于 2015-7-13 18:32 | 只看該作者
#include <reg52.h>

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:72399 發表于 2015-7-13 18:33 | 只看該作者
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int        
uchar code num0[]="跟蹤電壓值PWM/V";
uchar code num1[]="  V";
uchar code num2[]="0123456789";//電壓值
sbit rs=P3^5;
sbit rw=P3^6;
sbit e=P3^4;
sbit psb=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
sbit S2=P3^0;
sbit S3=P3^1;
sbit fm=P2^3;

uchar pwm,num,i,j,a=5;

void delay(uint ms)
{
        uchar i;
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
}

void lcd_com(uchar com)//寫指令位置
{
        rs=0;
        rw=0;
        e=0;
        P0=com;
        delay(0);
        e=1;
        delay(0);
        e=0;
}
void lcd_dat(uchar dat) //寫數據內容
{
        rs=1;
        rw=0;
        e=0;
        P0=dat;
        delay(0);
        e=1;
        delay(0);
        e=0;
}
void init()//液晶初始化
{
        psb=1;
        lcd_com(0x30);
        delay(1);
        lcd_com(0x0c);
        delay(1);
        lcd_com(0x01);
        delay(1);
}
void disp()
{
        uchar i;
        lcd_com(0x80);
        for(i=0;i<16;i++)
        {
                lcd_dat(num0[i]);
        }
}
void disp1()
{
        uchar i;
        lcd_com(0x90);
        for(i=0;i<3;i++)
        {
                lcd_dat(num1[i]);
        }

}
void bee()
{
        fm=0;
        delay(100);
        fm=1;
        delay(100);
}

void keyscan()
{                       
        if(S2==0)
        {
                delay(50);
                if(S2==0)
                {
                        if(pwm<10)
                        {
                                pwm++;         delay(50);                       
                                a--;        delay(50);                                                       
                        }
                }
                        else
                        {
                                bee();
                        }
                }


        if(S3==0)
        {
                delay(50);
                if(S3==0)
                {
                        if(pwm>1)
                        {
                                pwm--;        delay(50);                       
                                a++;        delay(50);                       
                        }
                        else
                        {
                                bee();
                        }
                }
        }
        if(a>9)a=9;
        if(a<0)a=0;
}
void init_t0()
{
        TMOD=0x01;
        TH0=(65536-500)/256;
        TL0=(65536-500)%256;
        EA=1;
        ET0=1;
        TR0=1;
}

void t0() interrupt 1
{
        TR0=0;
        TH0=(65536-500)/256;
        TL0=(65536-500)%256;
        num++;
        if(num>10)
        {
                num=0;
        }
        if(num<=pwm)
        {
                P1=0xff;
                P0=0x00;
        }
        else
        {
                P1=0x00;
                P0=0xff;
        }
        TR0=1;
}

void main()
{
        init_t0();
        init();        //初始化液晶
        num=0;
        pwm=5;
        wela=0;
        dula=0;                          
        while(1)
        {
       
                disp();
                disp1();
                lcd_com(0x90);        //電源跟蹤值顯示位置                         
                lcd_dat(num2[a]); //電源跟蹤值
                keyscan();
        }
}


這里是調電機的,你下載也是可以用的

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:74784 發表于 2015-7-13 19:39 | 只看該作者
我在本壇發過一個~~~~~~~~~~~

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:250568 發表于 2017-11-28 15:14 | 只看該作者
利用pwm控制占空比,就可以實現這個功能
回復

使用道具 舉報

7#
ID:254733 發表于 2017-11-28 17:15 | 只看該作者
不停的改定時器的預裝載時間自增或自減,占空比就變了亮度也會變。我這有正點原子的pwm程序
回復

使用道具 舉報

8#
ID:254893 發表于 2017-11-28 21:03 | 只看該作者
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

#define  pwm P0                                                                                                                                     

uint cycle,high,low;                //周期 高電平 低電平

void delayxms(uint x)
{
    while(x--);
}
                                                                                                                                                                  
void main()
{
         cycle=800;
         while(1)
         {
                 high=1;
                 for(high=1;high<=cycle;high++)
                 {
                          pwm=0xff;
                          delayxms(high);
                          pwm=0x00;
                          low=cycle-high;
                          delayxms(low);
                 }
                 low=1;
                 for(low=1;low<=cycle;low++)
                 {
                          pwm=0xff;
                          high=cycle-low;
                          delayxms(high);
                          pwm=0x00;
                          delayxms(low);
                 }
         }
}
回復

使用道具 舉報

9#
ID:255101 發表于 2017-11-29 11:28 | 只看該作者
去看看定時器怎么用就行
回復

使用道具 舉報

10#
ID:240626 發表于 2017-11-29 12:00 | 只看該作者
#include <reg51.h>

#define uInt unsigned int
#define uchar unsigned char

uchar PWM_T = 0;   //占空比控制變量
sbit c7=P3^7;  //6個按鍵,決定輸出PWM_T值
sbit c6=P3^6;
sbit c5=P3^5;
sbit c4=P3^4;
sbit c3=P3^3;
sbit c2=P3^2;

            
/****************************************************
                  主程序
****************************************************/

void main(void)      
{
uInt n;

TMOD=0x02;   //定時器0,工作模式2,8位定時模式
TH0=210;     //寫入預置初值(取值1-255,數越大PWM頻率越高)
TL0=210;     //寫入預置值 (取值1-255,數越大PWM頻率越高)
TR0=1;       //啟動定時器
ET0=1;       //允許定時器0中斷
EA=1;        //允許總中斷

P1=0xff;  //初始化P1,輸出端口
P0=0xff;  //初始化P0

while(1)      //PWM周期100,高電平100- PWM_T, 低電平PWM_T,低電平工作
{   
  for(n=0;n<200;n++);           //延時,取值0-65535,數字越大變化越慢

  if(!c7||!c6||!c5||!c4||!c3||!c2)     //通過按鍵改變占空比
  {  
  if(!c7)         PWM_T=0;      //這些值可以改變
else if(!c6)    PWM_T=10;
else if(!c5)    PWM_T=35;
else if(!c4)    PWM_T=60;
else if(!c3)    PWM_T=85;
else if(!c2)    PWM_T=100;
  }
}      
}

/****************************************************
               /定時器0中斷模擬PWM
****************************************************/

timer0() interrupt 1 using 2   
{
static  uchar   t ;   //PWM計數
t++;    //每次定時器溢出加1
  
if(t==100)   //PWM周期 100個單位
{
  t=0;  //使t=0,開始新的PWM周期
  P1=0x00;  //使LED燈亮  ,輸出端口
  P0=0x00;  //使LED燈亮  ,輸出端口
}
  
if(PWM_T==t)  //按照當前占空比切換輸出為高電平
{  P1=0xff;        //使LED燈滅   
    P0=0xff;        //使LED燈滅  
}
}




給你一個簡單的
回復

使用道具 舉報

11#
ID:255119 發表于 2017-11-29 12:15 | 只看該作者
#include <reg52.h>
sbit LED = P1^2;
unsigned char CYCLE;
unsigned char PWM_ON ;
void delay(unsigned int cnt)
{
while(--cnt);
}

main()
{
bit Flag;

TMOD |=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
IE= 0x82;
TR0=1;

CYCLE = 10;
while(!Flag)
  {
   delay(20000);
   PWM_ON++;     
   if(PWM_ON == CYCLE)
     {         
      Flag=1;
          }
  }

while(Flag)   
  {
   delay(20000);
   PWM_ON--;
   if(PWM_ON == 0)
     {
      Flag=0;
          }
  }
}

void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-100)/256;
TL0=(65536-100)%256;
if (count==PWM_ON)
    {
     LED = 1;
    }
  count++;
if(count == CYCLE)
    {
    count=0;
        if(PWM_ON!=0)
           LED = 0;
    }

}
這個是本人測試驗證程序。
回復

使用道具 舉報

12#
ID:255119 發表于 2017-11-29 12:16 | 只看該作者
#include <reg52.h> sbit LED = P1^2; unsigned char CYCLE;  unsigned char PWM_ON ; void delay(unsigned int cnt) {  while(--cnt); }  main() { bit Flag;  TMOD |=0x01; TH0=(65536-100)/256;  TL0=(65536-100)%256; IE= 0x82; TR0=1;  CYCLE = 10; while(!Flag)   {    delay(20000);     PWM_ON++;         if(PWM_ON == CYCLE)      {                 Flag=1;           }   }   while(Flag)      {    delay(20000);    PWM_ON--;    if(PWM_ON == 0)      {       Flag=0;           }   } }  void tim(void) interrupt 1 using 1 { static unsigned char count; // TH0=(65536-100)/256;  TL0=(65536-100)%256; if (count==PWM_ON)     {      LED = 1;      }   count++; if(count == CYCLE)     {     count=0;         if(PWM_ON!=0)             LED = 0;     }  }
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃视频在线观看免费视频网站www | 亚洲成人一区二区在线 | 日韩欧美一级精品久久 | 综合色站导航 | 久久久久久艹 | 久久久久久久一区二区三区 | 日日骚网 | 欧美日本高清 | 国产午夜精品一区二区三区四区 | 91麻豆精品国产91久久久久久 | 狠狠艹 | 国产一级在线观看 | 国产一区欧美一区 | 精品欧美一区免费观看α√ | 亚洲三级免费看 | 亚洲精品一区二区在线观看 | 免费看91 | 亚洲欧美日韩一区 | 欧美一区二区三区一在线观看 | 国产精品69毛片高清亚洲 | 欧美久久国产精品 | 日韩免费av| 欧美大片一区 | 日本三级做a全过程在线观看 | 亚洲视频在线观看一区二区三区 | 中文字幕免费中文 | 国产69精品久久久久777 | 欧美午夜在线 | 电影91久久久 | 91成人在线 | 国产精品久久久久久亚洲调教 | 日本久久福利 | 久久久久久久一区 | 欧美成年视频 | 福利视频网站 | av三级在线观看 | 国产丝袜一区二区三区免费视频 | 国产精品一区三区 | 日日操夜夜操天天操 | 欧美午夜精品久久久久久浪潮 | 精品丝袜在线 |