我有带蜂鸣器的微控制器的C代码。它有效,但是我不知道它如何起作用。
在wh.h / .cpp中,我具有以下功能:
void setBuzzer(tBool on)
{
if (TRUE == on)
IOCLR = BUZZER_PIN;
else
IOSET = BUZZER_PIN;
}
这样可以启用和禁用蜂鸣器。我不知道它的真正含义,什么是BUZZER_PIN,IOCLR和IOSET?
BUZZER_PIN在代码中仅在以下位置再次出现:
void immediateIoInit(void)
{
tU8 initCommand[] = {0x12, 0x97, 0x80, 0x00, 0x40, 0x00, 0x14, 0x00, 0x00};
// 04 = LCD_RST# low
// 10 = BT_RST# low
//make all key signals as inputs
IODIR &= ~(KEYPIN_CENTER | KEYPIN_UP | KEYPIN_DOWN | KEYPIN_LEFT | KEYPIN_RIGHT);
IODIR |= BUZZER_PIN;
IOSET = BUZZER_PIN;
IODIR |= BACKLIGHT_PIN;
IOSET = BACKLIGHT_PIN;
对我来说,这很奇怪,因为IOSET值在将其设置为BUZZER_PIN之后就发生了变化。那么,那能做什么呢?
还有一个问题:我可以用蜂鸣器做更多的事情吗?例如。改变音量?当然,可以使用setBuzzer(1)来调整声音的持续时间,而不是使用stop(time)和setBuzzer(0)来调整声音的持续时间。
最佳答案
在某个地方,您会找到一个包含文件的包含文件,该文件包含IOSET IOCLR等的#define。
通常,它们映射到GPIO寄存器地址,例如:
#定义FIO0DIR(*(易失性无符号长*)0x3FFFC000)
IOSET通常是一个可写地址,该地址具有硬件功能,可以将写入其中的所有位设置为1,同时将其余GPIO位保留为先前状态。这消除了对读/修改/写操作的需求,因此对中断/线程更友好。它通常具有类似的“ IOCLR”伙伴,可以清除其参数中设置的GPIO端口上的位,而不会影响其他状态。
端口寄存器本身可能被称为“ IOPIN”或类似名称。直接使用IOPIN修改位的一个或子集需要读/修改/写:(
蜂鸣器似乎连接到一个GPIO引脚,因此您只能将其打开和关闭-无法进行更精细的控制。
关于c - 什么是IOSET?简易蜂鸣器(BUZZER_PIN)的工作方式是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13234311/