2022年2022年键盘接口实验报告 .pdf
实验六 键盘接口实验姓名:专业:通信工程学号:成绩:一:实验目的1 掌握 keil c51 和 proteus 软件联合仿真调试的方法;2 掌握单片机的键盘接口电路3 掌握单片机键盘扫描的原理4 掌握键盘的去抖原理与处理方法二:实验内容1.用 proteus设计一个接盘接口电路,要求利用P1 口接 4*4 矩阵键盘,通过74ls164 接一个共阴的数码管2.用中断方式编写程序,要求无按键按下时,数码管循环画8,有按键按下时产生中断显示按键值0-f 通过串行口输出,在数码管上显示3 秒后返回,数码管继续画8。3.将 P1 口接 7 个独立按键,要求用定时扫描的方式检测按键,并显示按键值,其中要求第七个开关计数。三:实验原理及步骤实验步骤1.用 proteus设计键盘接口电路;2.在 keil c51 中编写控制程序,编译通过后,与proteus 联合调试;3.按动任意键,观察键是否能显示正确。实验原理说明矩阵键盘识别一般应包括一下几个内容:1 判别有无按键按下2 键盘扫描取得闭合的行列值3 用计算法或查表法得到按键值4 判断闭合键是否释放,如没释放则继续等待5 将闭合键的按键值保存,同时转去执行该闭合键的功能四:电路设计及调试1.程序:(1)矩阵键盘:#include #define uchar unsigned char #define uint unsigned int uchar temp,key,num,n; uchar code table1=0 x01,0 x21,0 x61,0 x65, 0 x6d,0 x7d,0 x7d,0 x7f; 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; uchar code KEY_TABLE=0 xee,0 xde,0 xbe,0 x7e, 0 xed,0 xdd,0 xbd,0 x7d, 0 xeb,0 xdb,0 xbb,0 x7b, 0 xe7,0 xd7,0 xb7,0 x77; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - void delayMs(uint k) uint i,j; for(i=k;i0;i-) for(j=110;j0;j-); void INT_0() interrupt 0 EX0=0; delayMs(20); EX0=1; P1=0 xf0; if(P1!=0 xf0) delayMs(20); if(P1!=0 xf0) temp=P1; P1=0 x0f; key=P1|temp; for(n=0;n16;n+) if(key=KEY_TABLEn) num=n;break; SBUF=table2num; while(!TI); TI=0; delayMs(3000); P1=0 xf0; void main() uchar m; SM0=0; SM1=0; EA=1; EX0=1; IT0=1; P1=0 xf0; while(1) for(m=0;m=7;m+) SBUF=table1m; while (TI=0); TI=0; delayMs(500); (2)独立键盘:#include #define uchar unsigned char #define uint unsigned int bit flag; uchar key,num,n,m; uchar code table1=0 x01,0 x21,0 x61,0 x65, 0 x6d,0 x7d,0 x7d,0 x7f; 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; uchar code KEY_TABLE=0 xfe,0 xfd,0 xfb,0 xf7, 0 xef,0 xdf,0 xbf,0 x7f,; void delayMs(uint k) uint i,j; for(i=k;i0;i-) for(j=110;j0;j-); void T_1() interrupt 3 TH1=(65536-10000)/256; TL1=(65536-10000)%256; if(P1!=0 xff) delayMs(20); if(P1!=0 xff&flag=0) key=P1; for(n=0;n8;n+) if(key=KEY_TABLEn) num=n;break; if(num=7) SBUF=table2m+; if(m=7) m=0; else SBUF=table2num; flag=1; while(!TI); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - TI=0; delayMs(1000); else flag=0; void main() uchar m; SM0=0;SM1=0; EA=1; ET1=1;TR1=1; TH1=(65536-10000)/256; TL1=(65536-10000)%256; TMOD=0 x10; while(1) for(m=0;m&1D1324561081112913U274LS16438121 24 56U3:A74LS21402名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - 0201070406060504030203050701XTAL218XTAL119ALE30EA31PSEN29RST9P0.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/A1427U1AT89C51net=024C122pfC222pfX1CRYSTALC320uFR11kSRG8RC1/-&1D1324561081112913U274LS1642.调试(一)矩阵键盘程序调试1 加载程序,点击仿真按钮;2 程序出现乱码, 分析发现74LS164 与数码管的高低位相连,但和编码的高低位不匹配,重新编码;3 调试矩阵键盘时,中断不执行,主函数没给P1 口赋值,中断函数里if 语句无法执行,在主函数里给P1 口赋值后,中断函数里可以显示按键值零,其他的键值不显示;4 分析后发现应在中断里给P1 口赋值,则键值正常显示;(二)独立键盘程序调试1 加载程序,点击仿真按钮;2 显示键值零后,只中断,不再显示键值,分析程序发现中断函数后面没给flag 赋值,执行一次按键后, if 语句不再满足条件,给flag 赋零后,可正常显示。3.实验结果及分析(一)矩阵键盘无中断时,正常画8,中断产生时,可正确显示键值。(二)独立键盘无中断时,正常画8,中断产生时,按按键06 正确显示键值,按按键7 逐次加 1。五:实验后的经验总结1 学习完理论知识后,通过实验可以发现新的问题,会对所学的知识有所思考,从而对所学知识理解并掌握。2 通过本次实验我理解了键盘的线反转法,定时扫描法,更加深刻地体会了for 循环和 if 语句的用法。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -