⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 main.c

📁 msp430单片机与电子指南针的接口程序
💻 C
字号:
/*采用p3口输入 p2.0中断   中断一次采集一次同时写入一次*/


#include <msp430x13x.h>
/*#define xie 10 0xea00  //5kb
#define xie 9  0xec00
#define xie 8  0xee00
#define xie 7  0xf000
#define xie 6  0xf200
#define xie 5  0xf400
#define xie 4  0xf600
#define xie 3  0xf800
#define xie 2  0xfa00 */
#define xie1    0xfc00
char a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
char caiji[2],b=0;
int ifg;
void xie( );
void delay(int v)                                    //延时子程序
{ while(v!=0)v--;}
void display(void)                                    //显示
{char x1,x2,x3;
 x1=(caiji[1]/1+256*caiji[0])/100;
 x2=((caiji[1]/1+256*caiji[0])%100)/10;
 x3=(caiji[1]/1+256*caiji[0])%10;
 P5OUT=a[x1];P4OUT=a[x2];P2OUT=a[x3];
}

void main(void)
{
  WDTCTL= WDTPW + WDTHOLD;//关闭看门狗

 BCSCTL1&=0X7F;
 BCSCTL2|=0X88;//8M直通

int j;
 P1DIR=0x00;                      // P1口为输入
 P2DIR=0xff;                      // P2	口为输入
 P4DIR=0XFF;
 P5DIR=0XFF;

 P3SEL|=0X30;
 P3DIR|=0X10;

 UCTL0|=SWRST;//这之后才能对串口模块其它寄存器做修改
 UCTL0=CHAR;//
 UTCTL0=SSEL0+SSEL1;//时钟源为ACLK(只能来自低速晶体)32768

 UBR00=65;
 UBR10=3;
 UMCTL0=0X54;//波特率为9600

 UCTL0&=~SWRST;//这之后发送模块才能工作

 ME1|=0x80+0x40;//允许串口模块工作
 IE1|=URXIE0+UTXIE0;//允许发送和接收中断

 IFG1=0X02;//使UTXIFG0复位
 _EINT();   //使能中断,这是一个C编译器支持的内部过程。

while(1)
{
if(P1IN==0XFE)
{delay(6000);
 if(P1IN==0XFE)                                  //p1.0长按 写模式
 {P4OUT=0XF9;
   for(j=1;j<2/*11*/;j++)
   {
     xie(j);
     FCTL1=FWKEY; FCTL3=FWKEY+LOCK;//写完锁定
   }
   P4OUT=0x00;
 }
}


if(P1IN==0XFD)
{delay(6000);
 if(P1IN==0XFD)                                 //p1.1长按 发送模式
{P5OUT=0XF9;
 int seg,t;

 for(seg=1;seg<2/*11*/;seg++)
 {
  char *fasong=(char *)xie1-0x0200*(seg-1);
  for(t=0;t<512;t++)
   {
   TXBUF0=*(fasong+t);
   delay(300);
   }
 }
}}}}



void xie(int duan)                               //写某一段
{ int i;
  char *xie_duan=(char *)xie1-0x0200*(duan-1);
  FCTL1=+FWKEY+ERASE;//擦除一段
  FCTL3=FWKEY;//解锁
  *xie_duan=0;//空写 启动擦除
  FCTL1=FWKEY+WRT;//开始写入数据
 for(i=0;i<257;i++)
 { if (P1IN==0xFB)
  {delay(6553);
   if (P1IN==0xFB||P2IN==0XFB)                              //p1.2长按 向模块发送91
   {P2OUT=0xf9;TXBUF0=0x91;delay(65500);ifg=1;}
  }
   if(ifg==1)
   {
    *xie_duan++=caiji[0];
    *xie_duan++=caiji[1];
     ifg=0;display();
   }
   else
   i=i-1;
  }
}



 #pragma vector=USART0TX_VECTOR                    //发送中断
__interrupt void usart0_tx (void)
{;}


#pragma vector=USART0RX_VECTOR                     //接收中断
__interrupt void  UART0RX0_rx (void)
{
  caiji[b]=RXBUF0;delay(300);b=b+1;
  if(b==2)b=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -