历史上的今天
今天是:2025年03月19日(星期三)
2020年03月19日 | 学习笔记 从零开始学单片机(8) 蜂鸣器唱歌
2020-03-19 来源:eefocus
单片机上的蜂鸣器结构非常的简单

只要给一个0,它就会“叫”。让它唱歌的原理很简单,声音大小是固定的,让它的频率变化,就能让它发出不同的音符。
代码中在软件循环延时过程中,依次给它一个固定频率的方波,让它唱起来。
//晶振11.0592
#include sbit speaker=P2^3; unsigned char byteTH0,byteT0L,duration; // 小星星句子,三个一组,第一个表示音符,第二个表示音阶,第三个表示延时长度(单位约等于0.1s) code unsigned char music[]={ 1,2,2, 1,2,2, 5,2,2, 5,2,2, 6,2,2, 6,2,2, 5,2,4, 4,2,2, 4,2,2, 3,2,2, 3,2,2, 2,2,2, 2,2,2, 1,2,4, 5,2,2, 5,2,2, 4,2,2, 4,2,2, 3,2,2, 3,2,2, 2,2,4, 5,2,2, 5,2,2, 4,2,2, 4,2,2, 3,2,2, 3,2,2, 2,2,4, 1,2,2, 1,2,2, 5,2,2, 5,2,2, 6,2,2, 6,2,2, 5,2,4, 4,2,2, 4,2,2, 3,2,2, 3,2,2, 2,2,2, 2,2,2, 1,2,4 }; //定时器计时初值,高八位,代表不同音符的频率 code unsigned char FREQH[]={ 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC, 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ; //定时器计时初值,低八位,代表不同音符的频率 code unsigned char FREQL[]={ 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B, 0x8F,0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,}; void song(); void delay(unsigned char t); void main(void) { unsigned char index, step; TMOD=1; EA=1; ET0=1; while(1) { step=0; while(step<126) { index = music[step] + 7 * music[step+1] - 1; byteTH0 = FREQH[index]; byteT0L = FREQL[index]; duration = music[step+2]; step += 3; song(); } delay(10); } } void timer0() interrupt 1 { TR0=0; speaker=!speaker; TH0 = byteTH0; TL0 = byteT0L; TR0=1; } void delay(unsigned char t) { unsigned int i; unsigned char j=80; for(i=0; i TR0=0; } void song() { TH0 = byteTH0; TL0 = byteT0L; TR0 = 1; delay(duration); }
史海拾趣
|
效益是企业赖以生存的前提,创新是企业发展的动力,创新活动,是市场拉动和技术推动两者的汇聚点。在过去的计划经济时代,重庆川仪和当时很多国营企业一样,技术开发严重脱离市场、脱离生产,看似研发成果不断,但真正形成产品并赚回真金白银的却不 ...… 查看全部问答> |
|
小弟把三星的SPI总线驱动编译进了内核,(开发板提供了源码但是没有加入内核)。然后用WriteFile函数发送测试数据,可以看到SPI口输出正常,但是用ReadFile读取SPI口时,一直读回0. SPI的读取时序如下图,我先用 WriteFile(hSPI, &cBuffer_out, 1, ...… 查看全部问答> |
|
FPGA设计一条原则是尽量使用同步逻辑,即尽量整个设计中使用一个clock,而且该clock尽量走全局时钟线,也就是不要在clock path上加上逻辑,不要用“受控时钟”。但是在有些情况下,“受控时钟”难以避免,例如在用FPGA进行验证ASIC设计时,因为ASIC ...… 查看全部问答> |
|
读按键的值,可以通过函数GPIOPinRead来完成 如何实现中断呢?主要有以下几个步骤需要做 1. 先定义一个LED和一个KEY #define LED GPIO_PIN_0#define KEY GPIO_PIN_0 2. 在startup_rvmdk.S 文件中增加PORT_E的中断服务 ...… 查看全部问答> |
|
我需要测小于零的信号,我看过手册,是不是在参考电压端口用一个正负的参考电源?可STM32内部只有一个1.2v的正电源,可怎样找到一个负电源啊?别的单片机一般这样解决办法是采用的双端输入,STM32有没有类视的设置啊?请大家给一个解决方案… 查看全部问答> |
|
深圳证券信息:高级ARM硬件工程师 任职要求: 1、本科以上学历,年龄不限,电子相关专业,5年以上工作经验。 2、精通ARM微控制器架构体系及外围电路设计,熟悉各种协议如DDR2/3、SDIO、URAT等,精通数字和模拟电路,熟悉各类元件性能及设计。 3 ...… 查看全部问答> |
|
人人都爱易电源——转发有礼! 活动主题:人人都爱易电源——转发有礼!活动时间:10月11日—28日 活动链接:https://bbs.eeworld.com.cn/thread-352431-1-1.html… 查看全部问答> |




