📄 1.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 + -