博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵键盘 数码管
阅读量:6233 次
发布时间:2019-06-22

本文共 2358 字,大约阅读时间需要 7 分钟。

在没有数字显示的开始,顺序为矩阵键盘后,依次显示的数码管0~F,6同时数字控制静态展示。

 数字控制和矩阵式键盘

首先关闭全部的数码管的段选不让数码管显示不论什么数字。然后位选中全部的数码管,接下来仅仅须要选中全部的数码管,以后的操作的仅仅须要送段选数据即可了,接着进入while()大循环不停的扫描键盘是否有被按下

#include<reg52.h>

#define uchar unsigned char 
#define uint unsigned int 
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)
{
P0=table[num];
dula=1;
dula=0;
}
void matrixkeyscan()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
void main()
{
P0=0;
dula=1;
dula=0;
P0=0;
wela=1;
wela=0;
while(1)
{
matrixkeyscan();
}
}

这里有几个

P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{


delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{  .........

P3=0xfe 将第1 行线置低电平,其余的行线所有为高电平

temp=P3 读取P3口当前的状态值赋值给暂时变量temp

temp=temp&0xf0 将temp与0xf0进行与运算 然后再将结果赋值给temp,主要是推断temp的高4位是否有0。假设temp的高4位没有0。那么他与0xf0“与”运算后的结果仍然等于0xf0.temp的高4位数据实际上就是矩阵键盘的4个列线,从而我们可通过推断temp与“0xf0运算后的结果是否为0xf0来推断出第一行按键是否有按键被按下。

if(temp!=0xf0) 表示temp是上面P3口数据与0xf0“与”运算后的结果,假设结果temp不等于0xf0来推断出有按键被按下。

另外

P3口全部引脚

其余的想复位引脚RES\VPD

还有EA\VPP

ALE\PROG

这是全部的了,我的是AT89S52(51系列)

版权声明:本文博主原创文章。博客,未经同意不得转载。

你可能感兴趣的文章
jQuery判断checkbox是否选中的3种方法
查看>>
我在这里3在引发众1.8万的经验分享
查看>>
关于ajax的同步和异步
查看>>
【UWP】FlipView绑定ItemsSource,Selectedindex的问题
查看>>
MySQL----information-schema数据库相关权限的说明。
查看>>
转:Tortoise SVN 版本控制常用操作知识
查看>>
PHP模拟发送POST请求之四、加强file_get_contents()发送POST请求
查看>>
Codeforces Round #192 (Div. 1) C. Graph Reconstruction 随机化
查看>>
[Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.
查看>>
SSO 基于Cookie+fliter实现单点登录(SSO):工作原理
查看>>
golang笔记——IDE
查看>>
专注力的一点体会
查看>>
安装CentOS 7时出现No Caching mode page found问题的解决
查看>>
iOS开发UI篇—Quartz2D使用(绘图路径)
查看>>
esnext:Function.prototype.toString 终于有规范了
查看>>
nginx源代码分析--从源代码看nginx框架总结
查看>>
Arcgis for Js实现graphiclayer的空间查询
查看>>
3.2 re--正則表達式操作(Regular expression operations)
查看>>
HDU 1018 Big Number (log函数求数的位数)
查看>>
CSS3盒子模型
查看>>