历史上的今天
返回首页

历史上的今天

今天是:2025年06月18日(星期三)

正在发生

2021年06月18日 | AVR系列之蜂鸣器的驱动

2021-06-18 来源:eefocus

恩 趁现在精神还蛮不错 就继续往下写写吧 现在就总结一下蜂鸣器的驱动吧


说白了 蜂鸣器的驱动 就是用PWM驱动 很简单就给它个脉冲 它便能发出声音 但为了配合前面做到程序 以便做一个小小的综合 便加上了LED灯显示  与按键的控制 这样便能做一个AVR端口的小小综合 好了  下面就是实现的代码


先说明下端口的安排:A口控制按钮 B口控制LED D5口控制蜂鸣器

 

#include

#include

#define ucahr unsigned char

#define uint  unsigned int

 

uint tab[ ]={ 637,568,505,477,425,378,337};   //音符

 

//延时子程序

void DelayMs ( uchar i )

{

    uchar j;

    while ( i--)

    {

        j=167;

        while ( j--);

      }

}

 //键盘扫描程序

void KeyScan ( void)

{

     uchar temp ;    //存放音符

     uchar  KeyNum =0 ;  //存放键盘值

     DDRA = 0xff;

     PORTA = 0xff;

     DedlyMs  ( 1);

     DDRA =0x00;

     if  ( PINA !=0xff)

          DelayMs  (1) ;

      if  ( PINA !=0xff)

      {

          switch ( PINA & 0xff)

          {

                  case 0b11111110: KeyNum = 1;break;
                  case 0b11111101: KeyNum = 2;break;
                  case 0b11111011: KeyNum = 3;break;
                  case 0b11110111: KeyNum = 4;break;
                  case 0b11101111: KeyNum = 5;break;
                  case 0b11011111: KeyNum = 6;break;
                  case 0b10111111: KeyNum = 7;break;
                  case 0b01111111: KeyNum = 8;break;
                  default: break; 

          }

          while ( PINA != 0xff)

          {

                  DDRB = 0xff ;

                  PORTB &=~( 1<<( KeyNum-1)) ;

                  DDRA = 0xff;

                  PORTA = 0xff ;

                  //DelayMs ( 1);

                  temp = tab [ KeyNum-1] ;

                  while (  temp- -)

                         NOP ()   ;                

                  DDRD = ( 1<<5 )    ;

                  PORTD ^ = ( 1<<5 ) ;

          }

          DDRB =0xff ;

          PORTB = 0xff  ;

      }

}

//主程序

 void  main  ( void )

{

    DDRB = 0xff ;

    PORTB = 0xff ;

    //  DelayMs ( 200)  ;

    KeyScan ()  ;

}

 

通过自己做的板子调试 完全可行呢 心情打好呢


推荐阅读

史海拾趣

问答坊 | AI 解惑

基于C8051F021的定位和报警移动终端设计

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 C8051F021是美国Cygnal公司生产的单片机。具有双串口、低功耗、高速度等优点。本文以GSM的数据业务,设计一种具有报警和定位的移动终端,并介绍该终端的结构框图、工作原理以及I/O配置和初始化 ...…

查看全部问答>

继电器的应用

我现在用的是固态继电器,需要用单片机控制继电器驱动交流电机 ,哪里有单片机控制继电器的电路图啊,请帮帮忙吧,谢谢了…

查看全部问答>

《FPGA三国志》(二)CPLD的时代

我在12年前,偶然接触PLD,没有想到自己居然就在这个行当里安身下来。可是这个行业也的确是个飞速发展的行业,十多年过去后,从当初的接近十家主要供应商,到今天已经激烈搏杀后,只有差不多如论坛题目一样的,成为了今天三足鼎立的局面。想来想去, ...…

查看全部问答>

一些公司IC设计方向面试题

一些公司IC设计方向面试题1、我们公司的产品是集成电路,请描述一下你对集成电路的认识,列举一些与集成电路 相关的内容(如讲清楚模拟、数字、双极型、CMOS、MCU、RISC、CISC、DSP、ASIC、FPGA 等的概念)。(仕兰微面试题目) 2、FPGA和ASIC的 ...…

查看全部问答>

无线传感器网络

前辈们,我想问一下 1.学习无线传感器网络,需要有哪些知识的铺垫 2.无线传感器网络的应用在哪里,应用前景怎么样?现在又哪些公司在这方面的东西…

查看全部问答>

regedit.exe程序为什么不能运行?

在CE下运行regedit.exe失败,提示找不到REGEDTI或某一个组件?regedit还依赖其他的什么库文件吗?…

查看全部问答>

WinCE上如何获得指定进程当前所用的内存是多少?

WinCE上如何获得指定进程当前所用的内存是多少? 有没有什么函数可以直接获得某个已知进程当前所用内存?谢谢…

查看全部问答>

eZ430-RF2500无线通信模块试用申请

eZ430-RF2500无线通信模块试用申请…

查看全部问答>

今天最后一天班了。提前祝大家新年快乐!

忘掉去年的悲伤,整顿美好的心情迎接新的一年的到来。 预祝大家在新的一年里身体健康!吃嘛嘛香!…

查看全部问答>