独立键盘代码:

#include<reg52.h>
#include<intrins.h>#define uint unsigned int
#define uchar unsigned charsbit beep=P2^3;
sbit DUAN =P2^6;//数码管段选
sbit WEI=P2^7; //数码管位选sbit key_s2 =P3^0;//独立按键s2
sbit key_s3 =P3^1;//独立按键s3
uchar temp;
uchar num;
//共阴极数码管段选表0——9,code表示数组中的数据在程序执行过程中不能被修改
//加code存放的是ROM区不加code存放的是RAM区
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(void)   //误差 -0.000000000001us
{unsigned char a,b;for(b=15;b>0;b--)for(a=152;a>0;a--);
}
void main()
{while(1){WEI=1;//打开位选锁存器P0 = 0xfe;//1111 1110 给第一个数码管接地,让它工作WEI =0;//关闭位选锁存器,进行段选(显示数字)if(key_s2==0){delay();//按键消抖if(key_s2==0){if(num!=9)num++;DUAN=1;P0=table[num];DUAN=0;while(!key_s2);//松手检测}}if(key_s3==0){delay();//按键消抖if(key_s3==0){if(num>0)num--;DUAN=1;P0=table[num];DUAN=0;while(!key_s3);//松手检测}}}
}


p30是低位p37是高位

列扫描:
1110000(0xf0)是将列所有的IO口都拉高,将行所有的IO口拉低。若第一列的任意按键被按下,则第一列会被拉低,就变为了11100000,第二列也是如此。
行扫描:
00001111 是将行所有的IO口都拉高,将列所有的IO口拉低。若第一行的任意按键被按下,则第一行会被拉低,就变为了00000111,第二行也是如此。

矩阵键盘代码:

#include<reg52.h>
#include<intrins.h>#define uint unsigned int
#define uchar unsigned charsbit beep=P2^3;
sbit DUAN =P2^6;//数码管段选
sbit WEI=P2^7; //数码管位选uchar temp;
uchar num;
uchar keyvalue=20;//初始值显示——
//共阴极数码管段选表0——9,code表示数组中的数据在程序执行过程中不能被修改
//加code存放的是ROM区不加code存放的是RAM区
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x38,0x37,0x3e,0x40,0x00};void delay(void)   //误差 -0.000000000001us
{unsigned char a,b;for(b=15;b>0;b--)for(a=152;a>0;a--);
}
void keyscan()
{//矩阵键盘扫描P3=0xf0;//进行列扫描,将列拉高,行拉低if(P3!=0xf0)//判断按键是否被按下{delay();//按键消抖if(P3!=0xf0){switch(P3)//判断那一列被按下   {case 0xe0:    //第一列keyvalue=0;break;case 0xd0:       //第二列keyvalue=1;break;case 0xb0:       //第三列keyvalue=2;break;case 0x70:       //第四列keyvalue=3;break;}P3 =0x0f; //行扫描 switch(P3)//判断那一行被按下   {case 0x0e:     //第一行keyvalue=keyvalue;break;case 0x0d:    //第二行keyvalue=keyvalue+4;break;case 0x0b:     //第三行keyvalue=keyvalue+8;break;case 0x07:     //第四行keyvalue=keyvalue+12;break;}while(P3!=0x0f);//松手检测}}P3=0xff;//将P3所有的IO口拉高if(P3!=0xff)//独立键盘扫描{delay();if(P3!=0xff){switch (P3){case 0xfe :    keyvalue=16; break;//s2case 0xfd : keyvalue=17; break;//s3case 0xfb : keyvalue=18; break;//s4case 0xf7 : keyvalue=19; break;//s5}while(P3!=0xff);//松手检测}   }
}
void main()
{    WEI=1;P0=0xfe;WEI =0;while(1){keyscan();DUAN=1;P0=table[keyvalue];DUAN=0;}
}

