首页 - 科技 > 4 4键盘输入动态数码管(4键盘及数码管动态扫描显示的程序)

4 4键盘输入动态数码管(4键盘及数码管动态扫描显示的程序)

发布于:2024-04-14 作者:nyajiajiao.cz 阅读:7

一、单片机4*4矩阵键盘两位数码管显示0—16

步骤如下:

1、将4x4矩阵键盘连接到单片机上,并将数码管连接到单片机上。

2、编写程序以实现键盘扫描和数码管显示。

3、使用行扫描法识别键盘输入。将行线设置为高电平,然后逐行扫描列线。

4、使用两位数码管显示0-16的数值。将数码管的段选线连接到单片机的GPIO引脚上,并将位选线连接到另一个GPIO引脚上。

5、了消除按键抖动的影响,可以在程序中添加去抖动逻辑。

二、动态数码管显示1-8和4×4矩形键盘显示

题主想问的是“动态数码管显示1-8和4×4矩形键盘显示的区别”?结构不同,显示方式不同。

1、结构不同:动态数码管由7个或8个LED灯组成,可以显示1至8位的数字。4乘4矩形键盘由16个LED灯组成,可以显示0至9的数字和A至F的字母。

2、显示方式不同:动态数码管的显示方式是通过控制每个LED灯的亮灭状态来显示数字。4乘4矩形键盘的显示方式是通过控制每个LED灯的亮灭状态来显示字符。

三、51单片机矩阵4*4键盘程序,P0口接一个数码管,P2口接矩阵键盘

////给你一个例子,自己再改改:

/*-----------------------------------------------

名称:矩阵键盘

论坛:www.doflye.net

编写:shifang

日期:2009.5

修改:无

内容:

------------------------------------------------*/

#include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include"keyboard.h"

#include"delay.h"

#define KeyPort P1

/*------------------------------------------------

按键扫描函数,返回扫描键值

------------------------------------------------*/

unsigned char KeyScan(void)//键盘扫描函数,使用行列反转扫描法

{

unsigned char cord_h,cord_l;//行列值中间变量

KeyPort=0x0f;//行线输出全为0

cord_h=KeyPort&0x0f;//读入列线值

if(cord_h!=0x0f)//先检测有无按键按下

{

DelayMs(10);//去抖

if((KeyPort&0x0f)!=0x0f)

{

cord_h=KeyPort&0x0f;//读入列线值

KeyPort=cord_h|0xf0;//输出当前列线值

cord_l=KeyPort&0xf0;//读入行线值

while((KeyPort&0xf0)!=0xf0);//等待松开并输出

return(cord_h+cord_l);//键盘最后组合码值

}

}return(0xff);//返回该值

}

/*------------------------------------------------

按键值处理函数,返回扫键值

可以根据需要改变返回值

| 1| 2| 3|+|

| 4| 5| 6|-|

| 7| 8| 9|*|

| 0|.|=|/|

------------------------------------------------*/

unsigned char KeyPro(void)

{

switch(KeyScan())

{

case 0x7e:return 1;break;//0按下相应的键显示相对应的码值

case 0x7d:return 2;break;//1

case 0x7b:return 3;break;//2

case 0x77:return'+';break;//3

case 0xbe:return 4;break;//4

case 0xbd:return 5;break;//5

case 0xbb:return 6;break;//6

case 0xb7:return'-';break;//7

case 0xde:return 7;break;//8

case 0xdd:return 8;break;//9

case 0xdb:return 9;break;//a

case 0xd7:return'x';break;//b

case 0xee:return 0;break;//c

case 0xed:return'.';break;//d

case 0xeb:return'=';break;//e

case 0xe7:return'/';break;//f

default:return 0xff;break;

}

}

四、求用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 dula=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;

dula=1;

P0=0;

dula=0;

wela=1;

P0=0xc0;

wela=0;

while(1)//每次按下都是所以while循环

{

num1=keyscan();

dula=1;

P0=table[num1-1];

dula=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;

}

二维码

扫一扫关注我们

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件至 465747283@qq.com举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

相关文章

自定义链接1

电话咨询
自定义链接2