#include "config.h"
#define BEEPCON 0x00000080 /* 设置P0.7引脚控制蜂鸣器低电平蜂鸣 */
void __irq Eint0IRQ(void)
{
uint32 i;
i = IO0PIN;
if((i&BEEPCON) == 0) /* 控制蜂鸣器输出取反 */
{
IO0SET = BEEPCON;
}
else
{
IO0CLR = BEEPCON;
}
while((EXTINT & 0x01)!=0) /* 等待再次按键 */
{
EXTINT = 0x01; /* 清中断标志 */
} VICVectAddr = 0x00; /* 告知VIC中断结束,更新硬件,接受下一次中断 */
}
int main(void)
{
PINSEL1 = PINSEL1 | 0x01; /* 设置P0.16为外部中断0管脚 */
PINSEL0 = 0x00; /* 设置P0.7为GPIO功能 */
IO0DIR = BEEPCON; /* 设置P0.7为输出 */
IRQEnable(); /* IRQ中断使能 */
EXTMODE = 0x02;
VICIntSelect = 0x00000000;
VICDefVectAddr = (uint32)Eint0IRQ;
EXTINT = 0x01;
VICIntEnable = 1 << 14;
while(1); /* 等待中断 */
return(0);
}
请问,该程序代码中蜂鸣器为什么要取反?IO0PIN读取的是P0.0引脚中IO0SET或IO0CLR的当前值吗? while((EXTINT & 0x01)!=0) 所执行的内容我也不是很清楚 请大家帮我分析分析 谢谢了
呵呵呵
蜂鸣取反是设计需要
IO0PIN应是当前管脚上的电平值,高1低0
你这段程序好像是按个键让蜂鸣无声,再按一下退出
http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
谢谢楼上 这段代码 实现的按键控制蜂鸣器 按下键,蜂鸣器响,松开后,蜂鸣器停 。 如果蜂鸣器不取反 还能实现这个功能吗?
回复 楼主 fanzhe1879 的帖子
这个和硬件设计有关系。