📄 成功.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 + -