⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 电机驱动!四相五线的步进电机用C8051F020驱动
💻 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 + -