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

📄 加入串口的按键.c

📁 功能按键
💻 C
字号:
#include"reg51.h"														
#include"absacc.h"
#include"stdio.h"
#include"string.h"
#define uchar unsigned char
#define unit unsigned int
//#define INBUF_LEN 1 
unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9代码 
unsigned char code shibie[8]={0x98,0x8c,0xb6,0x86,0xc6,0xc7,0x88,0x89};//符号q,p,三,E,【,L
uchar key_moshi=2;   //模式按键 
uchar key_up=2;    //上调按键 
uchar key_down=2;   //下调按键 
uchar key_queren=2;  //确认按键 
int queren_flag=0;	//确认标志  
int moshi_flag=0;  //  模式标志 
int key_first_flag=-1;  //开机显示标志位 
int moshi1[3],moshi2[3];
sbit ge=P2^4;
sbit shi=P2^5;
sbit bai=P2^6;
sbit fuhao=P2^7;

/******************************
串口发送接收函数 
**********************************/
void init_serialcomm(void)
{
 SCON=0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
 TMOD=0x20;       //TMOD: timer 1, mode 2, 8-bit reload
 PCON=0x00;       //SMOD=1;
 TH1=253;       //Baud:9600  fosc=12.0MHz
 IE=0x90;       //Enable Serial Interrupt
  TR1=1;          // timer 1 run
 //  TI=1;
}
	 
					 
/***************************
*******延时程序 ************
***************************/
void delay1(int time)
{  int j=0,i=0;
  for(j=0;j<time;j++)
  {for(i=0;i<10;i++);}
  }


/*********************************************
*****读按键 *******************************
***********************************************/
void read_key(void)
{ if(P2&0X01!=0X01)
   {delay1(153);
    if(P2^0==0)
	{
	key_moshi=0;
	}
	}
	 if(P2&0X02!=0X02)
	 { delay1(153);
	   if(P2^1==0)
	   {key_up=0;}
	 }
	 if(P2&0X04!=0X04)
	{delay1(153);
	 if(P2^2==0)
	 { key_down=0;}
	 }
	 if(P2&0X08!=0X08)
	{delay1(153);
	 if(P2^3==0)
	  {
	  
	  key_queren=0;}
	  }
	 
  }
/*******************************************
**************模式选择 ********************
******************************************/
   void moshi_set(void)
  {	 
    if(key_moshi==0)
	 { key_first_flag=1;
	   key_moshi=1;	   
	   delay1(153);
	   moshi_flag++;
       if(moshi_flag>3)
	   {moshi_flag=0;}
	 }
   }
/********************************************
***********模式1设置, 增加,减少 ****************
**********************************************/
   void key_up_moshi1(void)
   {
     if(key_up==0&&moshi_flag==1&&queren_flag==0)  //上升 
	   { key_up=0;
	     delay1(2);
		 moshi1[1]++;
		 if(moshi1[1]>=10)
		 { moshi1[1]=0;}
		}
	 }

   void key_down_moshi1(void)
    {
	  if(key_down==0&&moshi_flag==1&&queren_flag==0)  //下调 
	   { key_down=1;
	   delay1(2);
	   moshi1[1]--;
	   if(moshi1[1]<0)
	   { moshi1[1]=9;}
	   }
     }

/************************************U*
************模式2设置,增加,减少 ******
***********************************/
  void key_up_moshi2(void)
      {
     if(key_up==0&&moshi_flag==2&&queren_flag==0)  //上升 
	   { key_up=0;
	     delay1(2);
		 moshi1[2]++;
		 if(moshi1[2]>=10)
		 { moshi1[2]=0;}
		}
	 }

   void key_down_moshi2(void)
    {
	  if(key_down==0&&moshi_flag==2&&queren_flag==0)  //下调 
	   { key_down=1;
	   delay1(2);
	   moshi2[1]--;
	   if(moshi2[1]<0)
	   { moshi2[1]=9;}
	   }
     }

/*************************************************
***************确认按键 *****************************
*************************************************/
   void key_queren_flag(void)
   {
     if(key_queren==0)
	 { delay1(5);
	 key_first_flag=1;
	   key_queren=1;
	   queren_flag++;
	   if(queren_flag>1)
	   {queren_flag=0;}
	 }
	}

/*******************************************************
*********************显示 *******************************
************************************************************/
  void display()
  {
    /**********************
	开机显示 
	***************************/
  	if(key_first_flag==-1)
	 { P0=dis[2];
	   P2=0X7F;
	   delay1(5);
	   P2=0XFF;
	   P0=dis[3];
	  P2=0XBF;
	   delay1(5);
	   P2=0XFF;
	   P0=dis[4];
	  P2=0XDF;
	   delay1(5);
	   P2=0XFF;
	   P0=dis[5];
	  P2=0XEF;
	   delay1(5);
	   P2=0XFF;
	 }	 
  /**************************************
          模式1显示 	  符号显示 q
 ****************************************/
   if(moshi_flag==1)
  	{
	  P0=shibie[0];
	  P2=0X7F;
	  delay1(5);
	  P2=0XFF;
	  P0=dis[moshi1[1]];
	 P2=0XEF;
	  delay1(5);
	  P2=0XFF;
	}  

  /*********************************
        模式2显示 符号显示 E
************************************/
 if(moshi_flag==2)
   {
     P0=shibie[3];
	 P2=0X7F;
	 delay1(5);
	 P2=0XFF;
	 P0=dis[moshi2[1]];
	 P2=0XEF;
	 delay1(5);
	 P2=0XFF;
	}	 
 /**************************
   正常状态显示 0123
********************************/
 if(moshi_flag==0&&key_first_flag!=-1)
   {
     P0=dis[0];
	 P2=0X7F;
	 delay1(5);
	 P2=0XFF;
	 P0=dis[1];
	 P2=0XEF;
	 delay1(5);
	 P2=0XFF;
	 P0=dis[2];
	 P2=0XDF;																			   
	 delay1(5);
	 P2=0XFF;
	 P0=dis[3];
	 P2=0XBF;
	 delay1(5);
	 P2=0XFF;
	 }		
 }

 /*********************************
   主程序  
****************************************/
  void main()
 {
  int mam=1;
  P2 = 0XFF;
 init_serialcomm();  //初始化串口 

  while(1)
  {
     read_key();
	
//	 SBUF=P2;

//	if((P2&0X0F)!=0X0F)  
//	 {SBUF=P2;}	
	 moshi_set();
//	 SBUF=key_moshi;
/*	 switch(moshi_flag)
	 {
	  case 1:SBUF=1;break;
	  case 2:SBUF=2;break;
	  case 3:SBUF=3;break;
	  default :break;
	  }	 */
	 key_queren_flag();
	 key_up_moshi1();
	 key_down_moshi1();
	 key_up_moshi2();
	 key_down_moshi2();
	 display();
	}

 }


	   

⌨️ 快捷键说明

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