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

📄 dsply_key1.c

📁 一个很好的单片机键盘显示程序
💻 C
字号:
//正向显示,不可以显示小数点
#include <reg51.h>
sbit key=P2^5;//键盘扫描输入
sbit key_out=P3^7;//键盘扫描输出,有键按下时,该口输出低电平
#define k_out P3   //键值输出
#define key_t0  0  //键盘延时去抖动时间
#define key_t1  10
#define led_in P1  //显示输入,高四位为地址,低四位为显示内容
unsigned char led_buf=0xff;//显示输入
//unsigned char key_buf=0xff;
bit key0=0;bit key1=0;bit key2=0;bit key3=0;bit key4=0;bit key5=0;bit key6=0;bit key7=0;bit key8=0;
bit key9=0;bit key10=0;bit key11=0;bit key12=0;bit key13=0;bit key14=0;bit key15=0;

unsigned char code ledd[17]={0x3f,0x30,0x5b,0x79,0x74,0x6d,0x6f,0x38,0x7f,0x7d,
                     0x7e,0x67,0x0f,0x73,0x4f,0x4e,0x00};
unsigned char code ledmod[16]={0,4,2,6,8,12,10,14,1,5,3,7,9,13,11,15};
char led[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
sbit dsplyen=P2^4;
void delay(int k)
{ int t;
  for(;k!=0;k--)
    {if (led_in!=led_buf){led_buf=led_in;led[led_buf>>4]=led_buf&0x0f;}
    }
}




  main()
{char i,t,k;
  TMOD=0x01;TH0=0xfb;TL0=0x00;EA=1;ET0=1;TR0=1;
   dsplyen=0;
     for(;;)
     {delay(1);
       if     (key0==1){delay(key_t0);if(key0==1);k_out=k_out&0xf0;key_out=0;}
       else if(key1==1){delay(key_t0);if(key1==1);k_out=k_out&0xf0|1;key_out=0;}
       else if(key2==1){delay(key_t0);if(key2==1);k_out=k_out&0xf0|2;key_out=0;}
       else if(key3==1){delay(key_t0);if(key3==1);k_out=k_out&0xf0|3;key_out=0;}
       else if(key4==1){delay(key_t0);if(key4==1);k_out=k_out&0xf0|4;key_out=0;}
       else if(key5==1){delay(key_t0);if(key5==1);k_out=k_out&0xf0|5;key_out=0;}
       else if(key6==1){delay(key_t0);if(key6==1);k_out=k_out&0xf0|6;key_out=0;}
       else if(key7==1){delay(key_t0);if(key7==1);k_out=k_out&0xf0|7;key_out=0;}
       else if(key8==1){delay(key_t0);if(key8==1);k_out=k_out&0xf0|8;key_out=0;}
       else if(key9==1){delay(key_t0);if(key9==1);k_out=k_out&0xf0|9;key_out=0;}
       else if(key10==1){delay(key_t0);if(key10==1);k_out=k_out&0xf0|10;key_out=0;}
       else if(key11==1){delay(key_t0);if(key11==1);k_out=k_out&0xf0|11;key_out=0;}
       else if(key12==1){delay(key_t0);if(key12==1);k_out=k_out&0xf0|12;key_out=0;}
       else if(key13==1){delay(key_t0);if(key13==1);k_out=k_out&0xf0|13;key_out=0;}
       else if(key14==1){delay(key_t0);if(key14==1);k_out=k_out&0xf0|14;key_out=0;}
       else if(key15==1){delay(key_t0);if(key15==1);k_out=k_out&0xf0|15;key_out=0;}
       else {key_out=1;}
      }
   }




void  intex0(void) interrupt 1 using 1
 {static unsigned char data n=0;
  TH0=0xfb;TL0=0x00;
   dsplyen=1;P0=0xff;
  P2=(P2&0xf0)|ledmod[n];
  P0=ledd[led[n]];dsplyen=0;key=1;

  switch (n){
  case 0:key0=~key;break;//key=p2.5,当有键按下时,p2.5=0,取反后p2.5=1;当无键按下时p2.5=1,取反后p2.5=0
  case 1:key1=~key;break;
  case 2:key2=~key;break;
  case 3:key3=~key;break;
  case 4:key4=~key;break;
  case 5:key5=~key;break;
  case 6:key6=~key;break;
  case 7:key7=~key;break;
  case 8:key8=~key;break;
  case 9:key9=~key;break;
  case 10:key10=~key;break;
  case 11:key11=~key;break;
  case 12:key12=~key;break;
  case 13:key13=~key;break;
  case 14:key14=~key;break;
  case 15:key15=~key;break;
  }
  n++;n=n&0x0f;
 }


⌨️ 快捷键说明

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