教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

用按键控制LED灯的亮灭

来源:网络收集 时间:2026-07-16
导读: 用按键控制LED灯的亮灭,当按键按下时,LED灯亮,当按键松开时,LED灯灭。 #include%unsigned char flag; void main(void) { WDTCTL = WDTPW+WDTHOLD; // Stop WDT P4DIR P4DIR |= BIT4+BIT5+BIT6; // P4.4,P4.5,P4.6 set as output P4OUT // set led off P2

用按键控制LED灯的亮灭,当按键按下时,LED灯亮,当按键松开时,LED灯灭。 #include%unsigned char flag; void main(void) {

WDTCTL = WDTPW+WDTHOLD; // Stop WDT P4DIR &=~(BIT2);

P4DIR |= BIT4+BIT5+BIT6; // P4.4,P4.5,P4.6 set as output P4OUT &=~(BIT4+BIT5+BIT6); // set led off P2IE |= BIT6; // enable P2.6 interrupt P2IFG &= ~(BIT6); // clean interrupt flag __enable_interrupt(); // enable interrupt while(1)

{ if((P4IN & 0x04)==0) { P2IFG |= BIT6;} else

{P2IFG &=~BIT6;}}

} // PORT2 interrupt service routine #pragma vector=PORT2_VECTOR __interrupt void port_2(void)

{P4OUT ^=(BIT4+BIT5+BIT6); // set led on

P2IFG &=~BIT6; // clean interrupt flag}

用按键控制LED灯的亮灭,当按键按下时,LED灯亮,当按键松开时,LED灯灭。(查询) #include\void main(void)

{WDTCTL = WDTPW+WDTHOLD; // Stop WDT //setting direction P4DIR &= ~(BIT2); //setting IO for input

P4DIR |= BIT4+BIT5+BIT6; // P4.4,P4.5,P4.6 set as output while (1)

{if ((P4IN & 0x04) == 0) //If key is pressed {P4OUT |= BIT4+BIT5+BIT6; //led on} else{P4OUT &=~(BIT4+BIT5+BIT6); // led off}}}

将ACLK配置为VLOCLK(约为10K),并将ACLK通过P1.0口输出 #include void main(void)

{WDTCTL = WDTPW + WDTHOLD; //关看门狗

UCSCTL4 |= SELA_1; //将ACLK时钟源配置为VLO; P1DIR |= BIT0;

P1SEL |= BIT0; //将ACLK通过P1.0输出

__bis_SR_register(LPM3_bits);//进入LPM3,SMCLK和MCLK停止,ACLK活动} 设ACLK = XT1 = 32768Hz,并通过P1.0输出。 #include void main(void)

{WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= BIT0; // ACLK set out to pin P1SEL |= BIT0;

P5SEL |= BIT4+BIT5; // Select XT1

while(BAKCTL & LOCKIO) // Unlock XT1 pins for operation BAKCTL &= ~(LOCKIO);

UCSCTL6 &= ~(XT1OFF); // XT1 On

UCSCTL6 |= XCAP_3; // Internal load cap

// Loop until XT1 fault flag is cleared do

{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);

SFRIFG1 &= ~OFIFG; // Clear fault flags

}while (SFRIFG1&OFIFG); // Test oscillator fault flag UCSCTL6 &= ~(XT1DRIVE_3); // reduce drive strength

UCSCTL4 |= SELA_0; // ACLK = LFTX1 (by default) __bis_SR_register(LPM3_bits); // Enter LPM3 }

设ACLK = XT1 = 32768Hz,令SMCLK = XT2CLK,MCLK = DCO(默认) = 32 x ACLK = 1048576Hz,ACLK和SMCLK分别通过P1.0和P3.4输出。 #include void main(void) {

WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= BIT0; // ACLK set out to pins P1SEL |= BIT0;

P3DIR |= BIT4; // SMCLK set out to pins P3SEL |= BIT4;

while(BAKCTL & LOCKIO) // Unlock XT1 pins for operation BAKCTL &= ~(LOCKIO);

P7SEL |= BIT2+BIT3; // Port select XT2 UCSCTL6 &= ~XT2OFF; // Set XT2 On UCSCTL6 &= ~(XT1OFF); // XT1 On

UCSCTL6 |= XCAP_3; // Internal load cap do

{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);

SFRIFG1 &= ~OFIFG; // Clear fault flags

}while (SFRIFG1&OFIFG); // Test oscillator fault flag

UCSCTL6 &= ~XT2DRIVE0; // Decrease XT2 Drive according to // expected frequency

UCSCTL4 |= SELA_0 + SELS_5; // Select SMCLK, ACLK source andDCO source

while(1); // Loop in place }

设ACLK = TACLK = LFXT1 = 32768, MCLK = SMCLK = DCOCLK = 32×ACLK = 1.048576Mhz,利用Timer_A输出周期为512 /32768 = 15.625ms、占空比分别为75%和25%的PWM矩形波: #include void main(void)

{WDTCTL = WDTPW + WDTHOLD; // Stop WDT while(BAKCTL & LOCKIO) BAKCTL &= ~(LOCKIO); // Unlock XT1 pins for operation UCSCTL6 &= ~(XT1OFF); // XT1 On

UCSCTL6 |= XCAP_3; // Internal load cap // Loop until XT1 fault flag is cleared do

{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);

SFRIFG1 &= ~OFIFG; // Clear fault flags }while (SFRIFG1&OFIFG); // Test oscillator fault flag

P1DIR |= BIT2+BIT3; // P1.2 and P1.3 output P1SEL |= BIT2+BIT3; // P1.2 and P1.3 options select TA0CCR0 = 512-1; // PWM Period

TA0CCTL1 = OUTMOD_7; // CCR1 reset/set

TA0CCR1 = 384; // CCR1 PWM duty cycle TA0CCTL2 = OUTMOD_7; // CCR2 reset/set

TA0CCR2 = 128; // CCR2 PWM duty cycle

TA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR __bis_SR_register(LPM3_bits); // Enter LPM3 __no_operation(); // For debugger }

由程序知:P1.2—> TA0CCR1 - 75% PWM,P1.3—> TA0CCR2 - 25% PWM。周期15.625ms

利用定时器实现开发板上的LED灯以1Hz的频率闪烁 #include void main(void)

{ WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗

P4DIR |= BIT4 + BIT5 + BIT6; // P4.4、P4.5、P4.6设为输出 TA0CCTL0 = CCIE; // CCR0中断使能 TA0CCR0 = 16384;

TA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, 增计数模式, 清除TAR计数器 __bis_SR_register(LPM0_bits + GIE); // 进入LPM0,使能中断 …… 此处隐藏:4536字,全部文档内容请下载后查看。喜欢就下载吧 ……

用按键控制LED灯的亮灭.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/615678.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)