微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第五节:蜂鸣器的驱动程序

第五节:蜂鸣器的驱动程序

时间:11-22 来源:互联网 点击:

累加定时中断的次数,

}

/* 注释三:

* 为什么不把驱动蜂鸣器这段代码放到main函数的循环里去?

* 因为放在定时中断里,能保证蜂鸣器的声音长度是一致的,

* 如果放在main循环里,声音的长度就有可能受到某些必须

* 一气呵成的任务干扰,得不到及时响应,影响声音长度的一致性。

*/

if(uiVoiceCnt!=0)

{

uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫

beep_dr=0; //蜂鸣器是PNP三极管控制,低电平就开始鸣叫。

}

else

{

; //此处多加一个空指令,想维持跟if括号语句的数量对称,都是两条指令。不加也可以。

beep_dr=1; //蜂鸣器是PNP三极管控制,高电平就停止鸣叫。

}

TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f

TL0=0x2f;

TR0=1; //开中断

}

void delay_long(unsigned int uiDelayLong)

{

unsigned int i;

unsigned int j;

for(i=0;i

{

for(j=0;j<500;j++) //内嵌循环的空指令数量

{

; //一个分号相当于执行一条空语句

}

}

}

void initial_myself() //第一区 初始化单片机

{

beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。

led_dr=0; //LED灭

TMOD=0x01; //设置定时器0为工作方式1

TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f

TL0=0x2f;

}

void initial_peripheral() //第二区 初始化外围

{

EA=1; //开总中断

ET0=1; //允许定时中断

TR0=1; //启动定时中断

}

总结陈词:

本节程序已经展示了一个多任务处理的基本思路,假如要实现一个独立按键检测,能不能也按照这种思路来处理呢?欲知详情,请听下回分解-----在主函数中利用累计主循环次数来实现独立按键的检测。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top