按键控制led应用程序

/*******************************************************************************
硬件环境:  mini2440开发板

软件环境:  操作系统ubuntu8.04,内核版本linux2.6.29

按键驱动说明:
    一个好的,非常精简的测试驱动应用程序
    此程序是按键控制led应用程序
    
作者:   ljh
    
时间:   2012.06.20
    
********************************************************************************/


#i nclude<stdio.h>
#i nclude<stdlib.h>
#i nclude<errno.h>

int main(int argc,char **argv)
{
    int fd;
    int key_status[6];

    //以阻塞方式打开设备文件,非阻塞时flags=O_NONBLOCK
    fd = open("/dev/buttons-ctl-leds", 0);

    if(fd < 0)
    {
        printf("Open Buttons Device Faild!\n");
        exit(1);
    }

    while(1)
    {
        int i;
        int ret;
        fd_set rds;
       
        FD_ZERO(&rds);
        FD_SET(fd,&rds);
       
        //应用程序进行轮询,查询是否可对设备进行访问
        ret = select(fd+ 1, &rds, NULL,NULL, NULL);
       
        if(ret< 0)
        {
            printf("Read Buttons Device Faild!\n");
            exit(1);
        }
       
        if(ret== 0)
        {
            printf("Read Buttons Device Timeout!\n");
        }
        else if(FD_ISSET(fd,&rds))
        {
            //读设备
            ret = read(fd, key_status,sizeof(key_status));

            //读取错误
            if(ret!= sizeof(key_status))
            {
                if(errno!= EAGAIN)
                {
                    printf("Read Button Device Faild!\n");
                }

                continue;
            }
            else
            { 
             //读取正确,打印按键值
                for(i= 0; i < 6; i++)
                {
                    //对应驱动中按键的状态,为0即按键被按下
                    if(key_status[i]== 0)
                    {
                    
                        //系统调用ioctl函数命令cmd, 参数arg
                        ioctl(fd, 0, i);     //fd文件描述符 on控制命令1或0 led_no哪个led
                      
                        printf("Key%d DOWN\n", i+1);
                       
                        if(i == 4)       //如果按键key5 则所有led灯光闪烁20s
                        {
                         ioctl(fd, 55, i);  
                        } 
                    }
                }
               
            }
        }
    }

    close(fd);

    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
按键PWM控制LED亮度是一种常见的电路应用,通过调节PWM信号的占空比来实现LED的亮度控制。在Cubemx程序中,我们可以通过以下步骤来实现这种控制方式。 步骤一:在Cubemx中选择合适的MCU型号,并添加按钮和LED组件。这里我们假设使用的是STM32F103C8T6 Microcontroller,需要添加一个GPIO Input和GPIO Output组件。 步骤二:为按钮和LED组件分配相应的引脚。这里我们将按钮分配到PA0引脚,LED分配到PB0引脚,具体分配方式可以通过Cubemx的GPIO配置界面实现。 步骤三:设置PWM通道。在Cubemx的RCC配置中找到TIM4定时器,并使能其时钟。然后,转到TIM4的PWM输出配置对话框,并将它与PB0引脚关联。接下来,选择一个合适的预分频值和计数周期,并将PWM输出模式设置为PWM模式1。最后,启用PWM输出通道2的DMA操作。 步骤四:编写代码。通过Cubemx代码生成器,我们可以得到一个基础代码框架。在这个框架中,我们可以添加按键中断服务函数,并在其中编写PWM控制代码。在按键中断服务函数中,我们可以通过读取PA0引脚的状态来确定PWM占空比的大小,然后利用TIM4的PWM输出通道2来控制LED的亮度。 综上所述,按键PWM控制LED亮度的程序Cubemx的实现步骤包括:选择MCU型号和添加按钮和LED组件、分配引脚、设置PWM通道和编写代码。通过这些步骤的实现,我们可以很轻松地实现这种亮度控制方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值