📄 key.c
字号:
#include<C8051F020.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
extern void xspdelay(unsigned int x);
extern char key;
char oldkey,rekey;
extern uchar read_lcd(uint i);
extern void wlcdi(uchar i);
extern void wlcdd(uchar i);
extern uchar rlcdd(void);
extern void bwlcdi(uchar i);
extern void bwlcdd(uchar i);
extern void line(uint x,y,x1,y1,bit WR);
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F02x
//-----------------------------------------------------------------------------
sfr16 DP = 0x82; // data pointer
sfr16 TMR3RL = 0x92; // Timer3 reload value
sfr16 TMR3 = 0x94; // Timer3 counter
sfr16 ADC0 = 0xbe; // ADC0 data
sfr16 ADC0GT = 0xc4; // ADC0 greater than window
sfr16 ADC0LT = 0xc6; // ADC0 less than window
sfr16 RCAP2 = 0xca; // Timer2 capture/reload
sfr16 T2 = 0xcc; // Timer2
sfr16 RCAP4 = 0xe4; // Timer4 capture/reload
sfr16 T4 = 0xf4; // Timer4
sfr16 DAC0 = 0xd2; // DAC0 data
sfr16 DAC1 = 0xd5; // DAC1 data
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void key_Init (void);
void key_PORT_Init(void);
uchar kbscan(void);
void disp_key (void);
void key_PORT_Init (void)
{
P2MDOUT |= 0xf0;//suo doing
P3MDOUT &= 0xff;//0xbf;
P74OUT |= 0x02;//0x02
P4&=0xef;//0xeff
}
void key_Init(void)
{
key_PORT_Init();
P3IF=0x04;//0x04;
EIE2|=0x10;
P2=0xff;
P2=0x0f;
P3|=0xe0;//0xf0
}
void key_ISR (void) interrupt 18
{
int keydata;
EA=0;
P3IF&=0xbf;
keydata=kbscan();
if (keydata==0x42) key=1;
if (keydata==0x82) key=2;
if (keydata==0x41) key=3;
if (keydata==0x81) key=4;
if (keydata==0x48) key=5;
if (keydata==0x88) key=6;
if (keydata==0x44) key=7;
if (keydata==0x84) key=8;
if (keydata==0x24) key=9;
if (keydata==0x14) key=10;
if (keydata==0x28) key=11;
if (keydata==0x18) key=12;
if (keydata==0X21) key=13;
if (keydata==0x11) key=14;
if (keydata==0x22) key=15;
if (keydata==0x12) key=16;
P2=0xff;//?
P2=0x0f;//?
if (keydata==0)
{
rekey++;
if (rekey<4) P3IF|=0x40;
else rekey=0;
}
else
rekey=0;
EA=1;
}
uchar kbscan(void)
{
uchar sccode,recode;
P2=0x0f;
xspdelay(1000);
P4|=0x20;
if((P2&0x0f)!=0x0f)
{ P4|=0x20;//on spack
xspdelay(500);
if((P2&0x0f)!=0x0f)
{
sccode=0xef;
while((sccode&0x01)!=0)
{P2=sccode;
xspdelay(500);
if((P2&0x0f)!=0x0f)
{recode=(P2&0x0f)|0xf0;
xspdelay(100000);
xspdelay(100000);
P4&=0xdf;//off spack
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
if (sccode==0xff)sccode=0xfe;
}
}
}
P4&=0xdf;//off spack
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -