视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
键盘接口实验实验报告及程序
2025-10-01 19:46:15 责编:小OO
文档
实验六  键盘接口实验

姓名  专业  通信工程  学号  成绩        

一、实验目的

1.掌握Keil C51软件与Protues软件联合仿真调试的方法;

2.掌握单片机的键盘接口电路;

3.掌握单片机键盘扫描原理;

4.掌握键盘的去抖原理及处理方法。

二、实验仪器与设备

1.微机1台  2.Keil C51集成开发环境  3。Proteus仿真软件

三、实验内容

1.用Proteus设计一矩阵键盘接口电路。要求利用P1口接一4*4矩阵键盘。串行口通过一74LS1接一共阴极数码管。参考电路见后面。

2.用线反转法编写矩阵键盘识别程序,要求采用中断方式(列线通过4输入与门74LS20接/INT0),无按键按下时,数码管循环画“8”;有按键按下时产生中断并将按键的键值0~F通过串行口输出,在数码管上显示3秒钟后返回;返回后,数码管继续循环画“8”。

3.将P1口矩阵键盘改为8个按键(用中断方式设计),键盘通过74LS30(8输入与非门)和74LS04(六反相器)与/INT0相连,重新编写识别和显示程序。

四、实验原理

矩阵键盘识别一般应包括以下内容:

1)判别有无键按下。

2)键盘扫描取得闭合键的行、列号。

3)用计算法火或查表法得到键值。

4)判断闭合键是否释放,如果没释放则继续等待。

5)将闭合键的键值保存,同时转去执行该闭合键的功能。

五、实验步骤

1.用Proteus设计键盘接口电路;

2.在Keil C51中编写键盘识别程序,编译通过后,与Proteus联合调试;

3.按动任意键,观察键值是否能正确显示。

六、电路设计及调试、程序

1)程序设计:矩阵键盘

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table1[]={0x00,0x01,0x21,0x61,0x65,0x6d,0x7d,0x7f};

uchar code key_table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//键盘表

uchar code table2[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint c)

{

 uint a,b;

for(;c>0;c--)

for(b=142;b>0;b--)

for(a=2;a>0;a--);

}

void  display(void)

{  

  uchar i;

  TI=0;

   while(1)

   {

for(i=0;i<8;i++)

    {

     SBUF=table1[i];

     delay(200);while(TI==0);TI=0;

    }

   }

}

void INT_0() interrupt 0

{

 uchar j,temp,num,key;

 EX0=0;

 delay(20);

 P1=0xf0;

 if(P1!=0xf0)

 {

  delay(20);

  if(P1!=0xf0)

  {

   temp=P1;

   P1=0x0f;

   key=temp|P1;

for(j=0;j<16;j++)

     

  if(key==key_table[j])              

    {

     num=j;break;

    }

    SBUF=table2[num];while(TI==0);TI=0;

    delay(1000); return;

   

  }

 }

 EX0=1;

 P1=0xf0; 

}

void  main( )

 EA=1;

 EX0=1;

 IT0=0;

 SCON=0x00;

 P1=0xf0;

 display();    

}

键盘

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table1[]={0x00,0x01,0x21,0x61,0x65,0x6d,0x7d,0x7f};//单管依次点亮画"8"

uchar code table2[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07};//共阴极"0"~"F"编码表

uchar i;

void delay(uint c)

{

 uint a,b;

for(;c>0;c--)

for(b=142;b>0;b--)

for(a=2;a>0;a--);

}

void main()

{

 EA=1;

 EX0=1;

 IT1=1;

 SCON=0X00;

 TI=0;

 while(1)

 {

for(i=0;i<8;i++)

  {

     SBUF=table1[i];

     delay(200);

  }

 }

 while(1);              

}

void INT_0() interrupt 0

{

 EX0=0;

 delay(20);

 EX0=1;

 if(P1!=0xff)

 {

  switch(P1)

  {

  case 0xfe:SBUF=table2[0];    while(!TI);

     TI=0;delay(1000);break;

  case 0xfd:SBUF=table2[1];    while(!TI);

     TI=0;delay(1000);break;

  case 0xfb:SBUF=table2[2];    while(!TI);

     TI=0;delay(1000);break;

  case 0xf7:SBUF=table2[3];    while(!TI);

     TI=0;delay(1000);break;

  case 0xef:SBUF=table2[4];    while(!TI);

     TI=0;delay(1000);break;

  case 0xdf:SBUF=table2[5];    while(!TI);

     TI=0;delay(1000);break;

  case 0xbf:SBUF=table2[6];    while(!TI);

     TI=0;delay(1000);break;

  case 0x7f:SBUF=table2[7];    while(!TI);

     TI=0;delay(1000);break;

  default:break;

  }

 }

}

2)实验电路

   矩阵键盘

键盘

七、实验问题、解决及总结 

1.实验中在做矩阵键盘实验时,会出现进入中断一次后跳出来再按键不会再进入中断显示的情况原因是:

没有在中断函数最后令P1=0xf0,在边沿触发方式下退出中断程序时P1=0xf,外部中断0为低电平,不会有下降产生,仅执行一次中断后再不会有中断产生,即使有按键按下。

2.实验中出现了进入中断跳不出来的情况,原因是:

给窗口送键值显示后没加while(!TI); TI=0;语句

总结:实验前应画出程序流程图认真分析,有助于程序的编写。在矩阵键盘的实验中,若选择电平触发,不在中断后令P1=0xf0,则跳出中断后检测到列线全为零,又产生中断,进入中断后扫描按键发现无按键按下又退出,列还是全为零又进入中断,如此反复,效率很低。下载本文

显示全文
专题