#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define keyin (p1in & 0x0f)
#define wei_h p5out |= bit5
#define wei_l p5out &= bit5
#define duan_l p6out &= ~bit6
#define duan_h p6out |= bit6
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//uchar num = 0;
uint keyval=0;
void delay(int z)
{
int i,j;
for(i=z;i>0;i--)
for(j=112;j>0;j--);
}
void display(uchar dat)
{
p4out = table[dat];
duan_h;
duan_l;
p4out = 0x00;
wei_h;
wei_l;
}
void main( void )
{
// uint temp,keyval;
p1ies = 0x0f; //下降沿触发
p1ie = 0x0f;
p1dir = 0xf0;
p1out = 0x00;
// p1dir = 0xff;p1out = 0xff;
p4dir = 0xff;p4out = 0x00;
p5dir = 0xff;p5out = 0xf7;
p6dir = 0xff;
_eint();
// stop watchdog timer to prevent time out reset
wdtctl = wdtpw wdthold;
while(1)
{
lpm1;
}
}
#pragma vector = port1_vector
__interrupt void port1_isr(void)
{
if(p1ifg & 0x0f)
{
switch(p1ifg)
{
case 0x01:
if(keyin == 0x0e)
{
delay(20);
if(keyin == 0x0e)
{
while(keyin != 0x0f)
keyval = 1;
display(keyval);
p1ifg = 0; //必须软件清除
return;
}
}
case 0x02:
if(keyin == 0x0d)
{
delay(20);
if(keyin == 0x0d)
{
while(keyin != 0x0f)
keyval = 1;
display(keyval);
p1ifg = 0; //必须软件清除
return;
}
}
case 0x03:
if(keyin == 0x0b)
{
delay(20);
if(keyin == 0x0b)
{
while(keyin != 0x0f)
keyval = 1;
display(keyval);
p1ifg = 0; //必须软件清除
return;
}
}
case 0x04:
if(keyin == 0x07)
{
delay(20);
if(keyin == 0x07)
{
while(keyin != 0x0f)
keyval = 1;
display(keyval);
p1ifg = 0; //必须软件清除
return;
}
}
}
}
}
『本文转载自网络,凯发旗舰的版权归原作者所有,如有侵权请联系删除』