?? 16掃描鍵盤程序.c
字號:
#include <msp430x44x.h>
#define uchar unsigned char
#define uint unsigned int
uchar key_buffer;
uchar key_long;
unsigned char disbuffer[8]={0,1,3,8,0xf,5,0x18,7};
char digit[20] = {1,0,0,0,0,2,1,8
};
char distab[]={ 0xaf,0x06,0x6d,0x4f,
0xc6,0xcb,0xeb,0x0e,
0xef,0xcf, 0x77,0x7c,
0x39,0x5e,0x79,0x71
};
unsigned char seg[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,0xf7,0xfc,
0xb9,0xde,0xf9,0xf1,
0x80,0x40,0x00,0x73,0xc0};
void delay(int v)
{
while(v!=0)v--;
}
void disp(void)
{
unsigned char i=0,j=0;
unsigned char temp_wei=0x04,temp_duan=0;
// P1IE=0X0;
P1DIR = 0x1f;
for(i=0;i<8;i++)
{
P1OUT &= ~BIT3;
temp_duan=seg[disbuffer[i]] ;
for(j=0;j<8;j++)
{
if(temp_duan&0x80)
P1OUT |= BIT0;
else
P1OUT &= ~BIT0;
temp_duan=temp_duan<<1;
P1OUT &= ~BIT4; P1OUT |= BIT4;
}
P1OUT = (P3IN&0xf8) | temp_wei;
P1OUT |= BIT3;
temp_wei++;
delay(80);
}
for(i=0;i<8;i++)
{ P1OUT &= ~BIT0; P1OUT &= ~BIT4; P1OUT |= BIT4;
}
P1DIR=0XF;
P1OUT=0XF;
P1IFG=0;
P1IE=0xf0;
}
void main(void)
{
int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
FLL_CTL0 |= XCAP14PF; // Configure load caps
// LCDCTL = LCDON + LCD4MUX + LCDP2; // STK LCD 4Mux, S0-S17
LCDCTL = 0XFD;
BTCTL = BTFRFQ1; // STK LCD freq
P5SEL = 0xFC; // Common and Rxx all selected
for(i=0;i<20;i++)
LCDMEM[i]=0;
for (i=1; i<7; ++i) // Display "6543210"
LCDMEM[i] = distab[digit[i-1]];//digit[i];
P1DIR=0x1f;
P1DIR=0X0f;
P1OUT=0X0f;
P1IE=0Xf0;
P1IES=0;
P1IFG=0;
_EINT(); // Enable interrupts
for (;;)
{
_BIS_SR(CPUOFF); // CPU off
_NOP(); // Required only for C-spy
}
}
//************************************8888888
uchar key_just(void) //00:down 0xff:no down
{
P1DIR=0xf;
P1OUT=0xf;
if((P1IN&0xf0)==0)
return(0xff);
return(0);
}
uchar key_code(void)
{uchar in;
P1DIR=0XF;
P1OUT=0x8;
in=P1IN&0x0f0;
if(in!=0)
{
if(in==0X10)
return(0); //C-F
if(in==0X20)
return(1);
if(in==0X40)
return(2);
if(in==0X80)
return(3);
}
P1OUT=0X4;
in=P1IN&0x0f0;
if(in!=0)
{
if(in==0X10)
return(4); //8-B
if(in==0X20)
return(5);
if(in==0X40)
return(6);
if(in==0X80)
return(7);
}
P1OUT=0X2;
in=P1IN&0x0f0;
if(in!=0)
{
if(in==0X10)
return(8); //4-7
if(in==0X20)
return(9);
if(in==0X40)
return(10);
if(in==0X80)
return(11);
}
P1OUT=0X1;
in=P1IN&0x0f0;
if(in!=0)
{
if(in==0X10)
return(12); //0-3
if(in==0X20)
return(13);
if(in==0X40)
return(14);
if(in==0X80)
return(15);
}
return(0xff);
}
uchar key(void)
{
uchar temp=0xff ;//=key_buffer;
uint time=0;
P1IFG=0;
if(key_just()==0)
delay(500);
if(key_just()!=0)
return(temp);
temp=key_code();
key_buffer=temp;
key_loop:
if(key_just()==0)
{
time++;
delay(300);
if(time>200)
key_long=0xf;
goto key_loop;
}
else
{
P1IFG=0;
return(temp);
}
}
//***************************************
interrupt[PORT1_VECTOR] void key_p1(void)
{
uchar key_;
uchar i=0;
P1IFG=0;
key_=key();
for(i=0;i<8;i++)
disbuffer[i]=key_;
for(i=0;i<7;i++)
LCDMEM[i]=distab[key_];
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -