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

📄 key.c

📁 这是用89S52做的带时间日历功能的计算器。调试通过。
💻 C
字号:
#include <AT89X51.h>
#include <intrins.H>

/*     
                          _____        
        ___________P2.4__|     |                   
       |   ________P2.5__| AND |____INT0           
       |  |   _____p2.6__|     |
       |  |  |   __p2.7__|_____|
 p1.3__|__|__|__|
 p1.2__|__|__|__|
 p1.1__|__|__|__|
 p1.0__|__|__|__|

*/

void key_delay(char);    //键盘延时
char key(void);          //键盘返回键值程序
void nokey(void);        //防止误操作
//char number(void);







char key(void)
{unsigned char a;
 unsigned char key=0,i;
 TR0=0;
 P2=0xff;_nop_();_nop_();
 for(i=0;i<=3;i++)
  {
   P1=~(0x01<<i);
   key_delay(1);
   a=P2&0xf0;
   if(a==0xe0)
       { key=(i*4)+4; break;}
     else if(a==0xd0)
          { key=(i*4)+3; break;}
        else if(a==0xb0)
             { key=(i*4)+2;  break;}
           else if(a==0x70)
                { key=(i*4)+1; break;}
              else ;
   } 
  if(key>16||key<1) key=255;   
  TR0=1;
  return key;
}



char number(void)
{char x;
 x=key();
 if(x==1) x=7;
  else if(x==2) x=8;
   else if(x==3) x=9;
    else if(x==5) x=4;
     else if(x==6) x=5;
      else if(x==7) x=6;
       else if(x==9) x=1;
        else if(x==10) x=2;
         else if(x==11) x=3;
          else if(x==13) x=0;
		   else x=255;
  return x;}
  
void nokey(void)       //防止连操作
{unsigned char i;
 P1=0x00;P2=0xff;
 key_delay(10);
 i=P2&0xf0;
 while(i!=0xf0)
 { P1=0x00;P2=0xff;
   key_delay(10); i=P2&0xf0;}      //取P2高四位
 }

void key_delay(char x)
{char i=10;
 for(;x>0;x--)
  {i=10; while((i--)>0) _nop_();}
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -