历史上的今天
今天是: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; } 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 () ; } 通过自己做的板子调试 完全可行呢 心情打好呢
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;
上一篇:暑假学习总结——AVR系列(一)
下一篇:AVR之简单的ADC程序
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 C8051F021是美国Cygnal公司生产的单片机。具有双串口、低功耗、高速度等优点。本文以GSM的数据业务,设计一种具有报警和定位的移动终端,并介绍该终端的结构框图、工作原理以及I/O配置和初始化 ...… 查看全部问答> |
|
我在12年前,偶然接触PLD,没有想到自己居然就在这个行当里安身下来。可是这个行业也的确是个飞速发展的行业,十多年过去后,从当初的接近十家主要供应商,到今天已经激烈搏杀后,只有差不多如论坛题目一样的,成为了今天三足鼎立的局面。想来想去, ...… 查看全部问答> |
|
一些公司IC设计方向面试题1、我们公司的产品是集成电路,请描述一下你对集成电路的认识,列举一些与集成电路 相关的内容(如讲清楚模拟、数字、双极型、CMOS、MCU、RISC、CISC、DSP、ASIC、FPGA 等的概念)。(仕兰微面试题目) 2、FPGA和ASIC的 ...… 查看全部问答> |




