完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include char num; char temp; ***it beep=P2^3; ***it duan=P2^6; ***it wei=P2^7; unsigned char leddata[]={ 0x3F, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0x6D, //"5" 0x7D, //"6" 0x07, //"7" 0x7F, //"8" 0x6F, //"9" 0x00, //熄灭 }; void keyboard(); void display(char shu); void hang1(); void hang2(); void hang3(); void hang4(); void main() { beep=1; while(1) { keyboard(); //扫描键盘 display(num);//显示键盘数字 } } void delay(unsigned char i) //延时函数 { int j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void keyboard() //键盘扫描函数 { hang1(); //扫描第一行按键 hang2(); //扫描第二行按键 hang3(); //扫描第三行按键 hang4(); //扫描第四行按键 } void display(char shu) //显示函数 { if(shu/10) { P0=0x7f; wei=1; wei=0; P0=leddata[shu%10]; duan=1; duan=0; P0=0xbf; wei=1; wei=0; P0=leddata[shu/10]; duan=1; duan=0; } else { P0=0x7f; wei=1; wei=0; P0=leddata[shu]; duan=1; duan=0; } } void hang1() //第一行按键扫描函数 { P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { beep=0; delay(10); beep=1; switch(temp) { case 0x70: num=4; break; case 0xb0: num=3; break; case 0xd0: num=2; break; case 0xe0: num=1; break; } } } } void hang2() //第二行按键扫描函数 { P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { beep=0; delay(10); beep=1; switch(temp) { case 0x70: num=8; break; case 0xb0: num=7; break; case 0xd0: num=6; break; case 0xe0: num=5; break; } } } } void hang3() //第三行按键扫描函数 { P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { beep=0; delay(10); beep=1; switch(temp) { case 0x70: num=12; break; case 0xb0: num=11; break; case 0xd0: num=10; break; case 0xe0: num=9; break; } } } } void hang4() //第四行按键扫描函数 { P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { beep=0; delay(10); beep=1; switch(temp) { case 0x70: num=16; break; case 0xb0: num=15; break; case 0xd0: num=14; break; case 0xe0: num=13; break; } } } } |
|
相关推荐
1个回答
|
|
unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法
{ unsigned char cord_h,cord_l;//行列值中间变量 KeyPort=0x0f; //行线输出全为0 cord_h=KeyPort&0x0f; //读入列线值 if(cord_h!=0x0f) //先检测有无按键按下 { DelayMs(10); //去抖 if((KeyPort&0x0f)!=0x0f) { cord_h=KeyPort&0x0f; //读入列线值 KeyPort=cord_h|0xf0; //输出当前列线值 cord_l=KeyPort&0xf0; //读入行线值 while((KeyPort&0xf0)!=0xf0);//等待松开并输出 return(cord_h+cord_l);//键盘最后组合码值 } }return(0xff); //返回该值 } 这个矩阵键盘扫描简单多了 P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) 你将 P3=0xf0,应该就不会出现你说的问题了 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12026 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 09:24 , Processed in 0.561263 second(s), Total 70, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号