大家好、
我是这个板的新手。我正在使用 CCS、我有一项任务是通过按下按钮(s2)来打开蜂鸣器
它将蜂鸣器打开1秒钟、然后将其关闭。
再次按下按钮(1)打开蜂鸣器
它将蜂鸣器打开两次、然后关闭(0.5秒、然后关闭它、然后再次将其关闭0.5秒)。
请提供任何帮助
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
我是这个板的新手。我正在使用 CCS、我有一项任务是通过按下按钮(s2)来打开蜂鸣器
它将蜂鸣器打开1秒钟、然后将其关闭。
再次按下按钮(1)打开蜂鸣器
它将蜂鸣器打开两次、然后关闭(0.5秒、然后关闭它、然后再次将其关闭0.5秒)。
请提供任何帮助
我编写了此代码、但我认为缺少一些内容
#include
/图标
* main.c
秘书长的报告 /
#define 注释3.
#define A1 15855
#define A2 1526
#define MUTE 0
//
//全局数据
//
unsigned int scale[note]={A1、A2、MUTE};
unsigned int space]={A1、MUTE、MUTE};
unsigned int index_note = 0;
//
//基本定时器中断服务例程。 以1秒的周期运行
//
#pragma vector=BASICTIME_VECTOR
_interrupt void basic_timer_ISR (void)
{
TBCCR0 = SPACY[index_note];//获取下一个注释
index_note++;//管理注释点
if (index_note=注释)
index_note = 0;
}
int main (空)
{
volatile unsigned int i;// volatile 以阻止优化
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//FLL+配置// ACLK - 32.768kHz
FLL_CTL0 |= DCOPLUS + XCAP18PF;// DCO+ SET、freq = xtal x D x N+1
SCFI0 |= FN_4;// x2 DCO 频率、8MHz 标称 DCO
SCFQCTL = 121;//(121+1) x 32768 x 2 = 7.99MHz
// TimerB 配置
TBCCR0 = SPACE [0];//从序列加载第一个音调
TBR = 0;//复位 TBR
TBCTL = TBSSEL_2 | CNTL_0 | TBCLGRP_0 |MC_1 | ID_0;// SMCLK、连续模式
TBCCTL4 = OUTMOD_3;//启用 CCR4中断
TBCCR4 =空间[0]/2;
//基本定时器1配置
BTCTL = BTDIV | BT_fCLK2_DIV128;//(ACLK/256)/128
IE2 |= BTIE;//启用 BT 中断
//配置(端口1)
P1SEL = 0x00;// P1.0和 P1.2数字 I/O
P1DIR = 0x00;// P1.0和 P1.2输入
P1IFG = 0x00;//清除 P1标志
P1IE = 0xFF;//启用端口中断
P1OUT = 0x02;//将电阻器设置为上拉、P3.5低电平
P3DIR = 0x20;//将 P3.5设置为输出、将 P1.1设置为 intput
P3OUT = 0x00;
while (1)
{
if (!(P1IN & 0x01))//如果按下按钮1
{
P3SEL |= 0x20;// P3.5作为特殊功能
P3DIR |= 0x20;//蜂鸣器打开
for (i=1000;i>0;i--);//延迟(1秒)
P3OUT &=~0x20;
}
否则,如果(!(P1IN & 0x02))//按下按钮2
{
P3SEL |= 0x20;// P3.5作为特殊功能
P3DIR |= 0x20;//蜂鸣器打开
for (i=500;i>0;i--);// 延迟1nd (0.5秒)
{
P3OUT &=~0x20;
}
P3SEL |= 0x20;// P3.5作为特殊功能
P3DIR |= 0x20;//蜂鸣器打开
for (i=500;i>0;i--);{ //延迟第二个(0.5秒)
P3OUT &=~0x20;}
}
}
_BIS_SR (GIE);//中断被启用
}
>P1IE = 0xFF;//启用端口中断
这会启用(全部)端口1引脚中断、但我看不到用于此操作的 ISR (Port1_vector)。 一旦您按下按钮(可能是较早的按钮)、您将进入 ISR_Trap。
查看其余代码、我认为您根本不需要引脚中断。 我建议您删除这一行。
----------------------------------------
> for (i=1000;i>0;i--);//延迟(1秒)
在8MHz 时、这不会延迟1秒、更像是1毫秒。 我建议您不要使用 for ()循环来实现延迟、因为它很难校准、而是类似于:
>__DELAY_CYCLLES (8000000UL);// 8MHz 时为800万个周期= 1秒
实际上、我更改了代码这是我在两次关闭蜂鸣器时遇到的更新
在此代码中、我只需将其翻转一次、我不知道如何再次将其翻转、有什么建议???????????
#include
#define SW1 P1IN-BIT0
#define SW2 P1IN-BIT1
void main (void)
{
WDTCTL = WDTPW+WDTHOLD;//停止 WDT
TBCCR0 = 436-1;// PWM 周期
TBCCTL4 = OUTMOD_7;// CCR4复位/置位
TBCCR4 = 218;// CCR4 PWM 占空比
TBCTL = TBSSEL_2+MC_1;// SMCLK、upmode
int i = 0;
对于(;;){//无限循环
如果((SW1)= 0){//如果按下 SW1
对于(I = 0;I < 2000;I++);//去抖~20ms
如果((SW1)=0){
P3DIR |= BIT5;// P3.5输出
P3SEL |= BIT5;
}
while ((SW1)=0);
P3SEL &=~0x20;//关闭蜂鸣
}
否则、如果((SW2)=0){//如果按下 SW1
对于(I = 0;I < 1000;I++);//去抖~10ms
如果((SW2)=0){
P3DIR |= BIT5;// P3.5输出
P3SEL |= BIT5;
}
while ((SW2)=0);//等待 SW1被按下
P3SEL &=~0x20;//关闭蜂鸣
}
}
BIS_SR (LPM0_Bits + GIE);// CPU 关闭
}
我理解您的问题:
1) 1)您按住按钮。 [您希望它会嗡嗡声。] 它发出嗡嗡声。
2) 2)您释放按钮。 [您希望它停止嗡嗡声。] 它停止嗡嗡声。
3) 3)您再次按下并按住按钮。 [您希望它会嗡嗡声。] 它不会发出蜂鸣声。
针对这个问题首先要检查的是 R11/R12 [OK]和"当你暂停调试器时、它在何处执行?" [未知]。
如果您的问题与此不同、您可能需要对其进行重新表述。