📄 msp430f149-
字号:
#include <MSP430X14X.h>
/*-------------------------------------*/
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define ps2_clk BIT4
#define ps2_dat BIT5
/*P1.4---ps2_clk*/
/*P1.5---ps2_dat*/
/*-------------------------------------*/
uchar key_num;
void set_PS2_int();
uchar receive_ps2() ;
void search_key();
void set_sysclk();
/*-------------------------------------*/
void main( void )
{
set_sysclk();
WDTCTL = WDTPW + WDTHOLD;
set_PS2_int();
P2DIR=0xff;
P2OUT=0x00;
judge: while(P1IN&ps2_clk); //判断clk线是否给拉低
search_key();
goto judge;
}
/*-------设置系统时钟-------------*/
void set_sysclk()
{ uchar i;
//DCOCTL=0XE0;
BCSCTL1=0X17; //asck 2分频为wdt提供时钟
for(i=10;i>0;i--);
}
/*-------------ps2中断设置------------------------*/
void set_PS2_int()
{P1SEL &=~(BIT4+BIT5);//选择I/O功能
P1DIR |=(BIT4+BIT5);
P1OUT |=(BIT4+BIT5);//置1
P1DIR &=~(BIT4+BIT5);//设为输入
}
/*-----------ps2读数据子程序-----------------------*/
uchar receive_ps2()
{uchar i;uchar key8=0;
while(P1IN&ps2_clk);//等待clk变低 |越过
while(!(P1IN&ps2_clk));//等待clk变高 |起始位
for(i=0;i<8;i++)
{key8>>=1;
while(P1IN&ps2_clk);//等待clk变低
if(P1IN&ps2_dat)key8=key8|0x80;
while(!(P1IN&ps2_clk));//等待clk变高
}
for(i=0;i<2;i++)
{ while(P1IN&ps2_clk);//等待clk变低 |
while(!(P1IN&ps2_clk));//等待clk变高 |
}
return(key8);
}
/*----------ps2中断处理子程序-------------------*/
void search_key()
{
if(P1IN&ps2_dat)goto back; //判断DAT数据线是否给拉低(起始位)
key_num=receive_ps2();
P2OUT=key_num;
back:;
}
/******************************************************************/
/* switch ( temp2 )
{
case 0x45: k="0"; break; //0
case 0x16: k="1"; break; //1
case 0x1e: k="2"; break; //2
case 0x26: k="3"; break; //3
case 0x25: k="4"; break; //4
case 0x2e: k="5"; break; //5
case 0x36: k="6"; break; //6
case 0x3d: k="7"; break; //7
case 0x3e: k="8"; break; //8
case 0x46: k="9"; break; //9
case 0x1c: k="10"; break; //a
case 0x32: k="11"; break; //b
case 0x21: k="12"; break; //c
case 0x23: k="13"; break; //d
case 0x24: k="14"; break; //e
case 0x2b: k="15"; break; //f
case 0x34: k="16"; break; //g
case 0x33: k="17"; break; //h
case 0x43: k="18"; break; //i
case 0x3b: k="19"; break; //j
case 0x42: k="20"; break; //k
case 0x4b: k="21"; break; //l
case 0x3a: k="22"; break; //m
case 0x31: k="23"; break; //n
case 0x44: k="24"; break; //o
case 0x4d: k="25"; break; //p
case 0x15: k="26"; break; //q
case 0x2d: k="27"; break; //r
case 0x1b: k="28"; break; //s
case 0x2c: k="29"; break; //t
case 0x3c: k="30"; break; //u
case 0x2a: k="31"; break; //v
case 0x1d: k="32"; break; //w
case 0x22: k="33"; break; //x
case 0x35: k="34"; break; //y
case 0x1a: k="35"; break; //z
case 0x0e: k="36"; break; //~
case 0x4e: k="37"; break; //-
case 0x55: k="38"; break; //=
case 0x29: k="46"; break; //SPACE
case 0x66: k="47";break; //del
case 0x5b: k="39";break; //]
case 0x4c: k="40";break;//;
case 0x52: k="41";break;// '
case 0x41: k="42"; break; //,
case 0x49: k="43";break;//.
case 0x4a: k="44";break; // /
case 0x54: k="45"; break; //[
case 0x58: k="49"; break; //cap
case 0x5a: k="48"; break; //回车键
case 112 : k="0" ; break; //小键盘部分
case 105 : k="1" ; break;
case 114 : k="2" ; break;
case 122 : k="3" ; break;
case 107 : k="4" ; break;
case 115 : k="5" ; break;
case 116 : k="6" ; break;
case 108 : k="7" ; break;
case 117 : k="8" ; break;
case 125 : k="9" ; break;
case 113 : k="43" ; break;;
default : k="255";
}
*/
/*******************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -