资源描述:
《按键识别数码管显示实验.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验六 按键识别数码管显示实验(软件+硬件实验)一、实验目的与要求实验目的:掌握按键识别及数码管显示的实现方法。实验要求:通过XL2000的16位矩阵按键,在数码管上分别显示0~9,A,B,C,D,E,F。用Keil编译、Proteus仿真,代码下载到单片机实验箱上验证。二、实验内容数码管显示矩阵按键号。可参考xl2000实验仪操作指导手册之实验7三、实验接线图接线方法:1.用一条8PIN数据排线,把矩阵按键部份的JP50,接到CPU部份的P1口JP44;2.接8位数码管的数据线。将数码管部份的数据口JP5接到CPU部份的P0口JP51;3.
2、接8位数码管的显示位线。将数码管部份的显示位口JP8接到CPU部份的P2口JP52.四、实验结果五、思考题采用P3口控制矩阵按键输入,程序应该如何修改?本实验的程序中可以不用蜂鸣器驱动线,把以下程序的sbitBEEP=P3^7;及函数voidbeep()等删掉后;需要把扫描键值的函数改一下:unsignedcharkeyscan(){unsignedcharscan1,scan2,keycode,j;P13=0xf0;scan1=P3;if(scan1!=0xf0)//判键是否按下{delayms(10);scan1=P3;if(scan1!
3、=0xf0)//二次判键是否按下{P1=0x0f;scan2=P3;keycode=scan1
4、scan2;//组合成键扫描编码for(j=0;j<16;j++){if(keycode==key_code[j])//查表得键值{key=j;return(key);//返回有效键值}}}}elseP3=0xff;return(key=16);//返回无效码}即P1口换成P3口,而键编码数组是固定的,可以不变;此外主函数中的P1口也要改为P3口:voidmain(void){P0=0xf7;//数码管初始显示"-"P2=0xfd;//数码管显示在
5、第二位P3=0xff;while(1){keyscan();if(key<16)//有效键值{P0=disp_code[key];//显示键值}}}附件:实验程序清单#include#includesbitBEEP=P3^7;//蜂鸣器驱动线unsignedcharkey;unsignedcharcodedisp_code[]={0x28,0xa9,0x20,0x30,0xa1,0x60,0x21,0x62,0xb1,0x20,0x61,0xa2,0x28,0x7a,0x74,0x7e};//显示码数组
6、0,C,8,A,E,9,6,3,f,8,5,2,0,7,4,1unsignedcharcodekey_code[]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77//键编码数组};charcodeSST516[3]_at_0x003b;//保留仿真器/********************延时子函数***************/voiddelayms(unsignedintms){unsignedchart;while(ms-
7、-){for(t=0;t<114;t++);}}/*************x*0.14MS延时子函数****************/voiddelayus(unsignedcharx){unsignedchari;while(x--){for(i=0;i<14;i++){;}}}/******************蜂鸣器驱动子函数*****************/voidbeep(){unsignedchari;for(i=0;i<250;i++){delayus(6);BEEP=!BEEP;//BEEP取反}BEEP=1;//关闭蜂
8、鸣器delayms(150);//延时}/******************键盘扫描子函数*********************/unsignedcharkeyscan(){unsignedcharscan1,scan2,keycode,j;P1=0xf0;scan1=P1;if(scan1!=0xf0)//判键是否按下{delayms(10);scan1=P1;if(scan1!=0xf0)//二次判键是否按下{P1=0x0f;scan2=P1;keycode=scan1
9、scan2;//组合成键扫描编码for(j=0;j<16;j+
10、+){if(keycode==key_code[j])//查表得键值{key=j;return(key);//返回有效键值}}}}elseP1=0xff;retur