📄 key.c
字号:
#include <reg52.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define COM8255 XBYTE[0x7fff]
#define PA8255 XBYTE[0x7cff]
#define PB8255 XBYTE[0x7dff]
#define PC8255 XBYTE[0x7eff]
//键盘编码
#define K06 0x81
#define K07 0x41
#define K16 0x82
#define K17 0x42
#define K26 0x84
#define K27 0x44
#define K36 0x88
#define K37 0x48
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
uchar idata dis_buf[6]={0,1,2,3,4,5}; /*显示缓冲区*/
uchar code table[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
0x40,0x00};
void dl_ms(uchar d)
{
while(d--);
}
void display(void)
{ uchar esgcode,bitcode,i;
bitcode=0xfe;
for(i=0;i<6;i++)
{ esgcode=dis_buf[i];
PA8255=table[esgcode];
PB8255=bitcode;
dl_ms(100);
bitcode=bitcode<<1;
bitcode=bitcode|0x01;
}
}
uchar keyscan(void)
{
uchar code_h,code_l,temp,code_value;
uint i;
PC8255=0x00;
temp=PC8255;
temp&=0xc0;
if(temp!=0xc0) //如果pc8255 pc.6,pc.7不全为1,可能有键按下
{
/* dl_ms(100); //延时消抖
temp=PC8255; //重读
if(temp&0xc0!=0xc0) //确实有键按下
{*/
code_h=0xfe;
for(i=0;i<4;i++)
{
PC8255=code_h;
temp=PC8255;
temp=temp&0xc0;
if(temp!=0xc0)//该行有键按下
{
code_l=temp;
code_value=(~code_h)|code_l;
return(code_value);
}
code_h=(code_h<<1)|0x01;
}
//}
}
else return(0x00);
}
void shezhi(void)
{
uchar j;
j=keyscan();
while(j!=K07) //K07是确认键
{switch(j)
{
case K36: //秒加
//P1_0=0;
dis_buf[0]++;
if(dis_buf[0]>9)
{
dis_buf[0]=0;
dis_buf[1]++;
if(dis_buf[1]>5)dis_buf[1]=0;
}
display();
//P1_0=1;
break;
case K37: //秒减
P1_0=0;
dis_buf[0]--;
if(dis_buf[0]<0)
{
dis_buf[0]=9;
dis_buf[1]--;
if(dis_buf[1]<0)dis_buf[1]=0;
}
display();
// P1_0=1;
break;
case K26: //分加
// P1_1=0;
dis_buf[2]++;
if(dis_buf[2]>9)
{
dis_buf[2]=0;
dis_buf[3]++;
if(dis_buf[3]>5)dis_buf[3]=0;
}
display();
// P1_1=1;
break;
case K27: //分减
// P1_2=0;
dis_buf[2]--;
if(dis_buf[2]<0)
{
dis_buf[2]=9;
dis_buf[3]--;
if(dis_buf[3]<0)dis_buf[3]=0;
}
display();
// P1_2=1;
break;
case K16: //时加
dis_buf[4]++;
if(dis_buf[4]>9)
{
dis_buf[4]=0;
dis_buf[5]++;
if(dis_buf[5]>5)dis_buf[5]=0;
}
display();
break;
case K17: //时减
dis_buf[4]--;
if(dis_buf[4]<0)
{
dis_buf[4]=9;
dis_buf[5]--;
if(dis_buf[5]<0)dis_buf[5]=0;
}
display();
break;
default: display();
}
j=keyscan();
}
}
void main(void)
{
uchar data i;
COM8255=0x88; //8255初始化
// P1=0;
while(1)
{
i=keyscan();
dis_buf[0]=i&0x0f;
dis_buf[1]=(i>>4)&0x0f;
display();
if(i==K06) //K06是调整键
{
P1=0;
shezhi();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -