⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 k1-k4-test.c

📁 单片机中LED显示/数码管显示/键盘控制/蜂鸣器输出/中断应用/定时器和计数器/串口通信/键控看门狗/数据交换
💻 C
字号:
/*******************************************************************
*                                                                  *
* ME500单片机开发系统演示程序 -  按键扫描程序                      *
*                                                                  *
* 作者:  伟纳电子 - Freeman                                        *
* 邮箱:  freeman@willar.com                                        *
* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界)  *
* 日期:  2004-1-5                                                  *
*                                                                  *
* 改编: gguoqing                                                  * 
* 版本: V1.1 (2006/11/20)                                         *
* 作者: gguoqing (Email: gguoqing@willar.com)                     *
*                                                                  *
*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved  *
*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!        *
*                                                                  *
********************************************************************
*                                                                  *
* 描述:                                                            *
*       按键扫描程序                                               *
*       上电时, 点亮P00口和P20口的LED                              *
*       按下K1时, P0口LED向右移一位                                *
*       按下K2时, P0口LED向左移一位                                *
*       按下K1时, P2口LED向右移一位                                *
*       按下K2时, P2口LED向左移一位                                *
*                                                                  *
*******************************************************************/

#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int

sbit	K1 = P1^4;
sbit	K2 = P1^5;
sbit    K3 = P1^6;
sbit    K4 = P1^7;

void delayms(uchar ms);
uchar scan_key();
void proc_key(uchar key_v);

/*********************************************************

 延时子程序

*********************************************************/
void delayms(unsigned char ms)	
{						
   unsigned char i;
   while(ms--)
   {
     for(i = 0; i < 120; i++);
   }
}

/********************************************************

 扫描健盘函数

********************************************************/
uchar scan_key()
{
	uchar key_s;
	key_s = 0x00;
    key_s |= K4;
	key_s <<= 1;
    key_s |= K3;
	key_s <<= 1;
	key_s |= K2;
	key_s <<= 1;
	key_s |= K1;
	return key_s;		
}

/********************************************************

 健功能函数

********************************************************/
void proc_key(uchar key_s)
{
	if((key_s & 0x01) == 0)
	{
	  P0 = _cror_(P0, 1);
	}
	else if((key_s & 0x02) == 0)
	{
	  P0 = _crol_(P0, 1);
	}
    else if((key_s & 0x04) == 0)
    {
      P2 =  _cror_(P2, 1);
    }
    else if((key_s & 0x08) == 0)
	{
	  P2 = _crol_(P2, 1);
	}
}

/*********************************************************

 主函数

*********************************************************/
main()
{
    uchar key_s,key_v;
	key_v = 0x0f;
	P0 = 0xfe;
    P2 = 0xfe;
	while(1)
	{
      key_s = scan_key();
	  if(key_s != key_v)
	  {
		delayms(10);         //延时去抖动
		key_s = scan_key();   //再次判健是否按下
		if(key_s != key_v)
		{	
		  key_v = key_s;
		  proc_key(key_s);					
		}
	  }
	}	
}

/********************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -