找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7387|回复: 14
收起左侧

基于单片机的pwm控制16*16led点阵亮度调节怎么做啊,

[复制链接]
ID:182903 发表于 2017-5-17 09:05 | 显示全部楼层 |阅读模式
100黑币
我做了16*16的led点阵显示,用的74hc595和74hc138做驱动,怎么添加可以调节led点阵的亮度啊,最好有原理图和c程序,,谢谢谢谢谢了

回复

使用道具 举报

ID:201851 发表于 2017-5-17 16:42 | 显示全部楼层
调PWM的占空比呀
回复

使用道具 举报

ID:201854 发表于 2017-5-17 17:38 | 显示全部楼层
如果是所有LED的亮度一致地调的话,只需要在LED的供电电源处加一MOS管,MOS管的G极拉到单片机PWM控制就可以了。
回复

使用道具 举报

ID:111634 发表于 2017-5-17 20:41 | 显示全部楼层
调节led的亮度就是调节流过它的电流,一般可减小它的限流电阻,注意最大电流不要超过40mA.
回复

使用道具 举报

ID:182903 发表于 2017-5-18 12:01 | 显示全部楼层

具体怎么操作啊  ,有电路图吗
回复

使用道具 举报

ID:182903 发表于 2017-5-18 12:07 | 显示全部楼层
liangzz 发表于 2017-5-17 17:38
如果是所有LED的亮度一致地调的话,只需要在LED的供电电源处加一MOS管,MOS管的G极拉到单片机PWM控制就可以 ...

程序怎么编呢,基本不会
回复

使用道具 举报

ID:157662 发表于 2017-5-18 19:19 | 显示全部楼层
你只需要加一个电位器就可以了
回复

使用道具 举报

ID:182903 发表于 2017-5-19 09:16 | 显示全部楼层
1130555300 发表于 2017-5-18 19:19
你只需要加一个电位器就可以了

你好  请问电位器接在哪里呢  谢谢了
回复

使用道具 举报

ID:157662 发表于 2017-5-19 15:43 | 显示全部楼层
咕噜咕噜 发表于 2017-5-19 09:16
你好  请问电位器接在哪里呢  谢谢了

你把电路图发上来看看也
回复

使用道具 举报

ID:11676 发表于 2018-5-30 13:50 | 显示全部楼层
1130555300 发表于 2017-5-18 19:19
你只需要加一个电位器就可以了

不要忽悠人家,加个电位器手工调整亮度么?
回复

使用道具 举报

ID:11676 发表于 2018-5-30 13:52 | 显示全部楼层
占空比应该是软件实现的。
回复

使用道具 举报

ID:149389 发表于 2018-5-30 15:08 | 显示全部楼层
16扫,1ms扫一行的话,刷新频率1000/(16x1ms)=62.5Hz
1ms分拆,比如0.5显示0.5不显示屏幕亮度就会弱了。
回复

使用道具 举报

ID:341406 发表于 2018-5-30 15:14 | 显示全部楼层

#include <ioCC2530.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define uint  unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1 P1_0   //定义LED1为P10口控制
#define KEY1 P0_0      //KEY1为P00口控制

//函数声明
void Delay(unsigned int t); //函数声明
void InitIO(void);      //初始化LED控制IO口函数
void InitKey();

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                  
  unsigned int CYCLE=1000,PWM_LOW=0;//定义周期并赋值
  InitIO();
  InitKey();
  while (1)         //主循环
  {

    if(KEY1==0)
    {
      //S1按下,一直按着哦。
      PWM_LOW++;
      if(PWM_LOW>CYCLE)
      {
        PWM_LOW=CYCLE-1;
      }
    }
    else
    {
      PWM_LOW--;
      if(PWM_LOW<1)
      {
        PWM_LOW=1;
      }
    }

    if(PWM_LOW==1)
    {
      LED1=0;
    }
    else if(PWM_LOW==CYCLE)
    {
      LED1=1;
    }
    else if(CYCLE>PWM_LOW)
    {
      LED1=1;
      Delay(PWM_LOW);
      LED1=0;
      Delay(CYCLE-PWM_LOW);
    }
  }

}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(t)
{
   t--;
   t++;
   t--;
}
}

/****************************
//初始化IO口程序
*****************************/
void InitIO(void)
{
    P1DIR |= 0x01;  //P10定义为输出
}


/****************************
     按键初始化函数
*****************************/
void InitKey()
{
  P0SEL &= ~0x01; //设置P0.0为普通IO口
  P0DIR &= ~0X01; //按键接在P00口上,设P00为输入模式
  P0INP &= ~0x01; //打开P00上拉电阻
}
回复

使用道具 举报

ID:341406 发表于 2018-5-30 15:19 | 显示全部楼层
#include <ioCC2530.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义  #define uint  unsigned int #define uchar unsigned char   //定义控制灯的端口 #define LED1 P1_0   //定义LED1为P10口控制 #define KEY1 P0_0      //KEY1为P00口控制  //函数声明 void Delay(unsigned int t); //函数声明 void InitIO(void);      //初始化LED控制IO口函数 void InitKey();  /*------------------------------------------------                     主函数 ------------------------------------------------*/ void main (void) {                     unsigned int CYCLE=1000,PWM_LOW=0;//定义周期并赋值   InitIO();   InitKey();   while (1)         //主循环   {      if(KEY1==0)     {       //S1按下,一直按着哦。       PWM_LOW++;       if(PWM_LOW>CYCLE)       {         PWM_LOW=CYCLE-1;       }     }     else     {       PWM_LOW--;       if(PWM_LOW<1)       {         PWM_LOW=1;       }     }      if(PWM_LOW==1)     {       LED1=0;     }     else if(PWM_LOW==CYCLE)     {       LED1=1;     }     else if(CYCLE>PWM_LOW)     {       LED1=1;       Delay(PWM_LOW);       LED1=0;       Delay(CYCLE-PWM_LOW);     }   }  } /*------------------------------------------------  延时函数,含有输入参数 unsigned int t,无返回值  unsigned int 是定义无符号整形变量,其值的范围是  0~65535 ------------------------------------------------*/ void Delay(unsigned int t) {  while(t)  {    t--;    t++;    t--;  } }  /**************************** //初始化IO口程序 *****************************/ void InitIO(void) {     P1DIR |= 0x01;  //P10定义为输出 }   /****************************      按键初始化函数 *****************************/ void InitKey() {   P0SEL &= ~0x01; //设置P0.0为普通IO口   P0DIR &= ~0X01; //按键接在P00口上,设P00为输入模式   P0INP &= ~0x01; //打开P00上拉电阻 }
回复

使用道具 举报

ID:341441 发表于 2018-5-30 15:43 | 显示全部楼层
占空比也可以,或者用其他的方案也行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表