您的位置 首页 发布

单片机完成按键完成4X4keys

p2连接显示数码管的dig,p0连接seg,p1连接矩阵,主要是下面还有2个针脚,需要连接跳线帽keyboardc这里的行与列的扫描,也就是把字

//p2衔接显现数码管的dig,p0衔接seg,p1衔接矩阵,首要是下面还有2个针脚,需求衔接跳线帽

//keyboard.c 这儿的行与列的扫描,也便是把字节的8位,高四位与低四位分开来,然后确认坐标。
//队伍扫描程序,能够自己界说端口和扫描方法,这儿做简略介绍
#include //包括头文件
#define uchar unsigned char
#define uint unsigned int

unsigned char const dofly[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,
0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; //0-F,数码管来显现按下键的值。

uchar keyscan(void); //首要的矩阵键盘扫描函数。
void delay(uint i);

void main()
{
uchar key;
P2=0x7f;//1数码管亮 按相应的按键,会显现按键上的字符
while(1)
{
key=keyscan();//调用键盘扫描

switch(key)
{
case 0xee:P0=dofly[0];break;

//其他类推。
case 0xde:P0=dofly[1];break;//1
case 0xbe:P0=dofly[2];break;//2
case 0x7e:P0=dofly[3];break;//3
case 0xed:P0=dofly[4];break;//4
case 0xdd:P0=dofly[5];break;//5
case 0xbd:P0=dofly[6];break;//6
case 0x7d:P0=dofly[7];break;//7
case 0xeb:P0=dofly[8];break;//8
case 0xdb:P0=dofly[9];break;//9
case 0xbb:P0=dofly[10];break;//a
case 0x7b:P0=dofly[11];break;//b
case 0xe7:P0=dofly[12];break;//c
case 0xd7:P0=dofly[13];break;//d
case 0xb7:P0=dofly[14];break;//e
case 0x77:P0=dofly[15];break;//f
}
}
}
uchar keyscan()//键盘扫描函数,运用队伍回转扫描法 比方:行为低四位,列为高四位
{
uchar cord_h,cord_l;//队伍值
P1=0xf0; //行线输出全为0
cord_h=P1&0xf0; //读入列线值
if(cord_h!=0xf0) //先检测有无按键按下
{
delay(100); //去抖
if(cord_h!=0xf0)
{
cord_h=P1&0xf0; //读入列线值
P1=cord_h|0x0f; //输出当前列线值
cord_l=P1&0x0f; //读入行线值
return(cord_h|cord_l);//键盘最终组合码值
}
} return(0x00); //回来该值
}

void delay(uint i)//延时函数
{
while(i–);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/256872.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部