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

📄 key.c

📁 键盘扫描完整c程序
💻 C
字号:
 //连线方式:按键依次接P1.0~P1.3 ;P3.0接静态显示的DATA,P3.1接静态显示的CLK
 //实现功能:初始化时显示0000,每按下set键从右到左依次闪,当按下inc时,该位加一,当按下dec时,该位减一。当按下reset时,显示0000
 #include <reg51.h>
 #include <intrins.h>
 #define uchar unsigned char	 
 #define uint unsigned int	  
 sbit inc=P1^0;
 sbit dec=P1^1;
 sbit set=P1^2;
 sbit reset=P1^3;
 uchar data table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
 uint c,d;
 uchar led[4];
 uchar min,hour,a;
 uchar key;
 
//---------延时8us子程序-----//
 void delay8(uint t)
 {
 
  while(--t);
 
 }

 //--------延时50ms子程序-----//

 void delay50ms(uint t)
{
 uint j;
 for(;t>0;t--)
 for(j=6245;j>0;j--);
} 




 //---------显示程序------//

void display(void) 
{
  uchar j;
  for(j=0;j<4;j++)
  {
   SBUF=led[j];
   while(TI==0);
   TI=0;
   
  }
  }

  //-------更新程序-----//
  void update(void)
  {
   
   led[0]=table[min%10];
   led[1]=table[min/10]; 
   led[2]=table[hour%10];
   led[3]=table[hour/10];
  
  }
  //--------初始化显示程序-----//
 void initdis(void)
 {

  min=0;
  hour=0;
  update();				     //初始化显示0000
  display();
 
 }

 //----------定时器与串口初始化程序-------//
 void init(void)
 {
  SCON=0x00;		 //串口方式0,允许发送
  TMOD=0x01;         //定时器0,方式1
  TH0=0x3c;			 //定时50ms
  TL0=0xaf;
  EA=1;				 //开中断允许位
  ET0=1;			 //开定时器T0中断允许位 
  TF0=0;			 //定时器0中断标志位清零
  TR0=1;			 //	定时器开始计数
 
 
 } 

 
 //-----按键扫描子程序-------//
uchar scankey(void)
{
  uchar k;
  k=P1&0x0f;
  if(k==0x0f)	return (0);	     //如果没有按键按下则返回 0
  else
  {
    delay8(2000);				 //延时去抖
    if(k==0x0f)  return(0);
	else if(k==0x0e) return (1); //
	else if(k==0x0d) return (2);
	else if(k==0x0b) return (3);		 
	else if(k==0x07) return (4);
  }


}



 //--------按键处理程序-----//
 void keyprocess(void)
 {
   if(key==3)
   {
     led[d%4]=0x00;
  // switch(key)
     //{
   	//  case 1:
   	 // case 2:
   	 // default:
    // }

   }
   else if(key==4)
   {
    initdis();
   }

 
 }


 //--------主函数------------//
void  main(void)
{
 
 a=0;
 c=0;
 d=0;
 min=0;
 hour=0;
 init();
 update();
 display();
 while(1)
  {
  key=scankey();
  keyprocess();
  }
 //display(); 
 }


 //---------中断服务程序-------//
void time0(void) interrupt 1	  
{
  
  TH0=0x3c;
  TL0=0xaf;
  TR0=1;
  a++;
  c++;	
  if(a==10)
  {
    a=0;
	led[2]=led[2]^0x01;
	display();
  }
    if(c==20)
  {
     c=0;
     min++;
	 if(min==60)
	 {
	  min=0;
	  hour++;
	  if(hour==12)
	  {
	   hour=0;
	  }
	 
	 
	 }
	  update();
	   display();  
  }
  
}

⌨️ 快捷键说明

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