📄 key.c
字号:
//============================
//绕线机程序
//键盘扫描
//蜂鸣器子程序
//============================
#ifndef __key_c_
#define __key_c_
#include "included.h"
//===========================
uchar ks1(void)
{
uchar temp;
P1 &=0X00;
P3 |=0X07;
_nop_();
_nop_();
temp = P3;
if((~temp) & 0x07) //note ~ and !
return 1;
else
return 0;
}
//=====================
////1表示有键按下,0表示没有键按下
//=====================
uchar ks0(void)
{
uchar temp;
P1 &=0X00;
P3 |=0X07;
_nop_();
_nop_();
temp = P3;
if((~temp) & 0x07) //note ~ and !
return 1;
else
return 0;
}
//====================================
//没键按下等待,有键按下,返回按键值
//====================================
uchar key(void)
{
uchar scan_code=0xfe;
uchar key_val=00;
uchar time_0 =0x00;
jxkey:
do{ //检测按键是否被按下
while(ks0()==0);
delay_1ms(20);//消抖动
}while(ks0()==0);
scan_code=0xfe;
for(time_0=0;time_0<8;time_0++)
{
P1 = scan_code;
P3 |= 0X07;
_nop_();
_nop_();
_nop_();
if( P3_0 == 0)
{
key_val=time_0; //0-7key
break;
}
if( P3_1 == 0)
{
key_val=time_0+0x08; //8-15key
break;
}
if( P3_2 == 0)
{ //16 key=stop key
key_val=0x10;
break;
}
scan_code = scan_code<<1;
}
if(key_val>0x10)
goto jxkey;
else
do{
while(ks0()==1);
delay_1ms(20);//消抖动
//等待按键弹起
}while(ks0()==1);
return (key_val);
}
//========================
uchar key_123(void)
{
uchar scan_code=0xfe;
uchar key_val=00;
uchar time_0 =0x00;
scan_code=0xfe;
for(time_0=0;time_0<8;time_0++)
{
P1 = scan_code;
P3 |= 0X07;
_nop_();
_nop_();
_nop_();
if( P3_0 == 0)
{
key_val=time_0; //0-7key
break;
}
if( P3_1 == 0)
{
key_val=time_0+0x08; //8-15key
break;
}
if( P3_2 == 0)
{ //16 key=stop key
key_val=0x10;
break;
}
scan_code = scan_code<<1;
}
return (key_val);
}
//========================
void delay_1ms(uint t)
{
uint i,j;
for(j=0;j<t;j++)
for(i=0;i<300;i++)
;
}
//=============================
void speak(void)
{
P3_5 = 0;
delay_1ms(150);
P3_5 = 1;
}
//================================
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -