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

📄 成功.txt

📁 MSP430子程序集
💻 TXT
字号:
//xt1 32768KHZ xt2 8MHZ ,红外接收头接于P1.0
#include "msp430x14x.h"
#define   SHUMA_PORT_DIR  P5DIR
#define   SHUMA_PORT_OUT  P5OUT
#define   SHUMA_1_LOW     P4OUT&=~BIT0
#define   SHUMA_1_HIGH    P4OUT|=BIT0
#define   SHUMA_2_LOW     P4OUT&=~BIT1     //数码管控制引脚定义
#define   SHUMA_2_HIGH    P4OUT|=BIT1
#define   SHUMA_3_LOW     P4OUT&=~BIT2
#define   SHUMA_3_HIGH    P4OUT|=BIT2
#define   SHUMA_4_LOW     P4OUT&=~BIT3
#define   SHUMA_4_HIGH    P4OUT|=BIT3
//**********************************************************************
#define   HONGWAI_BIT      BIT0//红外接收头接于P1.0
#define   HONGWAI_DIR_IN   P1DIR&=~HONGWAI_BIT//设置p1.0为输入
#define   HONGWAI_IES_ON   P1IES|=HONGWAI_BIT//p1.0设置为低电平中断   红外引脚定义
#define   HONGWAI_IE_ON    P1IE|=HONGWAI_BIT//允许pl.0中断
#define   HONGWAI_IE_OFF   P1IE&=~HONGWAI_BIT//禁止p1.0中断
#define   HONGWAI_IFG      P1IFG//p1.0中断标志
#define   HONGWAI_IN       (P1IN & BIT0) //P1.0输入
//**********************************************************************
#define   uchar  unsigned char
#define   uint   unsigned int

static uint DISPLAY=0;
void int_clk();//时钟初始化子程序声明
void int_io();//制口的初始化
void delay_us(uint i);//2.5微妙延时程序
void delay(unsigned char x);
void shumaguan_xianshi();
const uchar tabl1[11]={0x05,0xdd,0x46,0x54,0x9c,0x34,0x0a4,0x5d,0x04,0x1c,0xff};
        // ;0  ,1  ,2  ,3  ,4,  5,  6   ,7   ,8  ,9 ,灭}数码管断码表
 
//时钟初始化子程序
void int_clk()
{
  uchar  i;
  BCSCTL1&=~XT2OFF;
  BCSCTL2|=SELM1+SELS;
  do
  {
    IFG1&=~OFIFG;
    for(i=0;i<100;i++)
      _NOP();
  }while((IFG1&OFIFG));
  IFG1&=~OFIFG;
}
//#############################
void int_io()
{
  SHUMA_PORT_DIR|=0XFF;//set p1 is out
  SHUMA_PORT_OUT|=0XFF;//P1 output 0xff
  P4DIR|=0x0f;
  P1SEL&=~HONGWAI_BIT;
  HONGWAI_DIR_IN;//设置接红外引脚的IO为输入
  HONGWAI_IE_ON;//允许红外引脚中断
  HONGWAI_IES_ON;//设置红外引脚IO为下降沿中断
}  
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{  
   uint  i,j,n;//,d;//,temp;
   uint  dat[4];
   n=0;
   if((HONGWAI_IFG & HONGWAI_BIT)==HONGWAI_BIT)
   { 
    HONGWAI_IFG&=~HONGWAI_BIT;//P1IFG &= ~BIT0; 
    HONGWAI_IE_OFF;//禁止P1.0中断
    I1:
       for (i=0;i<4;i++)
       {
         if (!(HONGWAI_IN)) break;
         if (i==3) {HONGWAI_IE_ON;return;}
       }
       delay_us(800);
       if (HONGWAI_IN) goto I1;  //确认IR信号出现
       while(!(HONGWAI_IN));          //等待IR变为高电平

     for(i=0;i<=3;i++) 
     {  
      for(j=0;j<8;j++)
      {
       while (HONGWAI_IN )       //等 IR 变为低电平
       {delay_us(28);}
       while (!(HONGWAI_IN) )      //等 IR 变为高电平
       {delay_us(28);}
       while (HONGWAI_IN)       //计算IR高电平时长
       {
             delay_us(28);
             n++;           
             if (n>=30){HONGWAI_IE_ON;return;}
       }
         dat[i]=dat[i] >> 1;
       if (n>=11) {dat[i] = dat[i]|0x80;}
         n=0;
       }
    }
   // if (dat[2]=~dat[3]) {DISPLAY=~dat[2];}//此句刚开始可以屏蔽,见到效果后再尝试打开校验
    DISPLAY=dat[2];
    HONGWAI_IE_ON;//允许p1.0 中断
    
   }  
}
void shumaguan_xianshi()
{
   uint DISPLAY1;//=0x00;
   uint DISPLAY2;//=0X01;
   uint DISPLAY3;//=0X02;
   uint DISPLAY4;//=0X03;
   DISPLAY2=DISPLAY/100%10;
   DISPLAY1=DISPLAY/1000%10;
   DISPLAY3=DISPLAY/10%10;
   DISPLAY4=DISPLAY%10;
   SHUMA_PORT_OUT=tabl1[DISPLAY1];
   SHUMA_1_LOW;
   delay_us(500);
   SHUMA_1_HIGH;
   SHUMA_PORT_OUT=tabl1[DISPLAY2];
   SHUMA_2_LOW;
   delay_us(500);
   SHUMA_2_HIGH;
   SHUMA_PORT_OUT=tabl1[DISPLAY3];
   SHUMA_3_LOW;
   delay_us(500);
   SHUMA_3_HIGH;
   SHUMA_PORT_OUT=tabl1[DISPLAY4];
   SHUMA_4_LOW;
   delay_us(500);
   SHUMA_4_HIGH;
}
void delay_us(uint i)//delay 2.5us at 8M
{  
   uint ii;
   for(ii =i;ii > 0;ii--)
   { 
      _NOP();_NOP();_NOP();_NOP();   
      _NOP();_NOP();_NOP();_NOP();
      _NOP();_NOP();_NOP();_NOP();
      _NOP();_NOP();_NOP();_NOP();       
   }    
}

int main( void )
{ 

  WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset
  int_clk();//初始化时钟
  int_io();
  _BIS_SR(GIE);
  while(1)
  {
   shumaguan_xianshi();
  }  
}

⌨️ 快捷键说明

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