• C51 矩阵按键 个人笔记


    矩阵按键

    电路

    每个按键一端和同行一端相连(JP4的高4位),另一端和同列一端相连(JP4的低4位)

    判断按键是否按下:

    法一:逐行扫描

    for(int i = 8 ; i>3 ; i-- )
    	{
    		JP4^i = 0;
    		If ( 低四位不全为1)
    			低四位为0的那一列,第i行 的按键被按下
    }
    

    法二:行列扫描

    完整代码:

    #include <reg51.h>
    typedef unsigned int u16;		 
    typedef unsigned char u8;
    #define delaytime 50000000
    #define GPIO_DIG P0
    #define GPIO_KEY P1
     							  
    //这里用的静态数码管是共阳的
    
     //RAM 占用少,存在flash 里面:code
     //共阴的表
    u8 code ledSegment  [16] = {0x3f,	0x06,	0x5b,	0x4f,	0x66,	0x6d,
    						0x7d,	0x07,	0x7f,	0x6f,	0x77,
    						0x7c,	0x39,	0x5e,	0x79,	0x71};
    u8 KeyValue=0;
    void delay(u16 i)
    {
    	while(i--);
    }
    void KeyDown()
    {
    	char a = 0;
    	GPIO_KEY = 0x0f;  //高四位低电平,第四位高电平
    	if(GPIO_KEY!= 0x0f)
    	{
    		delay(1000);
    		if(GPIO_KEY!= 0x0f)
    		{
    			//--------------------------求列数----------------------------------//
    			switch(GPIO_KEY)
    			{
    				case(0x07):	 KeyValue = 0; break;		//0000 0111  : 第一列
    				case(0x0b):	 KeyValue = 1; break;		//0000 1011  : 第二列
    				case(0x0d):	 KeyValue = 2; break;		//0000 1101  : 第三列
    				case(0x0e):	 KeyValue = 3; break;		//0000 1110  : 第四列
    			}
    			//--------------------------求行数----------------------------------//
    			GPIO_KEY = 0xf0;  //高四位高电平,第四位低电平	
    			switch(GPIO_KEY)
    			{
    				case(0x70):	 KeyValue += 0; break;	  //第一行	
    				case(0xb0):	 KeyValue += 4; break;		
    				case(0xd0): KeyValue += 8; break;		
    				case(0xe0):	 KeyValue += 12; break;		//第四行
    			}
    			//退出条件:按键松开或超过
    			while((a<50)&&(GPIO_KEY!= 0xf0)) 		 //	  GPIO_KEY!= 0xf0 说明按键还没松
    			{
    				delay(1000);
    				a++; 
    			}
    		}
    	}
    }
    
    void main(void)
    {
    	
    	while(1)
    	{
    	 	 KeyDown();
    		 //KeyValue = 1;
    		 GPIO_DIG = ~ledSegment[KeyValue];
    	}
    }
    

    接线

    在普中科技的开发试验仪上,注意矩阵按键和P1端口的排线要反接,同事可能要拔掉74HC165上的短接片

  • 相关阅读:
    体验js之美第八课-面向对象创建和继承终结篇
    从零到一:用Phaser.js写意地开发小游戏(Chapter 3
    HTML5 进阶系列:拖放 API 实现拖放排序
    五款轻量型bug管理工具横向测评
    用原生js写一个"多动症"的简历
    HTML5中新增Javascript特性
    Angular2入门系列(五)———— 路由参数设置
    移动端真机调试实战经验
    Java经典习题44
    Java经典习题43
  • 原文地址:https://www.cnblogs.com/YuQiao0303/p/9907458.html
Copyright © 2020-2023  润新知