《按键输入和LED数码管扫描显示实验.doc》由会员分享,可在线阅读,更多相关《按键输入和LED数码管扫描显示实验.doc(3页珍藏版)》请在金锄头文库上搜索。
1、按键输入和LED数码管扫描显示实验设计内容:给8个按键键盘的每个键定义一个功能,从左到右按键一次按下时,分别显示数字1-8,当有两个及以上的按键按下时,显示数字9。LCD初始显示个人学号,当有按键按下时,最后一位显示对应的数字。实验程序:#include sbit key=P06; /键盘公共线,见原理图sbit ls1=P02; /千位公共极sbit ls2=P03; /百位公共极sbit ls3=P04; /十位公共极sbit ls4=P05; /个位公共极unsigned char keyval; /读取的键值#define Dat P1 /数据输出端char a;char b4=0,3
2、,3,0; /初始值为学号后四位unsigned char tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /延时-Delay(unsigned int t) while(t-); /显示-void Display(unsigned char mun) unsigned char j; for(j=0;j50;j+) Dat=a; Dat=tabb0; /把得到7段显示码数据送P1端口 ls1=0; /点亮千位 Delay(100); /显示一会 ls1=1; /关闭,显示下一位 Dat=tabb1; ls2=0; /点亮百位 De
3、lay(100); ls2=1; Dat=tabb2; ls3=0; /点亮十位 Delay(100); ls3=1; /个位 Dat=tabb3; ls4=0; Delay(100); ls4=1; Dat=0xff; /P1恢复为0xff/-键盘扫描程序-Scankey() unsigned char i; key=0; /拉低键盘公共线 if(Dat!=0xff) /有键按下 Delay(1000); /消抖动 if(Dat!=0xff) /有键按下 i=Dat; a=Dat; /读取键盘状态, switch(i) case 0x01: keyval=0x01;break; /K1 ca
4、se 0x02: keyval=0x02;break; /K2 case 0x04: keyval=0x03;break; /K3 case 0x08: keyval=0x04;break; /K4 case 0x10: keyval=0x05;break; /K5 case 0x20: keyval=0x06;break; /K6 case 0x40: keyval=0x07;break; /K7 case 0x80: keyval=0x08;break; /K8 default: keyval=0x09;break; /其它双键按下不处理,均为9 b3=b2;b2=b1;b1=b0;b0=keyval; while(Dat!=0xff) key=1; /暂时关闭键盘,不干扰显示 Display(keyval); /等待按键抬起 key=0; /开启键盘检测 key=1; /释放键盘公共线/-主程序-main() while(1) Display(keyval); /显示 Scankey(); /键盘扫描