找回密码
 立即注册
查看: 312|回复: 1

STC89C52RC单片机4X4矩阵键盘扫描方式程序代码

[复制链接]
  • TA的每日心情
    开心
    2024-3-29 12:03
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    24

    主题

    6

    回帖

    247

    积分

    荣誉版主

    积分
    247
    发表于 2023-7-12 00:04:52 | 显示全部楼层 |阅读模式
    *********************************************************************/
    #include<reg52.h>                 //库文件
    #define uchar unsigned char//宏定义无符号字符型
    #define uint unsigned int  //宏定义无符号整型
    /********************************************************************
                                初始定义
    *********************************************************************/
    unsigned char code seg7code[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e };
    unsigned char k;
    /********************************************************************
                                延时函数
    *********************************************************************/
    void delay10ms(void) //延时程序
    {
            unsigned char i,j;
            for(i=20;i>0;i--)
            for(j=248;j>0;j--);
    }

    /********************************************************************
                                键盘函数
    *********************************************************************/        
    void Getch ( )        //取键值函数
    {
    unsigned char X,Y,Z;
    P1=0x0f; //先对P3 置数 行扫描
    if(P1!=0x0f) //判断是否有键按下
            {
            delay10ms(); //延时,软件去干扰
            if(P1!=0x0f) //确认按键按下
                    {
                    X=P1; //保存行扫描时有键按下时状态
                    P1=0xf0; //列扫描
                    Y=P1;    //保存列扫描时有键按下时状态
                    Z=X|Y; //取出键值
    /*********************************************************************/
    switch ( Z ) //判断键值(那一个键按下)
                            {
                                    case 0xee: k=0; break; //对键值赋值
                                    case 0xed: k=1; break;
                                    case 0xeb: k=2; break;
                                    case 0xe7: k=3; break;
                                    case 0xde: k=4; break;
                                    case 0xdd: k=5; break;
                                    case 0xdb: k=6; break;
                                    case 0xd7: k=7; break;
                                    case 0xbe: k=8; break;
                                    case 0xbd: k=9; break;
                                    case 0xbb: k=10;break;
                                    case 0xb7: k=11;break;
                                    case 0x7e: k=12;break;
                                    case 0x7d: k=13;break;
                                    case 0x7b: k=14;break;
                                    case 0x77: k=15;break;
                            }
                     }
            }
    }
    /********************************************************************
                                主函数
    *********************************************************************/
    void main()
    {
    while(1)
            {
                    P1=0xff;
                    Getch();                //调用取键值函数
                    P0=seg7code[k]; //查表LED输出
                    P2=0X0F;                //点亮数码管
            }
    }

           
    /********************************************************************
                                  结束
    *********************************************************************/


    回复 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:37
  • 签到天数: 95 天

    [LV.6]常住居民II

    14

    主题

    616

    回帖

    2337

    积分

    超级版主

    积分
    2337
    QQ
    发表于 2023-7-12 08:36:45 | 显示全部楼层
    感谢分享~
    www.STCAI.com
    微信&手机:18106296591
    QQ:3133693787
    回复 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 05:11 , Processed in 0.052957 second(s), 33 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表