Linux下简易蜂鸣器驱动代码及测试实例

发布者:自由思考最新更新时间:2025-01-07 来源: cnblogs关键字:Linux  蜂鸣器驱动 手机看文章 扫描二维码
随时随地手机看文章

驱动代码


#include <linux/module.h>

#include

#include

#include

#include


#include


#include gpio.h>

#include

#include


#define DEVICE_NAME                'beep3'


#define BEEP_MAGIC 'k'

#define BEEP_START_CMD _IO (BEEP_MAGIC, 1)

#define BEEP_STOP_CMD _IO (BEEP_MAGIC, 2)



static void beep3_stop(void) {

    printk('in the beep3_stop!!n');

    s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT);

    gpio_set_value(S5PV210_GPD0(0), 0);


}


static void beep3_start(void) {

    printk('in the beep3_start!!n');

    s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT);

    gpio_set_value(S5PV210_GPD0(0), 1);


}



static long beep3_ioctl(struct file *filep, unsigned int cmd,

        unsigned long arg)

{

    printk('in the beep3_ioctl!!n');

    switch ( cmd ) {

        case BEEP_START_CMD: {

            printk('in the start_cmd!!n');

            beep3_start();     break;

        }

        case BEEP_STOP_CMD: {

            printk('in the stop_cmd!!n');

            beep3_stop();     break;

        }

        default: {

            break;

        }

    }


    return 0;

}



static struct file_operations beep3_fops = {

    .owner            = THIS_MODULE,

    .unlocked_ioctl    = beep3_ioctl,

};


static struct miscdevice beep3_misc_dev = {

    .minor = MISC_DYNAMIC_MINOR,

    .name = DEVICE_NAME,

    .fops = &beep3_fops,

};


static int __init beep3_dev_init(void) {

    int ret;


    ret = gpio_request(S5PV210_GPD0(0), DEVICE_NAME);

    if (ret) {

        printk('request GPIO %d  failedn',S5PV210_GPD0(0));

        return ret;

    }

    s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT);

    gpio_set_value(S5PV210_GPD0(0), 0);

    


    ret = misc_register(&beep3_misc_dev);


    printk(DEVICE_NAME 'tinitializedn');


    return ret;

}


static void __exit beep3_dev_exit(void) {

    beep3_stop();


    misc_deregister(&beep3_misc_dev);

}


module_init(beep3_dev_init);

module_exit(beep3_dev_exit);


MODULE_LICENSE('GPL');

MODULE_AUTHOR('mhb@SEU');

MODULE_DESCRIPTION('S5PV210 beep Driver');


测试实例:


#include

#include  

#include  

#include

#include

#include

#include  

#define BEEP_MAGIC 'k'

#define BEEP_START_CMD _IO (BEEP_MAGIC, 1)

#define BEEP_STOP_CMD _IO (BEEP_MAGIC, 2)


int main(int argc ,char* argv[])

{

   int m_fd=0;// 

   m_fd = open('/dev/beep3', O_RDONLY); 

 


   ioctl(m_fd, BEEP_STOP_CMD);

   while(1)

       {

       printf('enter any key to start !!n');

       getchar();

       ioctl(m_fd, BEEP_START_CMD);

       printf('start success!!n');

       printf('enter any key to stop !!n');

       getchar();

       ioctl(m_fd, BEEP_STOP_CMD);

       }

   close(m_fd);

   return 0; 

}


关键字:Linux  蜂鸣器驱动 引用地址:Linux下简易蜂鸣器驱动代码及测试实例

上一篇:喜羊羊系列【设备 - 驱动器 编译进内核】
下一篇:如何将驱动加入内核

推荐阅读最新更新时间:2026-03-24 19:26

