请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 你(们)好
我正在处理代码中的小移位、我使用了延迟周期、但我想使用 timerA。尝试了一些东西、但它不起作用。
#include "msp430g2553.h"
#define SW1 BIT3
#define SW2 BIT4
#define SW3 BIT5
#define SEG_A BIT0
#define SEG_B BIT1
#define SEG_C BIT2
#define SEG_D BIT3
const unsigned int digit[5]={SEG_A BIT1 + SEG_A
~
+ SEG_D + SEG_A + SEG_A + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG + SEG UNsigned INVAL INT INT INT INT INT_UN
int b;
int c;
int t;
int 语言;
int nextposition;
void GO_up (void);
void GO_DOWN (void);
void main (void)
{
电流位置= 2;
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
P2DIR =(SEG_A + SEG_B + SEG_C + SEG_D);
P1DIR =~SW1 +~SW2 +~SW3; //设置 SW 引脚->输入
P1REN = SW1 + SW2 + SW3; // SW 引脚的使能电阻器
P1OUT = SW1 + SW2 + SW3;
P1IE |= BIT3 + BIT4 + BIT4;
P1IES |= BIT3 + BIT4 + BIT4;
P1REN |= BIT3 + BIT4 + BIT4;
P1OUT |= BIT3;
P1IFG &=~BIT3 +~BIT4 +~BIT4;
while (1) //循环永远,我们处理中断!
{_BIS_SR (CPUOFF + GIE);}
//输入带中断
的 LPM0 }
//端口1中断服务例程的地址为 Port1_vector
#pragma vector=Port1_vector
__interrupt void Button (void)
{
if (!(P1IN 和 SW1)) //检查是否按下了 SW
{
_delay_cycles (10000);
A = 1;
nextposition = currentposition - A;
if (nextposition = 1)(如果(nextposition = 1))
{
语言= 1;
GO_dow();
}
if (nextposition == 2)
{
语言= 4;
GO_dow();
}
当前位置= 1;
}
if (!(P1IN 和 SW2)) //检查是否按下了 SW
{
_delay_cycles (10000);
b = 2;
nextposition = currentposition - b;
if (nextposition =-1)(如果(nextposition =-1))
{
语言= 2;
GO_dow();
}
if (nextposition = 1)(如果(nextposition = 1))
{
语言= 1;
GO_dow();
}
当前位置= 2;
}
if (!(P1IN 和 SW3)) //检查是否按下了 SW
{
C = 3;
nextposition = currentposition - c;
if (nextposition =-2)
{
语言= 3;
GO_dow();
}
if (nextposition =-1)(如果(nextposition =-1))
{
语言= 2;
GO_dow();
}
当前位置= 3;
}
P1IFG &=~BIT3;
__DELAY_CYCLES (1000);
}
void GO_UP (void){
volatile unsigned int i;
对于(x = 0;x < 100;x++)
{
对于(I = 0;I < 4;I++)
{
P2OUT =(P2OUT 和 DMASK)+数字[i];
__delay_cycles (10000);
}
__DELAY_CYCLES (1000);
}
P2OUT = 0;
}
void GO_DOWN (void){
volatile unsigned int i;
for (t = 100;t > 0;t-)
{
对于(I = 4;I > 0;I-)
{
P2OUT =(P2OUT 和 DMASK)+数字[i];
__delay_cycles (10000);
}
__DELAY_CYCLES (1000);
}
P2OUT = 0;
}
void GO_dow (void){
switch (language){
案例1:
{
GO_DOWN();
语言= 0;
中断;
}
案例2:
{
GO_UP();
语言= 0;
中断;
}
案例3:
{
GO_UP();
GO_UP();
语言= 0;
中断;
}
案例4:
{
GO_DOWN();
GO_DOWN();
语言= 0;
中断;
}
}
#include "msp430g2553.h" #define SW1 BIT3 #define SW2 BIT4 #define SW3 BIT5 #define SEG_A BIT0 #define SEG_B BIT1 #define SEG_C BIT2 #define UNsigned SEG_D BIT3 #define DMASK ~(SEG_A + SEG_B + SEG_B + SEG_B + SEG_B + SEG_B + SEG_UNLOCK UNLOCK INT_UNLOCK 位数;SEG_INT_UNLOCK + SEG_D + SEG_INT_UNLOCK + SEG_INT_UNLOCK + SEG_INT_UNLOCK + SEG[SEG_INT_SEG_INT_SEG] int a; int b; int c; int t; int 语言; int nextposition; void GO_up (void); void GO_DOWN (void); volatile unsigned char delay; #pragma vector=TIMER0_A0_vector __interrupt void TIMER0_A0_ISR (void) { 延迟= 0; } void timer_delay (unsigned int msec) { 延迟= 1; if (msec > 174) msec = 174; TACCR0 = msec*375 + TA0R; TACCTL0 = CCIE; while (延迟>0); TACCTL0 &=~CCIE; } void timer_init (void) { BCSCTL2 |= DIVS_3; TACTL |= TASSEL_2 | ID_2; TACTL |= TACLR | MC_2; } void main (void) { 电流位置= 2; WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 P2DIR |=(SEG_A + SEG_B + SEG_C + SEG_D); P1DIR &=~Ω(SW1 + SW2 + SW3); //设置 SW 引脚->输入 P1REN |=(SW1 + SW2 + SW3); // SW 引脚的使能电阻器 P1OUT |=(SW1 + SW2 + SW3); P1IE |= BIT3 + BIT4 + BIT4; P1IES |= BIT3 + BIT4 + BIT4; P1REN |= BIT3 + BIT4 + BIT4; P1OUT |= BIT3; P1IFG &=~(BIT3 + BIT4 + BIT4); timer_init(); while (1) //循环永远,我们处理中断! { _BIS_SR (CPUOFF + GIE); } //通过中断 输入 LPM0} void go_dow (void); //端口1中断服务例程的地址为 Port1_vector #pragma vector=Port1_vector __interrupt void Button (void) { IF (!(P1IN 和 SW1)) //检查是否按下了 SW { Timer_delay (8); // A = 1; nextposition = currentposition - A; 如果(nextposition = 1) { 语言= 1; GO_dow(); } 如果(nextposition == 2) { 语言= 4; GO_dow(); } 当前位置= 1; } IF (!(P1IN 和 SW2)) //检查是否按下了 SW { Timer_delay (8); // b = 2; nextposition = currentposition - b; 如果(nextposition =-1) { 语言= 2; GO_dow(); } 如果(nextposition = 1) { 语言= 1; GO_dow(); } 当前位置= 2; } IF (!(P1IN 和 SW3)) //检查是否按下了 SW { C = 3; nextposition = currentposition - c; 如果(nextposition =-2) { 语言= 3; GO_dow(); } 如果(nextposition =-1) { 语言= 2; GO_dow(); } 当前位置= 3; } P1IFG &=~BIT3; Timer_delay (1); } void GO_UP (void) { volatile unsigned int i; 对于(x = 0;x < 100;x++) { 对于(I = 0;I < 4;I++) { P2OUT =(P2OUT 和 DMASK)+数字[i]; Timer_delay (8); // } Timer_delay (1); // } P2OUT = 0; } void GO_DOWN (void) { volatile unsigned int i; 对于(t = 100;t > 0;t-) { 对于(I = 4;I > 0;I-) { P2OUT =(P2OUT 和 DMASK)+数字[i]; Timer_delay (8); // } Timer_delay (1); // } P2OUT = 0; } void GO_dow (void) { 开关(语言) { 案例1: { GO_DOWN(); 语言= 0; 中断; } 案例2: { GO_UP(); 语言= 0; 中断; } 案例3: { GO_UP(); GO_UP(); 语言= 0; 中断; } 案例4: { GO_DOWN(); GO_DOWN(); 语言= 0; 中断; } }