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

📄 44键盘延时.c

📁 按回复都快恢复的活动经费好地方方括号电话费开发好;飞好
💻 C
字号:
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp;
uint i;
sbit P00=P0^0; 
sbit P01=P0^1;
sbit P02=P0^2;
uchar code display[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code key[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};
uchar key_value;
bit key_flag;
uchar keyscan(void);
uchar forward();
uchar back();
uchar modeth();
uchar modefo() ;
uchar modefi() ;
uchar modesi() ;
uchar modese() ;
void delay_10us(uchar n)//10us延时
{
	do
	{
	_nop_();_nop_();_nop_();_nop_();_nop_();
	}
	while(--n);
}
void delay_ms(uint n)//毫秒延时
{
	do
	{
		delay_10us(131);
	}while(--n);
}
void main(void)
{  	
	uchar key;
    while(1)  
	{ 
	
   	key=keyscan(); //扫描键值
		
		if (key_flag)// 判断标志位
		{		
		   	key_flag=0;
	
			switch(key)
			{	 
			  	  
				case 0x11:forward();break;
				case 0x21:back();break;
				case 0x41:modeth();break;
				case 0x81:modefi();break;	  
				case 0x12:modefo();break;
				case 0x22:modesi();break;
				case 0x42:modese();break;
				case 0x82:P0=display[7];break; 
			   	case 0x14:P0=0x7e;break;
				case 0x24:P0=0xbd;break;
				case 0x44:P0=0xdb;break;
				case 0x84:P0=0xe7;break;
				case 0x18:P0=0x55;break;
				case 0x28:P0=0xaa;break;
 				case 0x48:P0=0x0f;break;
				case 0x88:P0=0xf0;break; 


				//default:P0=0xff;break;
			}	key_flag=0;
		}
	} 
}
uchar keyscan(void)//扫描按键函数
{
  uchar readkey;
  uchar rereadkey;
  uchar x_temp,y_temp;
  key_flag=0;
  x_temp=0x00;
  P1=0xf0;
  P1&=0xf0;
  y_temp=P1;
  y_temp&=0xf0;
  y_temp^=0xf0;
  if(y_temp==0xf0)return(0xff);
  P1=0x0f;
  P1&=0x0f;
  x_temp=P1;
  x_temp&=0x0f;
  x_temp^=0x0f;
  //if(x_temp==0xf0)return(0xff);
  readkey=x_temp|y_temp;
  delay_ms(10);
  x_temp=0x00;
  P1=0xf0;
  P1&=0xf0;
  y_temp=P1;
  y_temp&=0xf0;
  y_temp^=0xf0;
  if(y_temp==0xf0)return(0xff);
  P1=0x0f;
  P1&=0x0f;
  x_temp=P1;
  x_temp&=0x0f;
  x_temp^=0x0f;
  //if(x_temp==0xf0)return(0xff);
  rereadkey=x_temp|y_temp;
  if(readkey==rereadkey)
  {
   key_flag=1;
   return(readkey);
  }
}
uchar forward()
{
    temp=0xfe;
 //8个流水灯逐个闪动向左
    for(i=0;i<8;i++)		
		{P0=temp;
		delay_ms(100); //调用延时函数
		temp=_crol_(temp,1);
		 }
		return temp;
}
uchar back()
{
	temp=0x7f;
//流水灯向右逐个点亮
	for(i=0;i<8;i++)	
		{P0=temp;
		delay_ms(100); //调用延时函数
		temp=_cror_(temp,1);
		 }
		return temp;
}
uchar modeth()
{
    temp=0xfe;//向右依次点亮
    for(i=0;i<8;i++)		
		{P0=temp;
		delay_ms(100); //调用延时函数
		temp<<=1;
		 }
		return temp;
}
uchar modefo()
{
    temp=0x7f;//向左依次点亮
    for(i=0;i<8;i++)		
		{P0=temp;
		delay_ms(100); //调用延时函数
		temp>>=1;
		 }
		return temp;
}
uchar modefi()
{
    temp=0xfe;
    for(i=0;i<8;i++)		
		{P0=~temp;//向左依次熄灭
		delay_ms(100); //调用延时函数
		temp<<=1;
		 }
		return temp;
}
uchar modesi()
{
    temp=0x7f;
    for(i=0;i<8;i++)		
		{P0=~temp;
		delay_ms(100); //调用延时函数
		temp>>=1;
		 }
		return temp;
}
uchar modese()
{
    temp=0xfe;
    for(i=0;i<8;i++)		
		{P0=temp;
		delay_ms(100); //调用延时函数
		temp<<=1;}
    temp=0xfe;
	for(i=0;i<8;i++)		
		{P0=~temp;
		delay_ms(100); //调用延时函数
		temp<<=1;
		 }	 

		return temp;
}

⌨️ 快捷键说明

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