文档详情

单片机键盘接口实验.doc

发布:2018-07-02约2.97千字共4页下载文档
文本预览下载声明
实验六 键盘接口实验 一、实验目的 1、掌握Keil C51软件与Protues软件联合仿真调试的方法; 2、掌握单片机的键盘接口电路; 3、掌握单片机的键盘扫描原理; 4、掌握键盘的去抖原理及处理方法。 二、实验仪器与设备 1、微机 一台 2、Keil C51集成开发环境 3、Protues仿真软件 三、实验内容 1、用Protues设计一矩阵键盘接口电路。要求利用P1口接一4×4矩阵键盘。串行口通过一74LS164接一共阴极数码管。用线反转法编写矩阵键盘识别程序,用中断方式,并将按键的键值0-F通过串行口输出,显示在数码管上。 2、将P1口矩阵键盘改成8个独立按键,重新编写识别和显示程序。 四、实验说明 矩阵键盘识别一般包括以下内容: ⑴判别有无键按下。 ⑵键盘扫描取得闭合键的行、列号。 ⑶用计算法或查表发的到键值; ⑷判断闭合键是否释放,如没释放则继续等待。 ⑸将闭合键的键值保存,同时转去执行该闭合键的功能。 五、实验步骤 1、用Protues设计键盘接口电路; 2、在Keil C51中编写键盘识别程序,编译通过后,与Protues联合调试; 3、按动任意键,观察键值是否能正确显示。 六、实验电路仿真图 矩阵键盘电路图见附录1。 独立按键电路图见附录2。 七、实验程序 实验程序见附录3、4。 八、实验总结 1、矩阵键盘常用的检测方法有线反转法、逐行扫描法。线反转法较简单且高效。在矩阵键盘的列线上接一与门,利用中断方式查询按键,可提高CPU的运行效率。 2、注意用线反转法扫描按键时,得到的键值不要再赋给temp,最好再设一新变量接收键值,否则再按下按键显示数字的过程中,再按按键会出现乱码。 3、学会常用与门、与非门的使用方法。 附录1:矩阵键盘实验电路图 附录2:独立按键实验电路图 附录3:矩阵键盘实验程序 #include REG51.H char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; char code KEY_TABLE[]={0xee,0xde,0xbe,0x7e, 0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b, 0xe7,0xd7,0xb7,0x77}; char code tab1[10]={0xfe,0xde,0x9e,0x9a, 0x92,0x82,0x82,0x80,0xff}; char temp,num,i,m; int t; bit flag=0; void Delay_ms(t) { int i; for(;t0;t--) for(i=0;i124;i++); } void main(void) { TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; ET0=1; PT0=1; SCON=0; EX0=1; IT0=1; EA=1; P1=0xf0; while(1) { SBUF=tab1[m]; while(TI==0); TI=0; Delay_ms(400); //500ms m++; if(m==9) m=0; } } void int_1() interrupt 0 { P1=0xf0; if(P1!=0xf0) { Delay_ms(10); if(P1!=0xf0) { temp=P1; P1=0x0f; temp=temp|P1; for(i=0;i16;i++) { if(temp==KEY_TABLE[i]) { temp=i; break; } } SBUF=LED_TAB[temp]; while(TI==0); TI=0; TR0=1; while(flag==0); flag=0; } } P1=0xf0; } void timer_0() interrupt 1 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; t++; if(t==300) { t=0; flag=1; TR0=0; } } 附录4:独立按键实验 #include REG51.H char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf
显示全部
相似文档