电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • 扫码下载手机洽洽

    随时找料

    即刻洽谈

    点击下载PC版
  • 华强电子网公众号

    电子元器件

    采购信息平台

  • 华强电子网移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

8051单片机串行口扩展矩阵键盘接口与应用 -解决方案-华强电子网

来源:华强电子网 作者:华仔 浏览:251

标签:

摘要: 由于8051的串行口在方式0工作状态下,可以方便地通过移位寄存器74LS164扩展并行输出口。因此,可以将这些并行口线作为列线,与P3口的行线构成行列式键盘。每占用一条P3口线可增加8个按键,用户根据需要可增减。 在8051的串行口方式0工作状态下,结合P3.4和P3.5实现2*8键盘。如图所示。 C51软件设计: #include<stdio.h> //预处理 #include<

由于8051的串行口在方式0工作状态下,可以方便地通过移位寄存器74LS164扩展并行输出口。因此,可以将这些并行口线作为列线,与P3口的行线构成行列式键盘。每占用一条P3口线可增加8个按键,用户根据需要可增减。
在8051的串行口方式0工作状态下,结合P3.4和P3.5实现2*8键盘。如图所示。


C51软件设计:
#include<stdio.h> //预处理
#include<reg51.h>
#include<intrins.h>
unsigned char getkey(void); //键盘扫描函数
void proc1(void); //定义按键处理程序1
void proc2(void); //定义按键处理程序2
void proc3(void); //定义按键处理程序3
void proc4(void); //定义按键处理程序4
……
bit0=P3.4;
bit1=P3.5;
void delay(void); //定义延时函数
void main(void) //主函数
{
unsigned char idata key;
SCON=0x00; //串口初始化
ES=0;
EA=0; //关闭中断
while(1)
{
key=getkey();
if(key!=0xff)
switch (key)
{
case 0x00:
proc0();
braek;
case 0x01:
proc1();
braek;
case 0x02:
proc2();
braek;
case 0x03:
proc3();
braek;
……
……
……
default:
break;
}
}
}
unsigned char getkey(void) //键盘扫描函数
{
unsigned char idata key_code,col=0; mask=0x00;
TI=0;
SBUF=mask;
while(TI==0);
if((bit0&bit1)!= 0)
return(0xff);
delay();
if((bit0&bit1)!= 0)
return(0xff);
mask=0xfe;
while(col!=8)
{
TI=0;
SBUF=mask;
while(TI==0);
if((bit0&bit1)!= 0)
{
mask=mask<<1;
mask=mask|0x01;
col=col+1;
continue;
}
else break;
}
if(col==8)
return(0xff);
if(bit0==1) key_code=col;
else key_code=8+col;
while(bit0&bit1==0);
return(key_code);
}
void delay(void) /*延时10毫秒*/
{
unsigned int i=10;
while(i--);
}
型号 厂商 价格
EPCOS 爱普科斯 /
STM32F103RCT6 ST ¥461.23
STM32F103C8T6 ST ¥84
STM32F103VET6 ST ¥426.57
STM32F103RET6 ST ¥780.82
STM8S003F3P6 ST ¥10.62
STM32F103VCT6 ST ¥275.84
STM32F103CBT6 ST ¥130.66
STM32F030C8T6 ST ¥18.11
N76E003AT20 NUVOTON ¥9.67