实验十 蜂鸣器控制实验

-------------------------------------------------------------------------------------------------------------------------------------
说实话真不想做这个实验,我在办公室,搞的“哔哔哔哔”的,大神同事们会烦的..又不能再蜂鸣器上面插耳机..
不过考虑到我循序渐进,我还是在蜂鸣器上面粘了海绵,厚着脸皮把实验做了..为了ARM嘛
一.建立工程
还是按照惯例,先建立一个"bibibi_2440"文件夹,在里面建立一个ADS工程
二.看原理图
要控制它总得找到它身上连的是哪条控制线吧,如图:

分析一下原理图:

我们发现这个bell是用GPB0和一个三极管来控制的,三极管有什么特性呢?我不知道,所以去百度了一下,首先我们得知道这个PNP还是NPN

电流从及基极流向发射极的是NPN型的,当基极为高电平时,三极管相当于短路,为低电平时,相当于断路,我一直这样理解。所以,我们只需要拉高GPB0,则bell就会哔哔哔哔的响。OK,试试吧
三.找相关寄存器

好吧,要控制外围器件bell,先得把GPIO设置为output,这点没意见吧!
然后再向GPBDAT赋值,高电平响低电平不响。先让它一直响试试成功不
四.源码
main.c源码如下:
#define GPBCON (*(volatile unsigned int *)0x56000010)
#define GPBDAT (*(volatile unsigned int *)0x56000014)
int main()
{
GPBCON&=0xfffffc;//清零相关的寄存器
GPBCON|=0x1;//设置相关的寄存器
while(1) //让它一直响
GPBDAT=0x0x1;
return 0;
}
只有main.c行不行?PC能找到程序入口么?答案是肯定的!因为ADS有一个已经写好的startup.s文件,以后再来分析这货
run了一下,把我几个同事吓了一跳,嘿嘿,好吧,我们再来优化代码,让它真正的实现"哔哔哔哔"的响

#define GPBCON (*(volatile unsigned int *)0x56000010)
#define GPBDAT (*(volatile unsigned int *)0x56000014)

void delay(unsigned int x )
{
unsigned int i,j,k;
for(i=0;i<=x;i++)
for(j=0;j<=0xff;j++)
for(k=0;k<=0xff;k++);
}
int main()
{
GPBCON&=0xfffffc;//清零相关的寄存器
GPBCON|=0x1;//设置相关的寄存器
while(1) //没有操作系统,必须要有大循环,不然有跑飞的危险
{
GPBDAT|=0x1;//保证不影响其他位
delay(100);
GPBDAT&=0xfffe;//尽量保证字或者半字对齐哪怕没有什么实际作用
delay(100);
}
return 0;
}
这次把我吓了一跳!

END

转载于:https://my.oschina.net/opl/blog/85400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值