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

📄 1.txt

📁 MSP430子程序集
💻 TXT
字号:
//######################################################################
#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 //P1.0输入
//**********************************************************************
#define   uchar  unsigned char
#define   uint   unsigned int

static uint DISPLAY=0;


void int_clk();//时钟初始化子程序声明
void int_io();//制口的初始化
//void delay_1ms(uint i);//延时程序函数的声明
void delay_us(uint i);//14.625微妙延时程序
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|=0XFF;
  P1SEL&=~HONGWAI_BIT;
  HONGWAI_DIR_IN;//设置接红外引脚的IO为输入
  HONGWAI_IE_ON;//允许红外引脚中断
  HONGWAI_IES_ON;//设置红外引脚IO为下降沿中断
  
  P1SEL&=~BIT1;
  P1DIR|=BIT1;
  P1OUT|=BIT1;
}  
//延时14.625us
void delay_us(uint i)
{ 
  uint j;
  while(i--)
  {
   for(j=0;j<10;j++)
   {  
    _NOP();
    _NOP();
    _NOP();
    _NOP();   
    }
  } 
}  

#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{  
   uint  a,b;//,d;//,temp;
   P1IE&=~BIT0;
   if((HONGWAI_IFG & BIT0)==BIT0)
   { 
    HONGWAI_IE_OFF;//禁止P1.0中断
    P1SEL&=~BIT0;
    P1DIR&=~BIT0;
    for(a=10;a>0;a--)//判断9MS低电平的引导脉冲
    {
      delay_us(60);//延时882USM,判断10次,在这10中如果P1.0变成高电平则退出中断
      if((HONGWAI_IN & HONGWAI_BIT)==HONGWAI_BIT)//判断p1.0是否为高电平
      {
        
   //     DISPLAY=0X00;//显示红外键码清零
        P1IFG&=~BIT0;
        HONGWAI_IE_ON;//允许p1.0 中断
        DISPLAY++;
        return;//退出中断
      }  
    }  
    DISPLAY++;
    // while((HONGWAI_IN & HONGWAI_BIT)==0X00);//等待9秒的低电平引导脉冲完
    // delay_10us(260);//延时2600微妙后判断引脚是否为低电平,如果变成低电平,则认为是连发码
    // if((HONGWAI_IN & HONGWAI_BIT)==0X00)
    // {
    //   HONGWAI_IE_ON;//允许p1.0 中断
    //   P1IFG&=~BIT0;
    //   DISPLAY==0X02;
    //   return;//退出中断
    // } 
    // while((HONGWAI_IN & HONGWAI_BIT)==0X01);//等待4.5毫秒的高电平完
    // for(d=0;d<=3;d++) 
    // {  
    //  for(b=0;b<8;b++)
    // {  
    //   while((HONGWAI_IN & HONGWAI_BIT)==0X00);
    //   delay_10us(88);
    //   a=P1IN&0x01;
    //   a=a>>1;
    //   if((HONGWAI_IN & HONGWAI_BIT)==0X01 )
    //   {
    //     while((HONGWAI_IN & HONGWAI_BIT)==0X01);
    //   }
    //  }
    //  if(d==2)DISPLAY=a;
    // }
     HONGWAI_IE_ON;//允许p1.0 中断
     P1IFG&=~BIT0;
     return;
  } 
}
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(200);
   SHUMA_1_HIGH;
   SHUMA_PORT_OUT=tabl1[DISPLAY2];
   SHUMA_2_LOW;
   delay_us(200);
   SHUMA_2_HIGH;
   SHUMA_PORT_OUT=tabl1[DISPLAY3];
   SHUMA_3_LOW;
   delay_us(200);
   SHUMA_3_HIGH;
   SHUMA_PORT_OUT=tabl1[DISPLAY4];
   SHUMA_4_LOW;
   delay_us(200);
   SHUMA_4_HIGH;
}
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 + -