📄 dsply_key1.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 + -