51单片机独立键盘和矩阵键盘相关推荐

  1. 蓝桥杯国信长天单片机--独立按键和矩阵键盘模块(七)

    独立按键模块 1-2短接实现矩阵按键:2-3短接实现独立按键. 案例: 独立按键,S6,打开所有LED ,S7,关闭所有LED.S4 ,打开蜂鸣器,S5,关闭蜂鸣器 #include "re ...

  2. 基于51单片机LCD1602的简易矩阵键盘密码锁

    写在前面 初次开始写博客,表达方面也许会有很多不足,希望自己能通过这种方式巩固自己的学习和锻炼表达能力,同时也是对于自己学习的记录. 一.功能介绍 四位密码锁,密码可更改,输入仅四次以内有效 矩阵键盘 ...

  3. 51单片机实训-4×4矩阵键盘电子琴

    制作说明: 晶振可以使用11.0592或12MHz: 扬声器应该按照图中给出的附图加上驱动电路: 显示器及七段译码器不接,单片机电子琴也可以正常工作. 74LS47 和数码管之间,应该接上" ...

  4. 51单片机入门教程__矩阵键盘的使用

    一.矩阵键盘的使用 1.在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用逐行或主列的"扫描",就可以读出任何位置按键的状态(扫描快速) 2.原理图 3 ...

  5. 51单片机之点阵、矩阵键盘

    个人网站:Geek交流圈 简陋,后面再修改 直接控制: 8*8LED点阵的点阵控制方法与动态数码管非常相似 动态数码管是控制位选,直接给段选送数据 点阵是控制行,直接给列送数据 For循环控制行的扫描 ...

  6. 51单片机(六)矩阵键盘和矩阵键盘密码锁

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...

  7. 51单片机独立按键和矩阵按键实现

    这里写目录标题 独立按键实验 矩阵按键实验 独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间( ...

  8. 51单片机-独立按键,矩阵按键,点阵

    独立按键:实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开. "1,2"和"3,4"管脚之间距离短,初始不导通,"1,3"和&q ...

  9. 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)

    这篇博文主要记录51单片机键盘篇(非编码键盘与编码键盘.非编码键盘的扫描方式.独立键盘.矩阵键盘.键盘消抖等)包含原理图.代码等 (一)基础补充 1.键盘的任务 2.键盘的识别 3.如何消除按键的抖动 ...

  10. vba循环通过键盘某个按键按下退出循环_51单片机按键检测--独立按键与矩阵键盘...

    按键可以说是51单片机项目开发的一个重要组件了,它是作为51单片机IO口输入的一种重要方式.我们可以通过按键控制单片机执行相应的程序,得到我们想要得效果.51单片机的按键输入主要有两种,一种是独立按键 ...

最新文章

  1. 重构:一项常常被忽略的基本功
  2. Sublime Es6教程1-环境搭建
  3. 转载:页面加载swf插件:swfobject
  4. 小白入门深度学习 | 第三篇:30分钟入门深度学习 - TensorFlow版
  5. JPEG原理分析及JPEG解码器的调试
  6. (*长期更新)软考网络工程师学习笔记——Section 18 计算机硬件基本知识
  7. django出现 CSRF cookie not set
  8. spring 中构造Constructor、@Autowired、@PostConstruct、静态方法的执行顺序 (@PostConstruct 说明)
  9. 【数据库系统】Web查找和数据库查询的区别
  10. jmu-枚举WeekDay
  11. 你是否适合当一个Java程序员?一文看清
  12. C++ 实现一个简单内存池
  13. C#中object sender与EventArgs e
  14. yum list 报错linux,centos7下运行yum list 出现如下报错 求教!
  15. JAVA编程用什么软件最好_Java编程软件有哪些,Java编程用什么软件好?
  16. 一个自动写咪蒙体的机器人,请夸我
  17. 微信小程序开发与公众号运营有什么区别
  18. 修改《植物大战僵尸》的游戏存档
  19. Yuga Labs「高处不胜寒」
  20. 【全开源+免费更新】doodoo.js快速入门教程 1

热门文章

  1. 【深度学习】——物体检测的难点
  2. C++总结笔记(二)——指针
  3. ansible 判断和循环
  4. android软件获取系统签名
  5. [Windows Phone] 实作不同的地图显示模式
  6. Entity Framework4.0 (一)概述(EF4 的Database First方法)
  7. 设计模式--享元模式实现C++
  8. 全国计算机等级考试题库二级C操作题100套(第63套)
  9. oracle修改数据库国际字符集,Oracle修改数据库字符集
  10. 面试题 为什么用线程池?解释下线程池参数