工具/软件:Code Composer Studio
你(们)好 我需要为我的演讲制作一个项目我的老师要求我们使用7段显示器和4个 LED 指示器进行0-9计数器。 7段显示屏显示数字、4 LED 显示为二进制数。 我们需要使用3个按钮来调节数字的上下、并使用一个按钮来关闭所有 LED。 我和我的朋友写了一个代码,可以满足他的要求,但是我们不能同时使用端口1和端口2矢量,因为我们只能使用2个按钮,我们不能使用第三个按钮。 如果您可以向我们展示如何同时使用端口1和端口2矢量中断、那么这将是非常好的。 我的 MSP430是一个内含 g2553的 launchpad。
代码:
#include
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
P1DIR |= BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;//七段显示 bagladigimiz portlari 输出 yaptik
P2DIR |= BIT0+BIT1 +BIT2 + BIT3;//二进制 olarak gosterecegimiz ledlicin 输入 yaptik ancak bu devreye daha sonra baglayacagiz (kodunu daha sonra yazacagiz)
P1OUT &=~(BIT0+BIT1 +BIT2 + BIT3+BIT4+BIT5+BIT6);//baslangicta ledlerimizi kapadik
P2OUT &=~(BIT0+BIT1 + BIT2 + BIT3);
P1DIR &=~BIT7;//端口1 Deki BIT0dan BIT6 ya kadar olan Pinleri 七段显示 icin kullandik geriye Kalan BIT7 yi ONOFF tsu icin 输入 yaptik
P2DIR &=~(BIT4+BIT4);// bu iki bit i ise rakamlarimizi arttirmak
//alttaki kissimda ise butonlarimizi 上拉 olarak ayarladik
P1REN |= BIT7;
P2REN |= BIT4+BIT5;
P1OUT |= BIT7;
P2OUT |= BIT4+BIT5;
//islemci hizini 1MHz yaptik
DCOCTL= CALDCO_1MHz;
BCSCTL1 = CALBC1_1MHz;
// alttaki kimida butonlarimiz icin gerekli interrupt registerlarini atadik
P1IE |= BIT7;
P2IE |= BIT4+BIT5;
P1IFG &=~BIT7;
P2IFG &=~(BIT4+BIT4);
P1IES |= BIT7;
P2IES |= BIT4+BIT5;
_BIS_SR (GIE);
返回0;
}
#pragma vector = Port1_vector
_interrupt void ONOFF (void)
{
int display[11]={0、0x3F、0x06、0x5B、0x4F、0x66、0x6D、0x7D、0x07、0x7F、0x6f};//internetten yarlanarak 七段显示 icin 十六进制 kodlari yazaye 显示 adik
int n=0;// n integerini belirledik boylece her n yi arttirdigimizda display icinde sonraki sayiya gelecek ve seven segment display de gozlemleecegiz
if (((P1IN&BIT7)!= BIT7) //端口1 Deki butonu kapatmak icin ayaladik
{
N=4;
P1OUT |= DISPLAY[n];
P1IFG &=~BIT7;
}
}
#pragma vector = port2_vector
_interrupt void AYAR (void)
{
int display[11]={0、0x3F、0x06、0x5B、0x4F、0x66、0x6D、0x7D、0x07、0x7F、0x6f};
int n=0;
int LED[11]={0x00、0x00、0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08、0x09};
while (1)
{
if (((P2IN&BIT4)!= BIT4)&&((P2IN&BIT4)= BIT4)// port2 deki bit4e denk gelen butonu sayiyi arttirmak icin kurduk
{
if (n=10)// n degerimiz 10 a eit olursa(亚尼萨伊奥拉克9 u gercerte)
{
N=0;
P2IFG &=~BIT4;
}
P1OUT &=~显示[n];// burada yaptigimiz islem once suanki n degerini sondur sonraki n degerine GEC o o degere denk gelen ledleri yak
P2OUT &=~LED[n];
N++;
P1OUT |= DISPLAY[n];
P2OUT |= LED[n];
P2IFG &=~BIT4;
如果(n=1)
{
P2OUT &=~(BIT0+BIT1 + BIT2 + BIT3);
}
if (n=1) // bunu koymayinca 0 da bazi ledlerin yerleri karisiyordu ONU debuggladik
{
P1OUT &=~BIT6;
P1OUT |= BIT1;
}
if (n=2)// bu kodda ise 1 de 1 tane led fazladan yaniyordu ONU sondurduk
{
P1OUT &=~BIT6;
}
_DELAY_CYCLES (250000);
}
if ((((P2IN-BIT5)!= BIT5)&&((P2IN&BIT4)= BIT4)// yukaridaki islemlerin aynisini yaptik Tek FARK burda rakamlimiz azaliyor
{
如果(n<=1)
{
N=11;
P2IFG &=~BIT4;
}
P1OUT &=~DISPLAY[n];
P2OUT &=~LED[n];
N-;
P1OUT |= DISPLAY[n];
P2OUT |= LED[n];
P2IFG &=~BIT4;
如果(n=1)
{
P2OUT &=~(BIT0+BIT1 + BIT2 + BIT3);
}
如果(n=10)
{
P1OUT &=~ BIT4;
}
如果(n=1)
{
P1OUT &=~ BIT6;
P1OUT |= BIT1;
}
如果(n=2)
{
P1OUT &=~ BIT6;
}
_DELAY_CYCLES (250000);
}
如果(((P2IN&BIT4)!= BIT5)&((P2IN&BIT4)!= BIT4))
{
P1OUT &=~DISPLAY[n];
P2OUT &=~LED[n];
P2IFG &=~BIT4;
P2IFG &=~BIT4;
_DELAY_CYCLES (750000);
}
}
}