A. 求用52单片机实验板实现4*4键盘及数码管动态扫描显示的程序
#include <reg52.h>
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
sbit la=P2^6;
sbit wela=P2^7;
uchar keyscan();
uchar num,temp,num1;
void delay(uchar z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
num=17;
la=1;
P0=0;
la=0;
wela=1;
P0=0xc0;
wela=0;
while(1)//每次按下都是 所以while循环
{
num1=keyscan();
la=1;
P0=table[num1-1];
la=0;
}
}
uchar keyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0); //必须用if啊
{
delay(5);//消抖再判断
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0) //必须用if啊
{
temp=P3;
switch(temp)
{
case 0xee:num=1;break;
case 0xde:num=2;break;
case 0xbe:num=3;break;
case 0x7e:num=4;break;
}
while(temp!=0xf0)// 松手检测 松手数字才变化 必须用while 不松手不显示 不松手下一排键盘没用 一直在while内循环 放在第二个if内
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
delay(5);//消抖再判断
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
temp=P3;
switch(temp)
{
case 0xed:num=5;break;
case 0xdd:num=6;break;
case 0xbd:num=7;break;
case 0x7d:num=8;break;
}
while(temp!=0xf0)//松手检测 松手数字才变化 必须用while
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
delay(5);//消抖再判断
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;break;
case 0xdb:num=10;break;
case 0xbb:num=11;break;
case 0x7b:num=12;break;
}
while(temp!=0xf0)//松手检测 松手数字才变化 必须用while
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
delay(5);//消抖再判断
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;break;
case 0xd7:num=14;break;
case 0xb7:num=15;break;
case 0x77:num=16;break;
}
while(temp!=0xf0)//松手检测 松手数字才变化 必须用while
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;
}
B. 51单片机怎样用键盘控制数码管显示
51单片机怎样用键盘控制数码管显示的方法。
如下参考:
1.首先,编写代码并点亮数码管。
C. 51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现
我们先了解矩阵键盘的工作原理,掌握编码方法并能够编写出扫描程序,使用矩阵键盘控制数码管输出矩阵键值。
显示内容
在显示备橘祥模块的八位 LED 数码的个位显示当前使用矩阵键盘所按下的值。
键阵键盘多用于键伍李数目较多的时候。这样可以更多的节省IO口的占用量,
对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部仿搏电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为输入,行输出低电平,读列的状态。最后根据
行列的状态查表就可以知道是那个按键按下。