📄 169test.c
字号:
#include "msp430x16x.h"
#define S3 BIT2
#define S2 BIT3
#define S1 BIT4
unsigned char cnt=0;
unsigned char T[2];
void Init_Clock() {
unsigned char i;
BCSCTL1=0x00;
do {
IFG1&=~OFIFG;
for(i=0;i<100;i++);
}while((IFG1&OFIFG)==OFIFG);
BCSCTL2=SELM1+SELS;
}
void Init_Port() {
P1DIR=BIT0+BIT1;
P1OUT=0x00;
P4DIR=BIT2+BIT3;
P4OUT=BIT2;
P5DIR=BIT5;
P5OUT=BIT5;
}
void Delay() {
unsigned i;
for(i=0;i<3000;i++)_NOP();
}
void Init_URAT1() {
U1BR0=0x22;//4M--SMCLK 波特率115200
U1BR1=0x00;
U1MCTL=0xed;
U1CTL=CHAR;//数据宽度8bit
U1TCTL=SSEL1;
ME2=URXE1+UTXE1;//使能接收与发送
IE2=URXIE1;
P3SEL=BIT6+BIT7;//使能TXD与RXD引脚
P3DIR=BIT6;//TXD输出
}
void Init_TimerA() {
TACTL=TASSEL1+MC0+TACLR;//时钟源SMCLK,增计模式,计数器清零
TACCR0=2000; //4M/2000=2000Hz
_EINT();//开中断
}
void Send(unsigned char val) {
U1TXBUF=val;
while(!(IFG2&UTXIFG1));
}
void Send_Char() {
Send(T[0]);
Send(T[1]);
Send(' ');
Send('O');
Send('K');
Send('!');
Send('\n');
}
void Scan() {
unsigned char i;
do {
i=P1IN&(S1+S2+S3);
}while(i==S1+S2+S3); //无按键动作
Delay(); //去抖动
i=P1IN&(S1+S2+S3);
if((i&S1)==0){T[0]='S';T[1]='1';Send_Char();}
if((i&S2)==0){T[0]='S';T[1]='2';Send_Char();}
if((i&S3)==0){T[0]='S';T[1]='3';Send_Char();}
while((P1IN&(S1+S2+S3))!=S1+S2+S3);//按键复位
Delay(); //去抖动
}
void Init_System() {
WDTCTL=WDTPW+WDTHOLD;//关闭WDT
Init_Clock();//初始化系统时钟
Init_Port();//初始化端口
Init_URAT1();//初始化串口
Init_TimerA();
}
void main( ){
Init_System();
while(1)Scan();
}
#pragma vector=UART1RX_VECTOR
__interrupt void Run() {
T[cnt]=U1RXBUF;
cnt++;
if(cnt==2) {
cnt=0;
if(T[0]=='D'&&T[1]=='1')P1OUT^=BIT0;
if(T[0]=='D'&&T[1]=='2')P1OUT^=BIT1;
if(T[0]=='S'&&T[1]=='P')TACCTL0^=CCIE;//使能比较
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Time_A() {
P4OUT^=0x0c;//1000Hz输出
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -