⑴ 简单的51系列单片机控制4*4矩阵键盘显示电路图
这个太简单了,很多书上都有,我想,你自己找本书,看看吧.
⑵ 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;
}
}
⑶ 51单片机怎么读取矩阵键盘是不是只要把vcc和GND给接上,然后读取高低键盘就可以了
先给P-11送上低电平,再查询p-14~p-17哪个为低电平,若p-17为低电平,表示S4按下了
没有?再给P-12送上低电平,再查询p-14~p-17哪个为低电平,若p-17为低电平,表示S8按下了
........
⑷ 关于51单片机矩阵键盘的问题。
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。
(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于这一行的四个按键变成了四个独立按键,在读取列线的值就知道了究竟哪个按键被按下了。 此时P3口就出现了特定的电平组合,相当于特征码了,然后再认为映射一下功能就可以了。
⑸ 矩阵键盘与单片机怎么连接
用单片机的I/O口与矩阵连接
有专门的电路,网络上有借鉴的
⑹ 矩阵键盘与单片机怎么连接
矩阵键盘是行x列,需要看你矩阵的多少而定,接单片机IO口P0、P1都可以
矩阵键盘就是个按键阵列,不需要电源和地,电源和地是接单片机的
⑺ 51单片机矩阵4*4键盘程序,P0口接一个数码管,P2口接矩阵键盘,C语言的
51单片机矩阵4*4键盘程序,仿真实例 供参考。
⑻ 51单片机P0口接矩阵键盘可以吗
首先说下P0口和P1、P2、P3口的区别,关于LED和键盘的
P0作为输出口,未加负载时有4V电压,但由于芯片内部对P0未接5V+电阻,所以接上负载之后电压会下降。以LED灯负载为例,接上300欧姆电阻+黄色led,P0口的电压只有2.4V,led不会亮,所以必须要加上拉电阻。
P1、P2、P3内部都有电源供电,所以加LED这种小负载时电压不会下降很多。
P0接键盘的时候是作为输入口,这时,P0内部的锁存器发挥功效,可以锁存住数据。
键盘输入电路是这样:
如果是IO——按键——地线,也就是不加上拉电阻的接法,接到P0口后,按键1次,P0口自动锁存住低电平,即使没有上拉电阻,但由于接了mos管电路(如图),松开按键后,VCC的电流不会导通到地线,所以IO口会恢复高电平,可以进行下次逻辑判断。
结论:P0口只有在用于IO驱动时才需要加上拉电阻,键盘不需要
ps:这些你可以下个仿真软件研究,proteus,它可以把keil生成的工程文件虚拟烧录到单片机中,用法很简单,和multisim一样
⑼ 51单片机如何与电脑键盘相接,USB的
我自己没做过,但是51单片机处理USB协议太吃力了,建议你使用32位的单片机,STM32F103ZET6之类的,或者换成矩阵键盘,按键也比较多了。
以下是我在网上找的一些参考,希望能够对你有帮助:
如果是USB接口,那么你要懂USB协议,而且单片机的速度要足够快,一般的51怕是做不了,得用USB芯片,比如南京沁恒的CH375,单片机做主机,USB键盘做从机。
USB协议是很复杂的,不是一天两天就能搞得通的,程序也很复杂,就不附上了,如果你是初学者,那么不建议你一开始就调试USB,你可以尝试下圆口的PS2键盘,那个比较容易
用
带
USB
接口的
51内核
单片机吧
买个读片子机,把程序烧进去,ok
你知道USB协议有多复杂吗?!还用51来读?
要是说在键盘上接一个USB转串口的芯片,然后用51来读串口,这样更可行一些
还不如老老实实用矩阵键盘呢
单片机最小系统板不能直接和PC机USB相连,如果是支持ISP下载的单片机,可以通过USB转232(TTL电平),单片机的串口RXD(P3.0)接232的TXD,单片机的串口TXD(P3.1)接232的RXD。
USB转232(TTL电平)下载器需要装驱动程序,采用的芯片不同驱动不同,请对应安装。
如果单片机从USB取电,板上要有电源开关。
⑽ 矩阵键盘如何与开发板连接
矩阵键盘与开发板连接:矩阵键盘是行x列,需要看你矩阵的多少而定,接单片机IO口P0、P1都可以,矩阵键盘就是个按键阵列,不需要电源和地,电源和地是接单片机的。
IN0~IN4连接到微控制器上的任何IO端口,只要在编程期间设置IO,P0~P3中的任何四个IO都可以。当然,为了方便起见,通常并联在一起,例如P2_0至P2_3。驱动模块的驱动电源输入不应取自MCU板,而应使用其他电源为其供电。
行列扫描法原理:
第一步, 使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。
第二步,在第一步判断有键按下后, 延时10ms消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。
第三步,开始扫描按键位置,采用逐 行扫描,每间隔1ms的时间,分别拉低第一列,第二列,第三列。