电工学习网

 找回密码
 立即注册

8051单片机串行口扩展矩阵键盘接口与应用

2014-12-8 08:24| 编辑:电工学习网| 查看: 12641| 评论: 0

 由于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--);
    }

看过《8051单片机串行口扩展矩阵键盘接口与应用》的人还看了以下文章:

发表评论

最新评论

  • 实时时钟芯片DS1302
  • 8255的控制字
  • 单片机点亮led灯程序详解
  • 单片机引脚功能定义
  • 单片机数码管显示原理
  • RS485通信和Modbus协议

电工学习网 ( )

GMT+8, 2023-4-30 02:50

Powered by © 2011-2022 www.shop-samurai.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部