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

📄 key.c

📁 ds18b20的C语言使用范例
💻 C
字号:
#include <reg52.h>
#include <absacc.h>

#define uchar unsigned char
#define uint  unsigned int

#define COM8255 XBYTE[0x7fff]
#define PA8255 XBYTE[0x7cff]
#define PB8255 XBYTE[0x7dff]
#define PC8255 XBYTE[0x7eff]

//键盘编码
#define K06  0x81
#define K07  0x41
#define K16  0x82
#define K17  0x42
#define K26  0x84
#define K27  0x44
#define K36  0x88
#define K37  0x48

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;

uchar idata dis_buf[6]={0,1,2,3,4,5}; /*显示缓冲区*/
uchar code table[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                      0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
                      0x40,0x00};
void dl_ms(uchar d)
{
  while(d--);
}

void display(void)
{ uchar esgcode,bitcode,i;
  bitcode=0xfe;
  for(i=0;i<6;i++)
  { esgcode=dis_buf[i];
    PA8255=table[esgcode];
    PB8255=bitcode;
    dl_ms(100);
    bitcode=bitcode<<1;
    bitcode=bitcode|0x01;
  }
}
uchar keyscan(void)
{
 uchar code_h,code_l,temp,code_value;
 uint i;
 PC8255=0x00;
 temp=PC8255;
 temp&=0xc0;
 if(temp!=0xc0) //如果pc8255 pc.6,pc.7不全为1,可能有键按下
 	{
/* 	dl_ms(100);      //延时消抖
 	temp=PC8255;     //重读
    if(temp&0xc0!=0xc0)	//确实有键按下
    	{*/
    	code_h=0xfe;
	    for(i=0;i<4;i++)
	    	{
            PC8255=code_h;
			temp=PC8255;
			temp=temp&0xc0;
			if(temp!=0xc0)//该行有键按下
				{
				code_l=temp;
				code_value=(~code_h)|code_l;
				return(code_value);
				}
			code_h=(code_h<<1)|0x01;
	    	}
    	//}
 	}
 else return(0x00);
}

void shezhi(void)
{
uchar j;
j=keyscan();
while(j!=K07)      //K07是确认键
  {switch(j)
    {
     case K36:       //秒加        
	 	//P1_0=0;
	 	dis_buf[0]++;
		if(dis_buf[0]>9)
			{
			dis_buf[0]=0;
			dis_buf[1]++;
			if(dis_buf[1]>5)dis_buf[1]=0;
			}
		display();
		//P1_0=1;
		break;
     case K37:      //秒减
	 	P1_0=0;
	 	dis_buf[0]--;
		if(dis_buf[0]<0)
			{
			dis_buf[0]=9;
			dis_buf[1]--;
			if(dis_buf[1]<0)dis_buf[1]=0;
			}
		display();
	//	P1_0=1;
		break;
     case K26:     //分加
	 //	P1_1=0;
	 	dis_buf[2]++;
		if(dis_buf[2]>9)
			{
			dis_buf[2]=0;
			dis_buf[3]++;
			if(dis_buf[3]>5)dis_buf[3]=0;
			}
		display();
	//	P1_1=1;
		break;
     case K27:     //分减
	// 	P1_2=0;
	 	dis_buf[2]--;
		if(dis_buf[2]<0)
			{
			dis_buf[2]=9;
			dis_buf[3]--;
			if(dis_buf[3]<0)dis_buf[3]=0;
			}
		display();
	//	P1_2=1;
		break;
     case K16:       //时加
	 	dis_buf[4]++;
		if(dis_buf[4]>9)
			{
			dis_buf[4]=0;
			dis_buf[5]++;
			if(dis_buf[5]>5)dis_buf[5]=0;
			}
		display();
		break;
     case K17:     //时减
	 	dis_buf[4]--;
		if(dis_buf[4]<0)
			{
			dis_buf[4]=9;
			dis_buf[5]--;
			if(dis_buf[5]<0)dis_buf[5]=0;
			}
		display();
		break;
     default: display();
    }
   j=keyscan();
  }
}

void main(void)
{
  uchar data i;
  COM8255=0x88;  //8255初始化
//  P1=0;
  while(1)
  {
  
   i=keyscan();
   dis_buf[0]=i&0x0f;
   dis_buf[1]=(i>>4)&0x0f;
   display();
   	 
   if(i==K06) //K06是调整键
   	{
   	P1=0;
   	shezhi();
   	}
  }
}

⌨️ 快捷键说明

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