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

📄 main.c

📁 MSP430子程序集
💻 C
字号:
//xt1 32768KHZ xt2 8MHZ ,红外接收头接于P2.0
//遥控器的编码芯片为:uPD6121G  遥控解码原理请参考本实验的说明
#include "msp430x14x.h"
#define   SHUMA_PORT_DIR  P5DIR//数码管数据口
#define   SHUMA_PORT_OUT  P5OUT
#define   SHUMA_1_LOW     P6OUT&=~BIT6//开数码管的第一位P6.6口控制数码管的第一位
#define   SHUMA_1_HIGH    P6OUT|=BIT6//灭第一位数码管
#define   SHUMA_2_LOW     P6OUT&=~BIT5//开数码管的第二位
#define   SHUMA_2_HIGH    P6OUT|=BIT5//灭数码管的第二位
#define   SHUMA_3_LOW     P6OUT&=~BIT4//开数码管的第三位
#define   SHUMA_3_HIGH    P6OUT|=BIT4//灭数码管的第三位
#define   SHUMA_4_LOW     P6OUT&=~BIT0//开数码管的第四位
#define   SHUMA_4_HIGH    P6OUT|=BIT0//灭数码管的第四位

//**********************************************************************
#define   HONGWAI_BIT      BIT0//红外接收头接于P2.0
#define   HONGWAI_DIR_IN   P2DIR&=~HONGWAI_BIT//设置p2.0为输入
#define   HONGWAI_IES_ON   P2IES|=HONGWAI_BIT//p1.0设置为下降沿中断   红外引脚定义
#define   HONGWAI_IE_ON    P2IE|=HONGWAI_BIT//允许p2.0中断
#define   HONGWAI_IE_OFF   P2IE&=~HONGWAI_BIT//禁止p2.0中断
#define   HONGWAI_IFG      P2IFG//p2.0中断标志
#define   HONGWAI_IN       (P2IN & BIT0) //P2.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 unsigned char tabl1[11]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0X20,0x38,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 P5 is out  设置控制数码管数据口的IO口为输出模式
  P6DIR|=BIT0+BIT4+BIT5+BIT6;
  P3DIR|=BIT0;//P3.0控制74HC573的OE,把这个口设置为输出
  P3OUT&=~BIT0;//使能74573,使得74573的输出随输入变化
  P2SEL&=~HONGWAI_BIT;
  HONGWAI_DIR_IN;//设置接红外引脚的IO为输入
  HONGWAI_IE_ON;//允许红外引脚中断
  HONGWAI_IES_ON;//设置红外引脚IO为下降沿中断
}  
#pragma vector=PORT2_VECTOR
__interrupt void PORT2_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);
  _EINT();
  while(1)
  {
   shumaguan_xianshi();
  }  
}

⌨️ 快捷键说明

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