第一个程序,让你的板子唱国歌(败笔)

本文作者分享了一次尝试让ARM板子通过蜂鸣器唱国歌的实验过程,旨在激发读者的兴趣。通过分析C51的唱国歌程序并尝试在ARM板上实现,作者遇到了包括编译器不支持浮点除法等问题。虽然最终实验失败,但过程中的思路和错误分析对理解硬件控制和ARM编程有一定帮助。
摘要由CSDN通过智能技术生成

虽然是败笔,但是文中基本上介绍了一个小应用实现及问题分析的全过程,希望能够对你有帮助,大胆贴出!毕竟这篇文章写了好久。。。额,写文章的人伤不起啊伤不起。。。


学生时代总会有这么一句笑话:“XXX!去,给我蹲政教处门口唱国歌!”

      一直在思索第一个例子用什么,才能引起学生的兴趣,点亮板子的LED?貌似很无聊啊,你也不能拿着给同学炫耀,毫无吸引力,那么就索性用这个例子吧,顺便也抒发一下我对祖国的热爱。让我们的板子唱起国歌来!

      前记:在这篇文章之前,我并没有做过类似的实验,所以我们站在同一个起跑线上,千万不要抱怨别人比你厉害是因为他比你聪明。如果试验成功,板子真的这么唱歌了,像我这么笨的人都做到了,你没有理由做不到,这篇文章让你找回自信。

      首先要贴出来一篇参考文章,是基于C51的唱国歌的例子,做人要实在,我不想把它说成是我原创的,因为我也没学过C51,呵呵,但是我会举一反三。因为ARM板裸奔跟写C51的程序差不多,虽然扼杀了它的处理能力(本该是跑系统的),但是要练习对硬件的操控能力和做接口实验,这些是必须的。下边是文章内容:

蜂鸣器使用在很多的场合,他一般用来发出报警或者提示的声音,是一种常用的电子器件,这里我给大家 简单的介绍一下用单片机驱动蜂鸣器的方法, 蜂鸣器有二种 1.本身带有驱动电路, 5v,9v,12v 超电压使用, 分 声音沙哑失真。2.象 call 机,喇叭一样,用软件驱动。频率控制音调,时间控制音量大小,第一种蜂鸣器 一般都有一个固定的频率参数也就是他他发出的声音是不能变化的,就象食堂用的打卡器一样,卡一贴近 就发出都的一声。第 2 种就不同了用单片机驱动第 2 种蜂鸣器后还可以使他演 奏出美妙的音乐,我们只需 要用简单的程序就可以控制单蜂鸣器所奏的频率,也就控制了音调。
 c51程序实例: 单片机驱动蜂鸣器演奏中华人民共和国国歌的前 4 节的 c51 程序: 

#include <REG52.h> 
sbit BUZ=P2^6; //蜂鸣器接单片机的p2.6 电路很简单。
 unsigned int hzs[]={131,147,165,175,196,220,247,262,294,330,349,392,440,494,523,587,659,698,784,880,988,1047,1175,131 9,1397,1568,1760,1976};//标准音调频率 
char dots[]={8,28,10,12,12,13,28,28,12,28,10,28,8,12,12,12,10,28,28,8,28,5,5,5,5,5,5,8,'#'};//频率控制数组
 void delay(unsigned int u) //延时 
{ 
while(u--); 
} 
void play_hz(unsigned int u) { 
unsigned int i=u; 
while(i--){
 		BUZ=0; 
BUZ=1;
 delay(18432/u-24); 
} 
} 
void play_sound(int i) {
 if(i<28) 
play_hz(hzs[i-1]); 
else 
delay(500); } 
void main(void) //主程序开始 
{ 
while(1){
 int i=0; 
while(dots[i]!='#') 
play_sound(dots[i++]); 
delay(20000);
 } 
} //播放音乐 
音调与频率的关系: 
C:261.6256
D:293.6648 
E:329.6276 
F:349.2282 
G:391.9954 
A:440 
B:493.8833 
每个 8 度频率加倍,如 A 的高 8 度是 880HZ,再高 8 度是 1760HZ。 反之,A 的低 8 度是 220HZ,再低 8 度是 110HZ。

完文章,我们来做ARM下的实现:

我想当你看完文章,应该有些思路了吧,不知道我们的思路一样不一样,也不知道这个实验可否成功,让我们一起去探索一下》》》》》》

      我的思路是这样的:蜂鸣器的控制应该和LED的控制是一样的,根据电路设计,在对应的控制寄存器中的对应控制位写1(或者0)他就唱,相反,他就不唱。而不同的音调就是通过频率来控制的,而频率就是一个动作周期性变化的次数,上边的程序已经写得非常到位,简洁有力,通过while循环和时延控制频率。理论上我们只用作少量改动就可以使用。而这些改动就要看我们自己的板子的设计了,我的是TQ2440,虽不知你的是不是,但是只要你可以在你的板子上迁移成功,证明你已经提升了,OK,here we go。


      先看一下TQ2440 的 buzzer相关的电路(在TQ2440底板原理图里):


  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值