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

📄 keyscan.c

📁 AVR的UCO/S-II
💻 C
字号:
#include "config.h" 
unsigned char ksp=0;

const unsigned long keyscan1=(1<<10);	// P0.10键盘扫描输出1 
const unsigned long keyscan2=(1<<11);	// P0.11键盘扫描输出2 
const unsigned long keyscan3=(1<<12);	// P0.12键盘扫描输出3 
const unsigned long keyscan4=(1<<13);	// P0.13键盘扫描输出4
const unsigned long keyscan[4]={keyscan1,keyscan2,keyscan3,keyscan4};
const unsigned long keyin1=(1<<16);	    // P0.16键盘扫描输入1 
const unsigned long keyin2=(1<<14);	    // P0.14键盘扫描输入2 
const unsigned long keyin3=(1<<15);	    // P0.15键盘扫描输入3 
const unsigned long keyin4=(1<<9);	    // P0.9键盘扫描输入4
unsigned long err;
extern OS_EVENT *dispsem;
 unsigned long key_scan(void)
{  
   
   unsigned long k=0;
                                 // 设置扫描输出脚为高电平	//
   IO0SET |= keyscan1|keyscan2|keyscan3|keyscan4;
   IO0CLR |= keyscan[ksp];		 // 轮流使扫描线变低电平   //
   __nop();						 // 等待IO口稳定   //
   __nop();
   __nop();	
                                 // 读取keyin IO口	  //
   k = IO0PIN&(keyin1|keyin2|keyin3|keyin4);
                                 // 判断是否有按键按下	//
   k|=0x80000000;
   if(k!=keyin1+keyin2+keyin3+keyin4+0x80000000)
   {
    err = OSSemPost(dispsem);
    if((k&keyin1)==0)k=0;
	else if((k&keyin2)==0)k=4;
	else if((k&keyin3)==0)k=8;
	else if((k&keyin4)==0)k=12;
	else k=17;
   }
   k+=ksp;
   ksp++;
   if(ksp==4)ksp=0;  
   return k;
}

⌨️ 快捷键说明

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