S3C2440内核蜂鸣器驱动解读
首先介绍需要的一些头文件的位置 linux-2.6.32.内核重要文件目录: linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach/regs-gpio.h linux-2.6.32.2/arch/arm/plat-s3c24xx/gpio.c linux-2.6.32.2/linux/asm-generic/io.h linux-2.6.32.2/include/linux/wait.h asm -- linux-2.6.32.2/linux/asm-generic mach -- linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach
[单片机]
S3C2440内核<font color='red'>蜂鸣器</font><font color='red'>驱动</font>解读
8051单片机实战分析(以STC89C52RC为例) | 04 - 蜂鸣器驱动
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。 有源蜂鸣器和无源蜂鸣器的区别: 这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。 有源蜂鸣器示意图: 无源蜂鸣器示意图: 无源蜂鸣器的优点是:
[单片机]
8051单片机实战分析(以STC89C52RC为例) | 04 - <font color='red'>蜂鸣器</font><font color='red'>驱动</font>
单片机学习札记4---调试蜂鸣器驱动
这一节中,我们要继续调试硬件电路,可能很多人对于单片机这种学习方式很疑惑,因为这不同于以前的按部就班的方式,我们这种学习方法,是过程性学习方式,其目的在于循序渐进,潜移默化的学习有关知识点,来解决我们遇到的实际问题,从而在实践中掌握这种技术,而不是去看枯燥的指令。 蜂鸣器接在单片机的P3.5引脚,这个引脚可以输出时钟信号,实际使用时可以减少对单片机资源的占用。我们新建一个工程,命名project,然后在编译器中敲入以下代码,该代码的功能是,让蜂鸣器间隔1S响一次: 下载到目标板上,可以听到蜂鸣器以间隔1S通断,说明这部分电路也是没有问题的。 在这个例子中,用到了定时器和中断,我们将将定时器配置为传统的51模式,即
[单片机]
单片机学习札记4---调试<font color='red'>蜂鸣器</font><font color='red'>驱动</font>
利用S3C2440中的Timer0的PWM输出驱动蜂鸣器
S3C2440中有5个16位定时器,timer0,timer1,timer2,timer3和timer4。其中,只有timer4是一个没有输出引脚的内部定时器。所以,只有定时器0,1,2,3有脉宽调制功能(PWM)。定时器0有一个用于大电流设备的死区生成器。(以下,以定时器0为例) S3C2440的PWM输出,主要是利用比较寄存器TCMPB0(0x51000010)。 在定时器使能时,定时器计数缓存寄存器(TCNTBn)得到一个被装载到递减计数器中的初始值。定时器比较缓存寄存器(TCMPBn)有一个被装载比较器中用来和递减计数器得值作比较的初始值。 每个定时器有一个自己的由定时器时钟驱动的16位递减计数器。当递减计数器
[单片机]
51单片机系列之驱动蜂鸣器发声
名称:51单片机驱动蜂鸣器发声 平台:Keil 4, Ly-51S学习板 内容:模拟报警声,如闹钟 滴 滴 滴 滴 -----------------------------------------------------*/ #include reg52.h sbit SPK = P1^2; void delay_2us(unsigned char t) { while(--t); } void main() { while(1) { delay_2us(25); SPK = !SPK; } }
[单片机]
51学习之蜂鸣器驱动
早先,把同样的程序给蜂鸣器和LED,LED可以工作,而蜂鸣器却不可以。所以早想着抽一天晚上来解决这个问题。 其实这就不是个问题哈。因为程序不应该有错,下载DEMO程序,也可以唱歌,说明硬件没错。 上网查找,有前辈说了:对于蜂鸣器驱动,要先明白是无源还是有源,无源就要PWM了,有源直接控高控低就行。 这就是问题所在了。我接触的都是直接拉高拉低就会响的。而根据判断,板上的是无源的,我直接拉低当然不行了,没振荡。 附有源无源的区分: 1.一股无源比有源低1MM左右 2.反过来看,能看到绿电路板的是无源;看到黑密封胶的是有源 3.加电。上电触碰会响的是无源;不会响或常响为有源 4.万用表电阻*1档,6-8欧的为无源;几百欧的为
[单片机]
AVR单片机驱动有源蜂鸣器实验程序
/* 有源蜂鸣器实验; 特点描述: 有缘蜂鸣器极其简单,为二源元件, 本系统使用蜂鸣器工作电压是5v, 只要接入5V电源,蜂鸣器就响. 硬件连接: PC7引脚; 音系: 模拟警报声; 2014年12月5日19:56:57 */ #include iom16v.h #include macros.h typedef unsigned char uint8; typedef unsigned int uint16; void init_io() // ATMEGA16A所有IO口初始化; { DDRA=0XFF; PORTA=0X00; //PA口输
[单片机]
51单片机驱动蜂鸣器发声的实验
  在单片机系统中,除了显示器件外经常用到发声器件,最常见的发声器件就是蜂鸣器。蜂鸣器一般用于一些要求不高的声音报警及发出按键操作提示音等。   虽然蜂鸣器也有自己固有的频率,但是也可以对其施加不同频率的方波,使之发出一些简单的乐曲。   1.实例功能   使蜂鸣器发声。通过本实验,能熟练掌握蜂鸣器的应用方法。   2.器件和原理   蜂鸣器最重要的特点是只要按照极性要求加上合适的直流电压就可以发出固有频率的声音,使用起来比扬声器简单。   由此可见,其控制与LED的控制是没有区别的。   3.硬件电路   虽然单片机对蜂鸣器的控制和对LED的控制是一样的,但硬件电路却有所不同。因为蜂鸣器是感性负载,一般不建议用单
[单片机]
51单片机<font color='red'>驱动</font><font color='red'>蜂鸣器</font>发声的实验
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved