完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include #define MCLK_C (1) #define Delay_us(n) __delay_cycles(n*MCLK_C) #define Delay_ms(n) __delay_cycles(n*(1000L)*MCLK_C) int b=1; int main(void) { WDTCTL = WDTPW+WDTHOLD; P1DIR|=BIT6; P1SEL|=BIT6; P1REN|=BIT3; P1OUT|=BIT3; P1IE|=BIT3; P1IES=BIT3; P1IFG&=~BIT3; CCR0=1000; CCTL1=OUTMOD_7; CCR1=0; TACTL=TASSEL_2+MC_1+TACLR; _EINT(); while(1) { if(b==1) { CCR1+=5; Delay_ms(10); if(CCR1>=1000&b==1) { while(b==1) { CCR1-=5; Delay_ms(10); if(CCR1<=0) { CCR1=0; break; } } } } if(b==0) { CCR1=0; while(b==0); } } } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { if(b==1) { b=0; P1IFG&=~BIT3; } if(b==0) { b=1; P1IFG&=~BIT3; } } |
|
相关推荐
8个回答
|
|
|
|
|
|
|
|
|
|
你这程序编译过了吗,定时寄存器名称写错了吧,呼吸灯渐亮渐灭程序用两个for循环就好了,没必要写那些重复多余的语句 —————小白上路,如有错误不当之处,还望各路大神批评指正 |
|
|
|
你这个好多错的
|
|
|
|
#include
#include "Config.h" //开发板配置头文件,主要配置IO端口信息 #define KEY_IN (P1IN & 0xF0) int KEY_VAL = 0; //*********************************************************************** // MSP430IO口初始化 //*********************************************************************** void Port_Init() { LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; //设置IO口方向为输出 LED8PORT = 0xFF; //P2口初始设置为FF DATASEL = 0x00; //设置IO口为普通I/O模式,此句可省 DATADIR = 0xFF; //设置IO口方向为输出 DATAPORT = 0xFF; //P4口初始设置为FF CTRSEL = 0x00; //设置IO口为普通I/O模式,此句可省 CTRDIR |= BIT3 + BIT4; //设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; //P6口初始设置为FF P1IES = 0xF0; //P14~P17选择下降沿中断 P1IE = 0xF0; //打开中断使能 P1IFG = 0x00; //中断标志位清零 } //*********************************************************************** // PWM初始化 //*********************************************************************** void PWM_Init1(void) //产生10KHZ、占空比为50%的PWM信号 { P1SEL |= BIT2; //P12口输出PWM信号 P1DIR |= BIT2; //P12口接入一个LED发光二极管 TACCR0 = 800; //CCR0 TACCR1 = 200; //CCR1,占空比50%,可以更改,LED灯亮度会变化 TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位 TACTL |= TASSEL1 + MC0; //SMCLK做时钟源,1分频,增加计数模式 } void PWM_Init2(void) //产生10KHZ、占空比为50%的PWM信号 { P1SEL |= BIT2; //P12口输出PWM信号 P1DIR |= BIT2; //P12口接入一个LED发光二极管 TACCR0 = 800; //CCR0 TACCR1 = 400; //CCR1,占空比50%,可以更改,LED灯亮度会变化 TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位 TACTL |= TASSEL1 + MC0; //SMCLK做时钟源,1分频,增加计数模式 } void PWM_Init3(void) //产生10KHZ、占空比为50%的PWM信号 { P1SEL |= BIT2; //P12口输出PWM信号 P1DIR |= BIT2; //P12口接入一个LED发光二极管 TACCR0 = 800; //CCR0 TACCR1 = 600; //CCR1,占空比50%,可以更改,LED灯亮度会变化 TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位 TACTL |= TASSEL1 + MC0; //SMCLK做时钟源,1分频,增加计数模式 } void PWM_Init4(void) //产生10KHZ、占空比为50%的PWM信号 { P1SEL |= BIT2; //P12口输出PWM信号 P1DIR |= BIT2; //P12口接入一个LED发光二极管 TACCR0 = 800; //CCR0 TACCR1 = 800; //CCR1,占空比50%,可以更改,LED灯亮度会变化 TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位 TACTL |= TASSEL1 + MC0; //SMCLK做时钟源,1分频,增加计数模式 } //************************************************************************* // pwm选择函数 //************************************************************************* void pwm_sel(int unm) { if(unm == 1) {void PWM_Init1();} else if(unm == 2) {void PWM_Init2();} else if(unm == 3) {void PWM_Init3();} else if(unm == 4) {void PWM_Init4();} } //************************************************************************* // 中断服务函数 //************************************************************************* #pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void) { if(P1IFG & 0xF0) { switch(P1IFG&0xF0) //进行一个与操作,避免判断值出现其他影响 { case 0x10: if(KEY_IN == 0xE0) //如果是第一个按键被按下 { delay_ms(20); //20ms的消抖时间 if(KEY_IN == 0xE0) { while(KEY_IN != 0xF0); //等待键释放 KEY_VAL = 1; P1IFG = 0; return; } } case 0x20: if(KEY_IN == 0xD0) //如果是第二个按键被按下 { delay_ms(20); if(KEY_IN == 0xD0) { while(KEY_IN != 0xF0); //等待键释放 KEY_VAL = 2; P1IFG = 0; return; } } case 0x40: if(KEY_IN == 0xB0) //如果是第三个按键被按下 { delay_ms(20); if(KEY_IN == 0xB0) { while(KEY_IN != 0xF0); //等待键释放 KEY_VAL = 3; P1IFG = 0; return; } } case 0x80: if(KEY_IN == 0x70) //如果是第四个按键被按下 { delay_ms(20); if(KEY_IN == 0x70) { while(KEY_IN != 0xF0); //等待键释放 KEY_VAL = 4; P1IFG = 0; return; } } default: while(KEY_IN != 0xF0); //等待键释放 P1IFG = 0; return; } } } //************************************************************************* // 主函数 //************************************************************************* void main(void) { WDT_Init(); //看门狗设置 Clock_Init(); //系统时钟设置 Port_Init(); //端口初始化 Close_LED(); //关闭数码管显示 _EINT(); while(1) //无限循环 { pwm_sel(KEY_VAL); } } |
|
|
|
#include
#include "Config.h" //开发板配置头文件,主要配置IO端口信息 #define KEY_IN (P1IN & 0xF0) int KEY_VAL = 0; //*********************************************************************** // MSP430IO口初始化 //*********************************************************************** void Port_Init() { LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; //设置IO口方向为输出 LED8PORT = 0xFF; //P2口初始设置为FF DATASEL = 0x00; //设置IO口为普通I/O模式,此句可省 DATADIR = 0xFF; //设置IO口方向为输出 DATAPORT = 0xFF; //P4口初始设置为FF CTRSEL = 0x00; //设置IO口为普通I/O模式,此句可省 CTRDIR |= BIT3 + BIT4; //设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; //P6口初始设置为FF P1IES = 0xF0; //P14~P17选择下降沿中断 P1IE = 0xF0; //打开中断使能 P1IFG = 0x00; //中断标志位清零 } //*********************************************************************** // PWM初始化 //*********************************************************************** void PWM_Init1(void) //产生10KHZ、占空比为50%的PWM信号 { P1SEL |= BIT2; //P12口输出PWM信号 P1DIR |= BIT2; //P12口接入一个LED发光二极管 TACCR0 = 800; //CCR0 TACCR1 = 200; //CCR1,占空比50%,可以更改,LED灯亮度会变化 TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位 TACTL |= TASSEL1 + MC0; //SMCLK做时钟源,1分频,增加计数模式 } void PWM_Init2(void) //产生10KHZ、占空比为50%的PWM信号 { P1SEL |= BIT2; //P12口输出PWM信号 P1DIR |= BIT2; //P12口接入一个LED发光二极管 TACCR0 = 800; //CCR0 TACCR1 = 400; //CCR1,占空比50%,可以更改,LED灯亮度会变化 TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位 TACTL |= TASSEL1 + MC0; //SMCLK做时钟源,1分频,增加计数模式 } void PWM_Init3(void) //产生10KHZ、占空比为50%的PWM信号 { P1SEL |= BIT2; //P12口输出PWM信号 P1DIR |= BIT2; //P12口接入一个LED发光二极管 TACCR0 = 800; //CCR0 TACCR1 = 600; //CCR1,占空比50%,可以更改,LED灯亮度会变化 TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位 TACTL |= TASSEL1 + MC0; //SMCLK做时钟源,1分频,增加计数模式 } void PWM_Init4(void) //产生10KHZ、占空比为50%的PWM信号 { P1SEL |= BIT2; //P12口输出PWM信号 P1DIR |= BIT2; //P12口接入一个LED发光二极管 TACCR0 = 800; //CCR0 TACCR1 = 800; //CCR1,占空比50%,可以更改,LED灯亮度会变化 TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位 TACTL |= TASSEL1 + MC0; //SMCLK做时钟源,1分频,增加计数模式 } //************************************************************************* // pwm选择函数 //************************************************************************* void pwm_sel(int unm) { if(unm == 1) {void PWM_Init1();} else if(unm == 2) {void PWM_Init2();} else if(unm == 3) {void PWM_Init3();} else if(unm == 4) {void PWM_Init4();} } //************************************************************************* // 中断服务函数 //************************************************************************* #pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void) { if(P1IFG & 0xF0) { switch(P1IFG&0xF0) //进行一个与操作,避免判断值出现其他影响 { case 0x10: if(KEY_IN == 0xE0) //如果是第一个按键被按下 { delay_ms(20); //20ms的消抖时间 if(KEY_IN == 0xE0) { while(KEY_IN != 0xF0); //等待键释放 KEY_VAL = 1; P1IFG = 0; return; } } case 0x20: if(KEY_IN == 0xD0) //如果是第二个按键被按下 { delay_ms(20); if(KEY_IN == 0xD0) { while(KEY_IN != 0xF0); //等待键释放 KEY_VAL = 2; P1IFG = 0; return; } } case 0x40: if(KEY_IN == 0xB0) //如果是第三个按键被按下 { delay_ms(20); if(KEY_IN == 0xB0) { while(KEY_IN != 0xF0); //等待键释放 KEY_VAL = 3; P1IFG = 0; return; } } case 0x80: if(KEY_IN == 0x70) //如果是第四个按键被按下 { delay_ms(20); if(KEY_IN == 0x70) { while(KEY_IN != 0xF0); //等待键释放 KEY_VAL = 4; P1IFG = 0; return; } } default: while(KEY_IN != 0xF0); //等待键释放 P1IFG = 0; return; } } } //************************************************************************* // 主函数 //************************************************************************* void main(void) { WDT_Init(); //看门狗设置 Clock_Init(); //系统时钟设置 Port_Init(); //端口初始化 Close_LED(); //关闭数码管显示 _EINT(); while(1) //无限循环 { pwm_sel(KEY_VAL); } } |
|
|
|
if(b==1)
{ CCR1+=5; Delay_ms(10); if(CCR1>=1000&b==1) { while(b==1) { CCR1-=5; Delay_ms(10); if(CCR1<=0) { CCR1=0; break; } } } } if(b==0) { CCR1=0; while(b==0); } 这段程序太冗杂了吧!太多的重复判定,太多的无用语句。编辑器都不一定能编辑正确 |
|
|
|
if(wifi_led_cnt<5)
{ Fcard_WIFI=0; } else if(wifi_led_cnt>wifi_led_Speed) { wifi_led_cnt=0; } else { Fcard_WIFI=1; }参照下这段,把wifi_led_cnt丢进定时器就行了 |
|
|
|
只有小组成员才能发言,加入小组>>
3031个成员聚集在这个小组
加入小组2923 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3594 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2341 浏览 1 评论
4800 浏览 1 评论
2573 浏览 1 评论
1325浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3596浏览 2评论
2925浏览 1评论
1508浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 03:49 , Processed in 2.183100 second(s), Total 94, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号