欢迎来到天天文库
浏览记录
ID:43643693
大小:71.50 KB
页数:9页
时间:2019-10-11
《第22章单片机系统键盘输入模块》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、22.1.2键盘的基本组成形式ucharkey_scan(){unsignedcharkey,temp;P仁OxOf;if(P1&OxOf!=OxOf)//如果有键按下{delaylOms();//延时去抖动if(P1&OxOf!=OxOf){P1=OxOf;temp=p1&OxfO;switch(temp){caseOxOe://如果第一行有键按下key=4;break;caseOxOd://第二行有键按下key=3;break;caseOxOb://第三行有键按下key=2;break;case0x07://第四
2、行有键按下key=1;break;}return(key);}ucharKeyScan();//按键扫描子程序voiddelayl0ms{);//延时程序ucharkey_free();//等待按键释放程序voidkey_deal();//键处理程序〃主程序voidmain(){while(1){KeyScan();key_free();key_deal();}}〃按键扫描子程序ucharKeyScan()unsignedcharkey,temp;P1=0xF0;//置行线全为高电平,列线全为低电平if(P1&0xF
3、0!=0xF0)//如果有键按下{delay10ms{);//延时去抖动if(P1&OxFO!=OxFO){P1=0xFE;//扫描第一列temp=P1;temp=temp&OxFO;if(temp!=OxFO)//如果本列有键按下{switch(temp){caseOxEO://如果第一行有键按下key=O;break;caseOxDO://第二行有键按下key=4;break;caseOxBO://第三行有键按下key=8;break;case0x707/第四行有键按下key=12;break;}}P1=0xFD
4、;〃扫描第二列temp=P1;temp&=OxFO;if(temp!=OxFO){switch(temp){caseOxEO://如果第一行有键按下key=1;break;caseOxDO://第二行有键按下key=5;break;caseOxBO://第三行有键按下key=9;break;case0x70://第四行有键按下key=13;break;}}P1=0xFb;〃扫描第三列temp=P1;temp&=OxFO;if(temp!=OxFO){switch(temp){caseOxEO://如果第一行有键按下k
5、ey=2;break;caseOxDO://第二行有键按下key=6;break;caseOxBO://第三行有键按下key=1O;break;case0x70://第四行有键按下key=14;break;}}P1=0xF7;//扫描第四列temp=P1;temp&=OxFO;if(temp!=OxFO){switch(temp){caseOxEO://如果第一行有键按下key=3;break;caseOxDO://第二行有键按下key=7;break;caseOxBO://第三行有键按下key=11;break;c
6、ase0x70://第四行有键按下key=15;break;}}}return(key);}〃延时程序voiddelay10ms(){unsignedchari,j;for(i=0;i<10;b++)for{j=0;j<120;j++)//延时1ms〃等待按键释放程序ucharkey_free(){key=key_scan();//取扫描到的键值P仁OxFO;//置行线全为高电平,列线全为低电平while(P1&OxFO!=OxFO)〃如果仍有键按下{}return(key);〃返回键值}22.2.2程序设计ucha
7、rkey_scan();〃按键扫描子程序voiddelaylOms();//延时程序ucharkey_free();//等待按键释放程序voidkey_deal();//键处理程序sysem」nitial();〃初始化程序〃主程序voidmain(){sysem_initial();while(1){key_scan();ucharkey_free();key_deal();}}〃初始化程序voidsysem_initial(){PCON=OxOO;SCON=Ox18;//选择串行工作方式0ES=0;//禁止串行口中
8、断}〃扫描按键程序ucharkey_scan(){unsignedcharkey,Rankcode;inti,j;SBUF=0x00;//使扫描键盘的74LS164输出为OOH,所有列线为低电平while(TI!=1)//串行输出完否?TI=0;〃清零P1=Ox03;//所有行线为高电平if(P1&0x03!=0x03)//如果有键按下{del
此文档下载收益归作者所有