实验内容:用p1.2为引脚输出方波并用p1.1,p2.1按键对该波的占空比进行调整,同时用LED灯反应按键
参考代码
#include "driverlib.h"
#define p1_2 TA0CCR1//p1.2占空比计数
#define p1_3 TA0CCR2//p1.3占空比计数
void main (void)
{
//看门狗
WDTCTL = WDTPW|WDTHOLD;
//按键-输入
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2,GPIO_PIN1);//p2.1为输入,上拉S1
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);//p1.1为输入,上拉S2
//p1.2, 1.3-输出
P1DIR |=BIT2+BIT3;
P1SEL = BIT2+BIT3;//p1.2, 1.3复用输出PWM
//定时器TA0
unsigned PWM=2000;//设置周期函数
TA0CCR0=PWM;//设置PWM周期
TA0CTL=TASSEL_2 + MC_1 + TACLR;//SMCLK时钟源,增计数模式
TA0CCR1=1500;
TA0CCTL1=OUTMOD_7;//TA0CCTL1的输出模式
TA0CCR2=500;
TA0CCTL2=OUTMOD_7;//TA0CCTL2的输出模式
p1_2=900;//p1.2占空比
p1_3=900;//p1.3占空比
GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);//LED1:p1,0为输出
GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN7);//LED2:p4,7为输出
GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);//LED1熄灭:p1,0为输出低电平
GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);//LED1点亮:p1,0为输出高电平
GPIO_setOutputLowOnPin(GPIO_PORT_P4,GPIO_PIN7);//LED2熄灭:p4,7为输出低电平
GPIO_setOutputHighOnPin(GPIO_PORT_P4,GPIO_PIN7);//LED2点亮:p4,7为输出高电平
while(1)
{
if((GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1))|| (GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1)))
{
__delay_cycles(5000);//延时
if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1))
{
while((GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1)));//等待按键释放
TA0CCR1=p1_2-150;//改变1.2引脚的输出占空比
GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);//取反1,0引脚的输出
}
if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1))
{
while(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1));//等待按键释放
TA0CCR1=p1_2+150;//改变1.2引脚的输出占空比
GPIO_toggleOutputOnPin(GPIO_PORT_P4,GPIO_PIN7);//取反4,7引脚的输出
}
}
__delay_cycles(10000);//延时
}
}
注:接示波器时接p1.2和地,p1.3为参考,本实验不做调整