51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现

作者&投稿:隗庆 (若有异议请与网页底部的电邮联系)
~ 我们先了解矩阵键盘的工作原理,掌握编码方法并能够编写出扫描程序,使用矩阵键盘控制数码管输出矩阵键值。

显示内容
在显示模块的八位 LED 数码的个位显示当前使用矩阵键盘所按下的值。
键阵键盘多用于键数目较多的时候。这样可以更多的节省IO口的占用量,
对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为输入,行输出低电平,读列的状态。最后根据
行列的状态查表就可以知道是那个按键按下。


简述单片机反转法识别矩阵按键过程
反过来驱动这一列为0,其他列为1。把行作输入。就可以判断按下的键所在行。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I\/O口作为输出端,而列线所接的I\/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无...

51单片机矩阵键盘程序:想把按键的值一一存到数组里,最后按下某个按键...
给一个键盘扫描程序参考:void delay(unsigned int a){unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);}uchar kbscan(void){unsigned char sccode,recode;P1=0x0f; \/\/发0扫描,列线输入if ((P2 & 0x0f) != 0x0f) \/\/有键按下{delay(20); \/\/延时去抖动if (...

51单片机,怎么用矩阵键盘中的两个按键控制外部中断0和1,在按按键的时...
让 P3.7 始终为 0,然后就是按 S12 触发外部中断 0,按 S16 触发外部中断 1。

怎么讲51单片机的矩阵键盘和独立键盘分开扫描不让他们冲突,应该给P3...
一般赋值为FFH,然后分别给各列(行)置0,检测相应的行(列)值以确定按键位置,获得键值。矩阵键盘也独立按键一般不放到同一个IO口的。

用单片机的并行口接2*3矩阵键盘,每个按键功能由4个数码管输出,初始值...
设计步骤:1,先搞明白矩阵键盘,如果有条件先焊接出来,简单编程,实现矩阵键盘功能。2,数码管的设计;可以静态可以动态,如果初学者,可以选择静态显示,对程序来说比较简单。3,结合1,2实现第一个按键功能。4,在第一个按键功能基础上,通过定时器,加入数据移位,实现第二、第三个按键功能。5,闪烁...

51单片机矩阵键盘输入11位数字,赋值给一个变量
运算时间也是很长的,显示运算结果也很麻烦,不可能有很多位都显示出来,需判断数值范围,决定显示方式和显示位数 uchar c=0;double a;uchar buff[11];while(c<11){ buff[c}=keyscan();c++;} a=buff[0]*10000000000+buff[1]*1000000000+...buff[10];...

矩阵单片机怎么从矩阵键盘中提取一个按键来实现“按一下键切换一个LED...
假设矩阵键盘如上图,LED接P1.0,按键用S4 ORG 00H CLR P3.0 STATAR:JB P3.7,CLR P1.0 JNB P3.7,SETB P1.0 SJMP STATAR END

如何在单片机程序中如何定义一个数组,用矩阵键盘输入里面的数组里面的变...
矩阵扫描?正常我是用翻转法来检查按键的,下面贴出代码,希望能给你一些帮助 typedef unsigned char u8;typedef unsigned int u16;sbit key=P1;u8 key_scan(){u8 key_value=0;key=0x0f;if(key!=0x0f){ if(key==0x0e) key_value=1; else if(key==0x0d) key_value=2; else...

关于一个c51单片机的4*4矩阵键盘扫描程序,我用keil运行,总是有错误...
\/\/电路说明如下。\/\/单片机:使用51系列兼容的即可;\/\/4×4矩阵键盘:接在P1口;\/\/两位数码显示器: P0口输出七段码,P2口输出位选码。\/\/=== \/\/C语言程序如下。\/ 文件名: KEY_LED.c 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。\/ include <reg51.h> include <intrins.h...

单片机中独立键盘和矩阵键盘如何一起使用 请用C语言写个程序说明,谢谢...
uchar keyval,num;sbit skey=P1^0; \/\/独立键P1.0 void delay(uchar a){ uchar i,j;for(i=0;i<a;i++)for(j=0;j<125;j++);} uchar kbscan(void) \/\/矩阵键扫描程序 { unsigned char sccode,recode;P3=0x0f; \/\/发0扫描,列线输入 if ((P3 & 0x0f) != 0x0f) \/...

隆林各族自治县17264167860: 如何在51单片机矩阵键盘里按一个键可实现数码管动态显示而不是一个值 -
奚明裕宁: #include<reg51.h>#define uchar unsigned char; uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f void delay(unsigned int a) { unsigned int i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } uchar ...

隆林各族自治县17264167860: 用51单片机,怎么让数码管显示一串矩阵键盘按下的键代表的数(0~f)? -
奚明裕宁: 这种显示方式就和手机拨号时,按下号码的显示是一样,第一个数码先在右边显示,再按键,依此向左移动显示.要是6位数码管,就保留6位显示了,按键超过6位时,先按的自然丢掉了.

隆林各族自治县17264167860: 51单片机中键盘控制数码管显示有谁会? -
奚明裕宁: 用51的话,由于51的I/O没有高阻态,用中断去扫描键盘的话你给的电路图是行不通的(个人意见仅供参考),想要节省CPU开销的话可以用定时器,定时扫描键盘.下面是仿真图和程序.#include#define uint unsigned int #define uchar ...

隆林各族自治县17264167860: 求教!51单片机,利用矩阵键盘和数码管. -
奚明裕宁: 要加到几百几千的,就要用几位数码管了,显示到百位,要有3位数码管,显示到千位,要有4位数码管. 计数时,用一个变量,就正常计数呗,按一次键变量加1,关键是分别取出个十百千位,分别送到每一位数码管显示就行了,很简单的吗.

隆林各族自治县17264167860: 求由51单片机控制4x4键盘输入,4个数码管(采用动态扫描)显示 C语言编程思路! -
奚明裕宁: 可以这样写,先计算按了几下了,按下若小于4次,让四个段选端前几个端导通,按下数超过或等于4次你就可以用扫屏的方式来显示就好了.比如第一下按的是8你就可以设置if和else语句组合啊!先有个数组d[]={0xf7;0xfb;0xfd;0xfe}//段选,按了几下设为变量uint a//无符号字符型,if(a<4){if(a=1)P2=d[a-2];P1=data[8];delay();········if(a-1){··········}if(a-2){··········}};else(············)太多了我就不写了.

隆林各族自治县17264167860: 51单片机控制数码管显示矩阵键盘输入的十进制数,有什么好一点的实现方式?求原理 -
奚明裕宁: 数码管会不?矩阵键盘会不?这就是原理啦.程序的话,不使用 Delay()函数,采用定时器替代.不使用 while(K==0),使用 状态记录替代.那么你就搞定了!!

隆林各族自治县17264167860: 不知道怎么在矩阵键盘按键释放后,数码管能够动态显示???、求单片机编程大神帮忙 -
奚明裕宁: 把key 定义为全局变量,按键扫描程序里去掉display(key); 主程序里加display(key*key); void main() { while(1) {yscan(); display(key*key);} }

隆林各族自治县17264167860: 4*4矩阵键盘控制四位数码管显示单片机C语言程序 -
奚明裕宁: 去看看C的相关知识 这个是基础中的基础不然你玩不转单片机的~~~

隆林各族自治县17264167860: 单片机用矩阵键盘控制数码管怎么数据移位 -
奚明裕宁: 弄个数组存放输入的密码,每次输入则将数组做移位,然后每次显示都把数组中所有的字符显示一次就达到移位显示了..参考程序发给你了

隆林各族自治县17264167860: 单片机中如何通过矩阵键盘对数码管进行两位数的置数,并且能显示在数码管上 -
奚明裕宁: 首先定义一个数组,要把显示的断码存入数组中,然后数码管断码定义一个变量,当按下按键的时候,让这个数码管的变量发生变化,当然这需要数组 举个例子: uchar code tab[]={//这里写数码管的断码}uint i; {P0=0xfe;//位码P2=tab[i];//断码 } 当按键按下的时候,让i发生变化,比如 i++;纯手打,望采纳

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网