📄 msp430f149-
字号:
#include <MSP430X14X.h>
#define uchar unsigned char
#define uint unsigned int
#define t_3ms5 2300
#define t_1ms 666
uchar get_code[4] = {0};
uchar dat_code=0;
uint timer;
#include "msp430.c"
#include "disp_4led.c"
void delay(uint time) //10ms--10000
{
while(time--);
}
void dat_high()
{P1DIR |= BIT6;
P1OUT |= BIT6;
}
void dat_low()
{P1DIR |= BIT6;
P1OUT &= ~BIT6;
}
uchar rd_dat()
{ uchar stat;
P1DIR |= BIT6;
P1OUT |= BIT6;
P1DIR &= ~BIT6;
stat = P1IN;
return (stat);
}
uchar get_num()
{ uchar i,j,rd,dat=0;
_DINT(); //关闭中断
for(j=0;j<4;j++)
{ for(i=8;i>0;i--)
{dat>>=1;
do
rd=rd_dat();
while(!(rd & BIT6)); // wait high
set_timer_b0(); //检测高电平时间
do
rd=rd_dat();
while(rd & BIT6); // wait low
timer=TBR;
stop_timer_b0();
if(timer>t_1ms)dat=dat|0x80;
else dat=dat&0x7f;
}
get_code[j]=dat;
}
_EINT();
return(get_code[2]);
}
void main( void )
{ uchar rd;
WDTCTL = WDTPW + WDTHOLD;
dat_high();
set_timer_a0();
judge:
do
rd=rd_dat();
while(rd & BIT6); //wait low
delay(100);
rd=rd_dat();
if(rd & BIT6)goto judge; //xiao dou
do
rd=rd_dat();
while(!(rd & BIT6)); //wait high
set_timer_b0();
do
rd=rd_dat();
while(rd & BIT6); //wait low
timer=TBR;
stop_timer_b0();
if(timer<t_3ms5){delay(1000);goto judge;}//连续按下,重复标志
dat_code=get_num();
goto judge;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -