?? pmkguan.c.bak
字號:
#include <reg52.h>
#define a 0x01
#define b 0x02
#define c 0x04
#define d 0x08
#define e 0x10
#define f 0x20
#define g 0x40
#define dot 0x80
#define H 10
#define L 11
#define P 12
sbit sd=P2^ 7;
sbit sp=P3^ 5;
unsigned char set;
unsigned char KEY_Variable[3];
unsigned int tmep;
unsigned char code disp_code[] = {
a+b+c+d+e+f, // 0
b+c, // 1
a+b+d+e+g, // 2
a+b+c+d+g, // 3
b+c+f+g, // 4
a+c+d+f+g, // 5
a+c+d+e+f+g, // 6
a+b+c, // 7
a+b+c+d+e+f+g, // 8
a+b+c+d+f+g, // 9
b+c+e+f+g, //H
d+e+f, //L
a+b+e+f+g, //P
b+c+g, //+
g, //-
};
void sendbyte(unsigned char yte)
{ P2=0;
sd=1;
P0=disp_code[yte];
//sd=0;
}
void display(unsigned int i)
{ unsigned int k;
unsigned char j,m,q;
unsigned int s[6];
s[0] = i/10000;
k = i%10000;
s[1] = k/1000;
k = k%1000;
s[2] = k/100;
k = k%100;
s[3] = k/10;
k = k%10;
s[4] = k;
j=0x40;
q=2;
for(k = 0; s[k] == 0 && k<3; k++);
if (k==3) k--; // if all bytes are '0', get back one position
if(s[4]==0)
{
q--;
if(s[3]==0)q--;
}
do
{
if(k==2)
{
m=j>>4;
}
P2=(m|j);
P0=(disp_code[s[k++]]);
j>>=1;
}
while (k<3);
while(q&(j>0x0f))
{
P2=(m|j);
P0=(disp_code[s[k++]]);
j>>=1;
q--;
}
}
#define KEY_SET 0x07//設置鍵
#define KEY_UP 0x0b//向上鍵
#define KEY_DOEN 0x0d//向下鍵
#define KEY_RUN 0x0e//運行鍵
#define KEY_P1 P1
/***************************************************************************************************
函數名稱:KEY_JIEXI(unsigned int Variable)
函數入口:
unsigned int Variable :采集到的鍵盤值,就是P2、P3口的數值。
函數出口:
功能描述:鍵盤解析,通過采樣的數值分析出當前按下的是那個鍵。(包括復合鍵)并針對鍵進行相應的操作
關鍵點描述:無
****************************************************************************************************/
KEY_JIEXI(unsigned int Variable)
{
sp=0;
switch(Variable)
{
//單鍵。。。。
case KEY_RUN: //0x01運行鍵
set=0;
tmep=0;
break;
case KEY_DOEN: //0x02向下鍵
if(set)
set--;
else
set=14;
break;
case KEY_UP: //0x04向上鍵
if(set<14)
{ set++;
}
else
set=0;
break;
case KEY_SET: //0x07設置鍵
tmep=tmep+8;
break;
default:
break;
}
sp=1;
}
/***************************************************************************************************/
/***************************************************************************************************
函數名稱:KEY()
函數入口:空
函數出口:空
功能描述:鍵盤消抖
設計思想:
建立一個鍵盤值保存緩沖區KEY_Variable[3],能夠連續保存最近的三次采樣到的鍵盤值。當最后兩次采
樣到的值相等并且和倒數第三次的值不相等時,說明有按鍵按下。進行確認。當三次的采樣值都相等時,說
明此按鍵已經確認過了,不進行確認。
****************************************************************************************************/
KEY()
{
unsigned char key_buf;
KEY_Variable[2]=KEY_Variable[1];
KEY_Variable[1]=KEY_Variable[0];
EA = 0;
key_buf=KEY_P1;
KEY_Variable[0] =key_buf&0xc0;
KEY_Variable[0] >>=4;
KEY_Variable[0]|=(key_buf&0x03);
if(KEY_Variable[0] == KEY_Variable[1])
{
if(KEY_Variable[1] == KEY_Variable[2])
{
return;
}
else
{
KEY_JIEXI(KEY_Variable[0]); //分析按下的是什么鍵,并做相應的處理。
}
}
return;
}
void main(void){ /* SCON = 0x52; // 8-bit UART mode TMOD = 0x20; // timer 1 mode 2 auto reload TH1= 0xfd; // 9600 8n1 //TR1 = 1; // run timer1*/
P1=0xff;
P0=0x00;
P2=0xff;
while(1)
{
KEY();
sendbyte(set);
display(tmep);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -