精华内容
下载资源
问答
  • C51单片机 矩阵键盘 驱动程序,内置防抖功能。 提供函数 extern unsigned char MtxKBInput()//返回0~16的数值,16为初始化值,键值:0~15 ---------- 头文件: ---------- #include "reg52.h" #include ...
  • 本文为89C52单片机矩阵键盘行列扫描程序,一起来学习一下
  • 本文为51单片机矩阵键盘扫描程序,希望对你的学习有所帮助。
  • c51单片机矩阵键盘最简写法,单片机新手理解掌握矩阵键盘最简代码
  • 文章主要介绍了单片机矩阵键盘扫描的两种方式
  • 包含线反转法和扫描法两种矩阵键盘的实现,含proteus仿真原理图及完整代码,可运行实现
  • 本文为 51单片机矩阵键盘扫描程序,下面一起来学习一下
  • 非常适合新手学习51单片机,利用1602显示,里面有原理图,根据硬件看代码,非常容易理解
  • 单片机矩阵键盘

    2015-11-24 21:45:31
    单片机扫描矩阵键盘的三种方式,包括行列扫描,逐行扫描和中断扫描,希望帮到你们
  • 51单片机矩阵键盘输入液晶显示程序
  • 单片机矩阵键盘计算器,含程序,仿真图。属于示例程序。
  • 名称:矩阵键盘依次输入控制 使用行列逐级扫描 中断方式 内容:如计算器输入数据形式相同 从右至左 使用行列扫描方法 中断方式可以有效提供cpu工作效率,在有按键动作时才扫描,平时不进行扫描工作
  • 学习51单片机矩阵键盘时,我有点迷乱了,不知道是怎样处理的,经过仔细分析电路,然后终于明白其中的原理,这样的话,再看程序,就是那样的简单了。。首先看一下电路图是怎样连接的,我买的开发板上是AT89S52单片机...

    学习51单片机矩阵键盘时,我有点迷乱了,不知道是怎样处理的,经过仔细分析电路,然后终于明白其中的原理,这样的话,再看程序,就是那样的简单了。。

    首先看一下电路图是怎样连接的,我买的开发板上是AT89S52单片机,矩阵键盘在P3口。接法如下图:

    3f829e29e76caa8c3b1f630a6b27d58d.gif

    QQ截图20150120151608.png (87.58 KB, 下载次数: 70)

    2015-5-22 00:54 上传

    当然上面的图的意思是P3.1~P3.3 跟P3.4~P3.7不一样的,他们是相互连接(当按下键时),组成4*4=16个键的。

    如果给P3一个扫描初值的话:如0x0F ,则没有键按下时为:

    P3.1~P3.3为1,P3.4~P3.7为0。

    如果有键按下,则情况发生变化:高电平接入低电平:如P3.3与P3.7连接的键按下,则P3.3与P3.7为0,即接地了。

    则P3此时为:0000 0111,这时如果用P3&0x0F,则高四位为0,低四位保留,可以得到低四位的内容了。

    通过去抖操作,即一个delay,可以得到低四位内容。这里设为:h=P3&0x0F;

    如果再得到高四位内容,则可以组成一个数,来定位哪个键了。

    用P3=h|0xF0;这会出现什么情况呢?1|0=1   1| 1 =1,这里难道高四位全置1 吗?不是的,当赋值后,如果有键按下的话,P3高四位不会全为1111,被拉到0了。如P3.3与P3.7连接的键按下,则P3.3与P3.7为0,即接地了。 即:0111 0111,&F0之后,得到0111 0000,这样的话,我们得到高四位的值了,

    用高四位+低四位,就可以得到一个数值,确定一个键。

    下面看看人家编写的程序,相信不是太难了吧。

    //keyboard.c这里的行与列的扫描,也就是把字节的8位,高四位与低四位分开来,从而确定坐标。

    //行列扫描程序,可以自己定义端口和扫描方式,这里做简单介绍

    #include //包含头文件

    #define uchar unsigned char

    #define uint unsigned int

    unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

    0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F,数码管来显示按下键的值。

    uchar keyscan(void);            //主要的矩阵键盘扫描函数。

    void delay(uint i);

    void main()

    {

    uchar key;

    P2=0x00;//1数码管亮 按相应的按键,会显示按键上的字符

    while(1)

    {

    key=keyscan();//调用键盘扫描,

    switch(key)

    {

    case 0x7e:P0=dofly[0];break;//0 按下相应的键显示相对应的码值 原理就是高四位一列低四位一列的组

    //合。0111    1110 7e    0表示按键后为0,1表示没有按键按下的。即P3.7与P3.1连接为低电平,为S1键

    //其他类推。

    case 0x7d:P0=dofly[1];break;//1

    case 0x7b:P0=dofly[2];break;//2

    case 0x77:P0=dofly[3];break;//3

    case 0xbe:P0=dofly[4];break;//4

    case 0xbd:P0=dofly[5];break;//5

    case 0xbb:P0=dofly[6];break;//6

    case 0xb7:P0=dofly[7];break;//7

    case 0xde:P0=dofly[8];break;//8

    case 0xdd:P0=dofly[9];break;//9

    case 0xdb:P0=dofly[10];break;//a

    case 0xd7:P0=dofly[11];break;//b

    case 0xee:P0=dofly[12];break;//c

    case 0xed:P0=dofly[13];break;//d

    case 0xeb:P0=dofly[14];break;//e

    case 0xe7:P0=dofly[15];break;//f

    }

    }

    }

    uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法 比如:行为低电位,列为高四位

    {

    uchar cord_h,cord_l;//行列值

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

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

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

    {

    delay(100);        //去抖

    if(cord_h!=0x0f)

    {

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

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

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

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

    }

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

    }

    void delay(uint i)//延时函数

    {

    while(i--);

    }以上为51单片机矩阵键盘扫描显示程序。

    展开全文
  • 这是CT107d单片机矩阵键盘的源代码,里面详细介绍了矩阵键盘的编程方式,值得参考。
  • 1、矩阵键盘JP4 接 IO口 JP8 (CPU P1.0~P1.7)2、静态数码管 JP3 接 IO口 JP10 (P0.0~P0.7)3、JP165跳线帽去掉。4、开发板是在天猫买的,能够自动升级,拿来学习挺方便。#include #include //--定义使用的IO口--//#...

    1、矩阵键盘JP4 接 IO口 JP8 (CPU P1.0~P1.7)

    2、静态数码管 JP3 接 IO口 JP10 (P0.0~P0.7)

    3、JP165跳线帽去掉。

    4、开发板是在天猫买的,能够自动升级,拿来学习挺方便。

    #include

    #include

    //--定义使用的IO口--//

    #define GPIO_DIG P0

    #define GPIO_KEY P1

    //--定义全局变量--//

    unsigned char code DIG_CODE[17]={

    0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

    //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

    void Delay10ms(unsigned int c); //误差 0us

    void main()

    {

    unsigned char key_val = 0;

    unsigned char delayIndex = 0;

    while (1)

    {

    GPIO_KEY = 0x0f;

    if (GPIO_KEY != 0x0f) //检测是否有按键按下

    {

    Delay10ms(1); //消抖

    if (GPIO_KEY != 0x0f) //再次检测是否有按键按下

    {

    //行检测

    GPIO_KEY = 0x0f;

    switch (GPIO_KEY)

    {

    case 0x07:key_val = 12;break;

    case 0x0b:key_val = 8;break;

    case 0x0d:key_val = 4;break;

    case 0x0e:key_val = 0;break;

    }

    //列检测

    GPIO_KEY = 0xf0;

    switch (GPIO_KEY)

    {

    case 0x70:key_val = key_val + 3;break;

    case 0xb0:key_val = key_val + 2;break;

    case 0xd0:key_val = key_val + 1;break;

    case 0xe0:key_val = key_val + 0;break;

    }

    while (delayIndex<20 && key_val!=0xf0)

    {

    Delay10ms(1);

    delayIndex++;

    }

    delayIndex = 0;

    }

    }

    GPIO_DIG = ~DIG_CODE[key_val];

    }

    }

    void Delay10ms(unsigned int c) //误差 0us

    {

    unsigned char a, b;

    //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//

    for (;c>0;c--)

    {

    for (b=38;b>0;b--)

    {

    for (a=130;a>0;a--);

    }

    }

    }

    展开全文
  • PS:   1.不用抬杠,没有标题党,虽说不是全部写法,但是大部分都会得写法我没写出来;   2....解决方法:原理同下面介绍的矩阵键盘style3.c写法   2.矩阵键盘的的3种写法适用场景解析: 1.style
  • 矩阵键盘单片机是外部...1、 矩阵键盘的一般电路 图 1 矩阵键盘电路如图 1矩阵键盘电路所示,4*4矩阵键盘有4行4列按键,单片机4个I/O口接矩阵键盘的行线,另外4个I/O口接矩阵键盘的列线,通过对行线列线的操作完成
  • 单片机矩阵键盘源程序按键扫描sccode
  • 51单片机3x3矩阵键盘驱动程序,经过巧妙的算法处理,该驱动程序只占用6个IO口,其他两个IO口可以正常使用,不会受到矩阵键盘的影响,能够节省宝贵的IO口资源,特地分享给需要的朋友,拿走不谢~~
  • 用51单片机矩阵键盘控制数码管显示数字

    千次阅读 多人点赞 2021-05-12 20:01:36
    用51单片机矩阵键盘控制数码管显示数字 #include<reg51.h>//头文件 #define keys P1//宏定义矩阵键盘 #define smg P0//宏定义数码管 sbit SMGA=P2^2;//位定义 sbit SMGB=P2^3; sbit SMGC=P2^4; unsigned int ...

    用51单片机矩阵键盘控制数码管显示数字

    #include<reg51.h>//头文件
    #define keys P1//宏定义矩阵键盘
    #define smg P0//宏定义数码管
    sbit SMGA=P2^2;//位定义
    sbit SMGB=P2^3;
    sbit SMGC=P2^4;
    unsigned int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f
                         ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管字形码
    unsigned int k;
    void delay()//延时函数
    {
        unsigned char a,b;
    	for(a=0;a<200;a++)
    	for(b=0;b<200;b++);
    }
    void jzjp()//矩阵键盘函数
    {
    	unsigned int i=0;
    	//unsigned int k; 本人遇到的错误,在该函数下定义的k,导致主函数中用k时出现错误,应在整体下定义
    	keys=0x0f;//行列扫描,高四位输出低电平,低四位输出高电平
    	if(keys!=0x0f)//如果keys不等于该值则说明有按键按下
    	{
    		delay();//按键消抖
    		if(keys!=0x0f)//确实按下按键,第四位不全为1
    		{
    			switch(keys)//列判断
    			{
    				case(0x07):k=0;break;//对应列按键按下时矩阵键盘对应的数,并存储于k
    				case(0x0b):k=1;break;
    				case(0x0d):k=2;break;
    				case(0x0e):k=3;break;
    			}
    			keys=0xf0;
    			switch(keys)//行判断
    			{
    				case(0x70):k=k;break;//对应行按键按下时矩阵键盘对应的数,并存储于k
    				case(0xb0):k=k+4;break;
    				case(0xd0):k=k+8;break;
    				case(0xe0):k=k+12;break;
    			}
    				//扫描过程,如果case(0x07)时第一列按键按下,k=0,break跳出switch,
    				//行判断,case(0x70)时第一行按键按下,k=k,跳出switch
    				// 如果case(0x0b)时第二列按键按下,k=1,break跳出switch,
    				//行判断,case(0xb0)时第二行按键按下,k=k+4(第一个按键向后数4个)跳出switch。。
                 while((i<50)&&(keys!=0xf0))//按键总是按着不松开超过一定时间时强制退出,从新扫描显示你所按着不动的按键
    			 {
    			  	delay();
    				i++;	
    			 }
    		}
    
    	}
    				
    }
    void main()//主函数
    {
    	while(1)
    	{
    	SMGA=0;//Y0非输出端对应的数码管显示
    	SMGB=0;
    	SMGC=0;
    	jzjp();
    	smg=table[k];//数码管显示
    	}
    }
    
    

    注:

    1. 该开发板矩阵键盘接于P1口
    2. 该程序时用矩阵键盘控制的最后一个动态数码管,3-8译码器的输入端接于P2口的2,3,4端,P0口接数码管驱动端。
    展开全文
  • 51单片机矩阵键盘计算器51单片机矩阵键盘计算器/**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD12864.c *************************************//***功能:...

    51单片机矩阵键盘计算器

    51单片机矩阵键盘计算器

    /**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD12864.c *************************************/

    /***功能:1、基本整数的加减乘除; 2、有清除功能;3、除法计算,结果保留两位小数;4、分母为0报错********/

    /*********5、小数减大数可显示负号;6、只能做两个数的加减乘除;7、可做10位数的有效运算***********************************/

    /******注意:计算结果要求余显示,比如正确结果123,求余显示321,所以将321逐个赋给某一数组,倒序向12864输出**/

    #include

    #define uint unsigned int

    #define uchar unsigned char

    #define ulong unsigned long

    sbit rs=P3^7;

    sbit rw=P3^6;

    sbit e=P3^5;

    sbit psb=P3^4; //串并选择,H=串 L=并,此程序让12864并行输出

    bit flag1=0; //数字标记位

    bit flag11=0; // +标记位

    bit flag12=0; // —标记位

    bit flag13=0; // *标记位

    bit flag14=0; // /标记位

    bit flag15=0; // =标记位

    bit flag16=0; //清除位

    bit flag2=0; // 负号标记

    bit flag3=0; // 分子小于分母,结果只有两位有效数字时,扩大100倍有两位有效数字

    bit flag4=0; //分子小于分母,结果只有一位效数字时,扩大100倍有1位有效数字

    void init(); //初始化16824子函数

    void write_com(uchar); //写命令

    void write_dat(uchar); //写数据,即显示内容

    void display1(uchar); //显示字符

    void delete(); //清除显示

    void delay(uint); //延时

    void keyscan(); //键盘扫描

    void scan(); //扫描运算符,设定两个数计算

    void display_value(); // 计算结果显示

    void value(); // 计算

    void begin(); //开机屏幕显示

    void math_error(); //数学错误显示

    uchar code table1[]="0123456789.+-*/=";

    uchar code table3[]="welcome to";

    uchar code table4[]=" 51 calculator" ;

    uchar code table5[]="math error";

    long table2[19]; //存储结果的数组,20就出错?

    long s,a,b,num1; //s为计算结果,a为第一个数,b为第二个数,num1对应为键对应的值为显12864显示服务

    /***********************************主**函**数***********************************************************/

    void main()

    {

    init();

    delay(5);

    begin(); //开机初始化

    delay(5);

    write_com(0x80);//输入数在第一行显示

    while(1) //大循环使其不断的显示

    {

    keyscan();

    scan();

    value();

    display_value();

    delete();

    }

    }

    /***********初始化********************************/

    void init()

    {

    psb=1; //并口传输方式

    delay(50); //先等待50个毫秒

    write_com(0x30); //基本操作指令

    delay(5);

    write_com(0x0e); //显示状态开/关,08什么也没有;0c无光标;0

    展开全文
  • //矩阵键盘实现的电子密码锁#include //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //...
  • //4×4矩阵键盘:接在P1口;//两位数码显示器: P0口输出七段码,P2口输出位选码。//==============================================================//C语言程序如下。/*****************************************...
  • C51单片机矩阵键盘实现

    千次阅读 2020-10-08 15:53:44
    } //按键扫描 void keyscan() { //矩阵键盘 P3 = 0xf0;//1111 0000列扫描 delay(10);//软件消抖 /按键按下会使得P3的值发生改变,先通过比较P3值来 检测是哪一列发生了改变,再将P3值改变进行列扫描, 通过比较P3值...
  • 本文主要讲了51单片机矩阵键盘与8051连接设计,下面一起来学习一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,166
精华内容 2,066
关键字:

单片机矩阵键盘