📄 8x4keyboard.c
字号:
#include "main.h"
unsigned char code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D, //0~4
0x7D,0x07,0x7F,0x6F,0x77, //5~9
0x7C,0x39,0x5E,0x79,0x71}; //A~F
unsigned int kbscan(void);
void delay();
void dispaly(unsigned char );
unsigned char key_value(unsigned int );
void main() //主程序
{unsigned char n;
unsigned int k;
while(1)
{
k=kbscan();
n=key_value(k);
dispaly(n);
}
}
unsigned int kbscan()
{ unsigned char col,row;
unsigned int temp; //col表示列,row表示行,temp表示16位数高8位存放列,低8位存放行
//unsigned char array;//存放p2的低四位
//array=P2&0x0f;
//array=0x00;
P2=0xf0;P1_2=0; //行线置低,检测列线的状态
if((P0)!=0xff) //表示有键按下
{delay(); //防抖动
if((P0)!=0xff)//确认按键
{
col=P0;//读取列值
P2=0xfe;//array=0x0e;//逐行扫描
while((P0)==0xff)
P2=((P2)<<1)|0x01;
row=P2&0x0f;//读取行线的状态
P1_2=~P1_2;
temp=row*256+col;
return(temp);
}
else return(0x0020);//无效标志
}
else return(0x0020);//无效标志
}
unsigned char key_value(unsigned int k)
{ unsigned char n;
switch(k)
{
case 0x077f:n=1;break;
case 0x07bf:n=2;break;
case 0x07df:n=3;break;
case 0x07ef:n=4;break;
case 0x07f7:n=5;break;
case 0x07fb:n=6;break;
case 0x07fd:n=7;break;
case 0x07fe:n=8;break;
case 0x0b7f:n=9;break;
case 0x0d7f:n=10;break;
case 0x0e7f:n=11;break;
}
return n;
}
void delay()
{unsigned char i,j;
for(i=0;i<0xff;i++)
for(j=0;j<0xff;j++);}
void dispaly(unsigned char k) //显示程序
{
P3=table[k];delay();
//P2_1=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -