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

📄 main.c

📁 这里很详细地将了怎样编写一个4*4的行列扫描式键盘(它已经通过keil编译并使用)。该程序利用P1口作为行列扫描端口,它能够识别是否有多键按下
💻 C
字号:
/*************************************************************************************************************                  
**功能:行列扫描式键盘,键盘值通过串口传输给其他CPU。
**说明:这里很详细地将了怎样编写一个4*4的行列扫描式键盘(它已经通过keil编译并使用)。该程序		利用P1口作为行列扫描端口,它能够识别是否有多键按下,键是否已经松开。对于初学者来讲是	一个很好的源程序
**************************************************************************************************************/



#include"config.h"


bit is_sen;           /*是否要发送数据的标志*/
int8u data sen_data;  /*所要发送的数据*/
int8u bdata key,temp;
sbit key0=key^0;
sbit key1=key^1;
sbit key2=key^2;
sbit key3=key^3;
sbit temp0=temp^0;
sbit temp1=temp^1;
sbit temp2=temp^2;
sbit temp3=temp^3;


void delay50()
{
     int16u i=6000;
     while(i!=0)
     {
         i--;
     }
}


/*******************************************************
**名称:void sen_byte()
**功能:通过串口发送数据
**说明:通过设置发送标志和触发发送完毕中断来通知CPU要通
		过串口来发送数据。这样做的好处是可以提高CPU的工
		作效率。因为要发送数据是通过串口中断来把数据写
		到SBUF里,写完一个字节后就跳出。如果是发送一串
		数据的话,效率更加明显。
*******************************************************/
void sen_byte()
{
     is_sen=1;
     TI=1;
}


void sen() interrupt 4
{
     if(TI)
     {
         TI=0;
         if(is_sen==1)
         {  
              SBUF=sen_data;
              is_sen=0;
         }
     }
}

void main()
{
     is_sen=0;
     TMOD=0x20;
     SCON=0x50;
	 PCON=0;
     TH1=0xfd;
     TL1=0xfd;
     TR1=1;
     ES=1;
     EA=1;
     
     /************************************************
	 **以下是键盘扫描的程序。当发现有键按下时就读取键
	 **的位置值,然后编码并通过串口把键号送出去
	 ************************************************/
      for(; ;)
     {
         P14=0;
         P15=1;
         P16=1;
         P17=1;
         key0=P10;
         key1=P11;
         key2=P12;
         key3=P13;
         key&=0x0f;
         if(key!=0xf)
         {
             delay50();
             temp0=P10;
             temp1=P11;
             temp2=P12;
             temp3=P13;
             temp&=0x0f;
             if(key==temp)
             {
                  switch(key)
                  {
                      case 14:sen_data=1;break;
                      case 13:sen_data=5;break;
                      case 11:sen_data=9;break;
                      case 7:sen_data=13;break;
                      default:break;
                  }
                  sen_byte();
                  while(P10!=1||P11!=1||P12!=1||P13!=1);
             }
         }

         P14=1;
         P15=0;
         P16=1;
         P17=1;
         key0=P10;
         key1=P11;
         key2=P12;
         key3=P13;
         key&=0x0f;

         if(key!=0xf)
         {
             delay50();
             temp0=P10;
             temp1=P11;
             temp2=P12;
             temp3=P13;
             temp&=0x0f;
             if(key==temp)
             {
                  switch(key)
                  {
                      case 14:sen_data=2;break;
                      case 13:sen_data=6;break;
                      case 11:sen_data=10;break;
                      case 7:sen_data=14;break;
                      default:break;
                  }
                  sen_byte();
                  while(P10!=1||P11!=1||P12!=1||P13!=1);
             }
         }

         P14=1;
         P15=1;
         P16=0;
         P17=1;
         key0=P10;
         key1=P11;
         key2=P12;
         key3=P13;
         key&=0x0f;
         if(key!=0xf)delay50();
         temp0=P10;
         temp1=P11;
         temp2=P12;
         temp3=P13;
         temp&=0x0f;


         if(key!=0xf)
         {
             delay50();
             temp0=P10;
             temp1=P11;
             temp2=P12;
             temp3=P13;
             temp&=0x0f;
             if(key==temp)
             {
                  switch(key)
                  {
                      case 14:sen_data=3;break;
                      case 13:sen_data=7;break;
                      case 11:sen_data=11;break;
                      case 7:sen_data=15;break;
                      default:break;
                  }
                  sen_byte();
                  while(P10!=1||P11!=1||P12!=1||P13!=1);
             }
         }

         P14=1;
         P15=1;
         P16=1;
         P17=0;
         key0=P10;
         key1=P11;
         key2=P12;
         key3=P13;
         key&=0x0f;

         if(key!=0xf)
         {
             delay50();
             temp0=P10;
             temp1=P11;
             temp2=P12;
             temp3=P13;
             temp&=0x0f;
             if(key==temp)
             {
                  switch(key)
                  {
                      case 14:sen_data=4;break;
                      case 13:sen_data=8;break;
                      case 11:sen_data=12;break;
                      case 7:sen_data=16;break;
                      default:break;
                  }
                  sen_byte();
                  while(P10!=1||P11!=1||P12!=1||P13!=1);
             }
         }
    }  
}

















⌨️ 快捷键说明

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