zoukankan      html  css  js  c++  java
  • 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上的短接片

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/YuQiao0303/p/9907458.html
Copyright © 2011-2022 走看看