📄 1.txt
字号:
uchar keyscan()
{
key=0;
P3=0xfe;
temp=P3;
temp=temp$0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=2;
break;
case 0xde:
key=6;
break;
case 0xbe:
key=10;
break;
case 0x7e:
key=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp$0xf0;
}
}
}
P3=0Xfd;7
temp=P3;
temp=temp$0xf0;
if((temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
void main()
{
while(1)
{
uchar x,y,number,i;
key=keyscan();
if(key!=0)
{
if(key==13) //取消
{
x=0;y=0;number=0;
display2();
for(i=0;i<10;i++) //数组清
num[i]=0;
reset=0;
reset=1; //总复位
reset=0;
}
else if(key==12) //确认
{
num[number]=0;
hz=atol(num);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
#include<reg51.h>
#include<defi.h>
/* 用于键消抖的延时函数 */
void delay()
{
uchar t;
for (t=400;t>0;t--);
}
/* 键扫描函数 */
uchar keyscan(void)
{
uchar scancode,tmpcode;
P2 = 0xf0; // 发全0行扫描码
if ((P2&0xf0)!=0xf0) // 若有键按下
{
delay(); // 延时去抖动
if ((P2&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
{
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行扫描
{
P2 = scancode; // 输出行扫描码
if ((P2&0xf0)!=0xf0) // 本行有键按下
{
tmpcode = (P2&0xf0)|0x0f;
/* 返回特征字节码,为1的位即对应于行和列 */
return((~scancode)+(~tmpcode));
}
else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
}
}
}
return(0); // 无键按下,返回值为0
}
/* 主程序 */
void main()
{
uchar key;
while(1)
{
key = keyscan(); // 调用键盘扫描函数
delay();
switch(key)
{
case 0x11:
NUM0=1; // 第1行第1列,选择正弦波输出
break;
case 0x21: // 第1行第2列,选择矩形波输出
LIGHTA = 0;
LIGHTB = 0;
break;
case 0x41: // 第1行第3列,选择三角波输出
LIGHTA = 1;
LIGHTB = 0;
break;
default:break;
}
if(NUM0)
{ NUM0=0;
LIGHTA = 0;
LIGHTB = 1;
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
uchar rr;
uchar k;
uchar keydata;
void key_scan(void); //键盘函数定义段;
uchar key_tab(uchar k);
void delay(void);
void key_in(uchar k);
//---------------------------------------------------------------
void main(void)
{
while(1)
{
key_scan();
}
}//---------------------------------------------------------------------------------------------
void key_scan(void)
{ uchar sccode,recode,i;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
delay();
if((P1&0xf0) !=0xf0)
{
sccode=0xfe;
for(i=0;i<4;i++)
{
P1=sccode;
if((P1&0xf0) !=0xf0)
{
recode=(P1&0xf0)|0x0f;
k=(~recode)+(~sccode);
rr=P1;
key_in(k);
break;
}
else
sccode=(sccode<<1)|0x01;
}
}
}
//do {ta=P2;}while(ta==rr);
}
void delay() //去抖动
{int a=2500;
while(--a);
}
void key_in(uchar k)
{ uchar ta;
//uchar keydata;
do {ta=P1;}while(ta==rr);
keydata=key_tab(k);
}
//-------------------------------------------------------------
uchar key_tab(uchar k)
{ uchar kb;
switch(k)
{ case 0x11:kb=0x00;break;
case 0x21:kb=0x01;break;
case 0x41:kb=0x02;break;
case 0x81:kb=0x03;break;
case 0x12:kb=0x04;break;
case 0x22:kb=0x05;break;
case 0x42:kb=0x06;break;
case 0x82:kb=0x07;break;
case 0x14:kb=0x08;break;
case 0x24:kb=0x09;break;
case 0x44:kb=0x0a;break;
case 0x84:kb=0x0b;break;
case 0x18:kb=0x0c;break;
case 0x28:kb=0x0d;break;
case 0x48:kb=0x0e;break;
case 0x88:kb=0x0f;break;
default :kb=0x00;break;
}
return kb;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -