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

📄 pmkguan.c.bak

📁 我的一个工程
💻 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 + -