本帖最后由 NYT369 于 2016-5-21 12:31 编辑
用msp430afe253制作了电路板,程序已经在电路板上运行正常
程序示例:#include "CAN.h"#include "msp430_config.h"#include "mcp2515.h"
#define uchar unsigned char#define uint unsigned int
uchar flag;INT16U NUM_COUNT = 0;INT8U Time_Flag = 0;#define CAN_RST_0 P1OUT &=~BIT1 //#define CAN_RST_1 P1OUT |= BIT1 //
uchar Address; //地址uchar RecvBuff[8]={0}; //接收缓存区 uchar SendBuff[8]={0}, SendIndex=0; //发送缓存区,接发送数据缓存区对应数
uchar can_isr_flag = 0; //P1.2有CAN中断标志:接收、发送、错误、溢出uchar can_rcv_data_flag = 0; //CAN接收数据标志uchar datapro_write_flag=0;//处理接收的数据正确,置位发送uchar times; //计数次数uchar SYSTime;
/////////////////////////////////////////////////////////////////////////////////////////////void delay(uint x){ uchar i; while(x--) for(i=120;i>0;i--);}///////////////////////////////////////////////////////////void Init_Clk(){ uchar i; BCSCTL1&=~XT2OFF; //打开XT2振荡器 //基础时钟控制寄存器BCSCTL1的第7位置0,使XT2启动 do { IFG1 &= ~OFIFG; // 清除振荡器失效标志 for (i = 0xFF; i > 0; i--); // 延时,等待XT2起振 } while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振 BCSCTL2 =SELM_2+SELS+DIVS_0; //选择MCLK为XT2 SMCLK为XT2 不分频}/////////////////////////////////////////////////////////void Init_TimeA(){ TACCTL0 = CCIE; //TBCCR0允许中断 TACCR0 = 8000; //TIME:8000/(8mhz) =1ms TACTL = TASSEL_2 + MC_1; //SMCLK,增计数模式 _BIS_SR( GIE); }
///////////////////////////////////////////////////////////void set_p12_to_int( void ){
P1DIR&=~BIT2; // 中断引脚应该设置为输入 P1IES|=BIT2; //设置为下降沿触发,=0上升触发 P1IFG&=~BIT2; //因为P2IES设置会使中断标志位置位,故清零 P1IE|=BIT2; //设置中断使能}//////////////////////////////////////////////void init_SD24(){ uint i; SD24CTL = SD24SSEL_1+SD24REFON+SD24DIV_3; // 1.2V ref, SMCLK,SMLCK 8分频 SD24INCTL0 = SD24INCH_0+SD24GAIN_16; // Set channel A0+/- 16倍增益 SD24CCTL0 |= SD24SNGL + SD24IE+SD24OSR_512+SD24DF; // Single conv,enable interrupt 采样率为512 数据格式(当增益为1时0-32768表示0~-600mv 65535~32768表示0~600mv) for (i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup
}/////////////////////////////////////////////////////////////////////由于发帖字数限制,该帖子未完,请关注续贴。技术交流:qq:531706356,13106551527
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
在G2板上利用p1.6(PWM输出口)驱动LED来实现呼吸灯。呼吸灯就是亮度渐变的LED灯,普通LED可以用TA输出PWM来控制亮度,通过WDT定时中断来改变亮度,从而实现呼吸灯效果。
1、通过按键来控制呼吸灯的呼吸频率,即亮度渐变的快慢。
控制方式:按扩展板上KEY1键,呼吸加快一档,连续按2下,呼吸加快一档,连续按3下,呼吸又加快一档......;按KEY3键,呼吸减慢一档,连续按2下,呼吸减慢一档,连续按3下,呼吸又减慢一档......。
2、在液晶屏上显示呼吸灯呼吸频率的相关信息
#include<msp430g2553.h>
void BreathLED()
{
P1SEL =BIT6;
P1DIR = BIT6;
P1OUT=0;
TACTL = TASSEL_1 + MC_1 ;
TACCTL1 = OUTMOD_3 ;
TACCTL0 = CCIE;
CCR0 =12000;
CCR1 =327; //0% pwm
TACTL |=TACLR;
_EINT();
}
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
BCSCTL3 |= LFXT1S_2; // Set LFXT1为vol时钟即12kHZ
BreathLED();
LPM0;
return 0;
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void CountTimes()
{
static int Times;
Times++;
switch(Times)
{
case 20:
CCR1=294;
break;
case 30:
CCR1=277;
break;
case 40:
CCR1=262; //20% PWM
break;
case 50:
CCR1=245; //20% PWM
break;
case 60:
CCR1=228; //40% PWM
break;
case 80:
CCR1=196; //40% PWM
break;
case 100:
CCR1=163;
break;
case 120:
CCR1=131; //60% PWM
break;
case 140:
CCR1=98; //60% PWM
break;
case 160:
CCR1=65; //80% PWM
break;
case 180:
CCR1=32; //80% PWM
break;
case 200:
CCR1=1; //100% PWM
break;
case 220:
CCR1=32; //80% PWM
break;
case 240:
CCR1=65;
break;
case 260:
CCR1=98; //60% PWM
break;
case 280:
CCR1=131;
break;
case 300:
CCR1=163;
break;
case 320:
CCR1=196;
break;
一周热门 更多>