《2022年2022年键盘接口实验实验报告及程序 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年键盘接口实验实验报告及程序 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验六键盘接口实验姓名专业通信工程学号成绩一、实验目的1. 掌握 Keil C51 软件与 Protues 软件联合仿真调试的方法;2. 掌握单片机的键盘接口电路;3. 掌握单片机键盘扫描原理;4. 掌握键盘的去抖原理及处理方法。二、实验仪器与设备1. 微机 1 台 2.Keil C51集成开发环境 3 。Proteus 仿真软件三、实验内容1. 用 Proteus 设计一矩阵键盘接口电路。 要求利用 P1口接一 4*4 矩阵键盘。串行口通过一 74LS164接一共阴极数码管。参考电路见后面。2. 用线反转法编写矩阵键盘识别程序,要求采用中断方式(列线通过4 输入与门 74LS20接/INT0
2、 ) ,无按键按下时,数码管循环画“8”;有按键按下时产生中断并将按键的键值0F通过串行口输出,在数码管上显示3 秒钟后返回;返回后,数码管继续循环画“8”。3. 将 P1口矩阵键盘改为8 个独立按键 (用中断方式设计), 键盘通过 74LS30(8 输入与非门)和74LS04 (六反相器)与 /INT0 相连,重新编写识别和显示程序。四、实验原理矩阵键盘识别一般应包括以下内容:1)判别有无键按下。2)键盘扫描取得闭合键的行、列号。3)用计算法火或查表法得到键值。4)判断闭合键是否释放,如果没释放则继续等待。5)将闭合键的键值保存,同时转去执行该闭合键的功能。五、实验步骤1.用 Proteus
3、 设计键盘接口电路;2.在 Keil C51中编写键盘识别程序, 编译通过后, 与 Proteus 联合调试;3.按动任意键,观察键值是否能正确显示。六、电路设计及调试、程序1)程序设计: 矩阵键盘#include #define uchar unsigned char #define uint unsigned int uchar code table1=0 x00,0 x01,0 x21,0 x61,0 x65,0 x6d,0 x7d,0 x7f; uchar code key_table=0 xee,0 xde,0 xbe,0 x7e,0 xed,0 xdd,0 xbd,0 x7d,0
4、xeb,0 xdb,0 xbb,0 x7b,0 xe7,0 xd7,0 xb7,0 x77;/键盘表uchar code table2=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - void delay(uint c) uint a,b
5、; for(;c0;c-) for(b=142;b0;b-) for(a=2;a0;a-); void display(void) uchar i; TI=0; while(1) for(i=0;i8;i+) SBUF=table1i; delay(200);while(TI=0);TI=0; void INT_0() interrupt 0 uchar j,temp,num,key; EX0=0; delay(20); P1=0 xf0; if(P1!=0 xf0) delay(20); if(P1!=0 xf0) temp=P1; P1=0 x0f; key=temp|P1; for(j=
6、0;j16;j+) if(key=key_tablej) num=j;break; SBUF=table2num;while(TI=0);TI=0; delay(1000); return; EX0=1; P1=0 xf0; void main( ) EA=1; EX0=1; IT0=0; SCON=0 x00; P1=0 xf0; display(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 独立键盘#include
7、#define uchar unsigned char #define uint unsigned int uchar code table1=0 x00,0 x01,0 x21,0 x61,0 x65,0 x6d,0 x7d,0 x7f;/ 单管依次点亮画 8 uchar code table2=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07;/ 共阴极 0F 编码表uchar i; void delay(uint c) uint a,b; for(;c0;c-) for(b=142;b0;b-) for(a=2;a0;a-); void ma
8、in() EA=1; EX0=1; IT1=1; SCON=0X00; TI=0; while(1) for(i=0;i&1D1324561081112913U174LS164C11uFR1710k12456U3:A74LS21名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 七、实验问题、解决及总结1. 实验中在做矩阵键盘实验时, 会出现进入中断一次后跳出来再按键不会再进入中断显示的情况原因是:没有在中断函数最后令P1=0 xf
9、0, 在边沿触发方式下退出中断程序时P1=0 xf,外部中断 0 为低电平,不会有下降产生, 仅执行一次中断后再不会有中断产生,即使有按键按下。2. 实验中出现了进入中断跳不出来的情况,原因是:给窗口送键值显示后没加while(!TI); TI=0;语句总结: 实验前应画出程序流程图认真分析,有助于程序的编写。在矩阵键盘的实验中,若选择电平触发,不在中断后令P1=0 xf0,则跳出中断后检测到列线全为零,又产生中断,进入中断后扫描按键发现无按键按下又退出,列还是全为零又进入中断,如此反复,效率很低。S5S0S1S2S3S4P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7S6S6
10、S5S4S3S2S1S0XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427R41nFR322pFX1CRYSTALSRG8RC1/-&1D1324561081112913U174LS164C11uFR1710k12U2:A74LS0412345611128U374LS30R110kR210kR510kR610kR710kR810kR910kR1010k名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -