完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请大神检查程序的问题所在。
问题:按键盘中的任何一个键,数码管总是显示0,这是什么问题引起的啊? /*本程序是监测4*4矩形键盘的按键*/ #include #define uchar unsigned char #define p0 P0 //数码管显示串口; //#define p1 P1 //键盘串口; ***it p22=P2^2; //选择那个数码管显示; ***it p23=P2^3; ***it p24=P2^4; void delayms(int x); //延时函数; void displays(int y); //显示函数; void keyscan(void); uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void main() { p22=0; p23=0; p24=0; while(1) { keyscan(); } } void keyscan(void) { uchar key; uchar temp; P1=0x7f; //将第一行全部置0; temp=P1; temp=temp&0x0f; //判断第一行那个键按下; if(temp!=0x0f) //如果有那个键按下,P1!=0x0f,否则P1=0x0f; { delayms(5); temp=P1; temp=temp&0x0f; if(temp!=0x0f) { temp=P1; switch(temp) { case 0x07: key=0; break; case 0x0b: key=1; break; case 0x0d: key=2; break; case 0x0e: key=3; break; } while(temp!=0x0f) //判断那个键是否还在按着,如果按着的话,等待按键弹起来; { temp=P1; temp=temp&0x0f; } displays(key); } } P1=0xbf; //将第二行全部置0; temp=P1; temp=temp&0x0f; //判断第二行那个键按下; if(temp!=0x0f) //如果有那个键按下,P1!=0x0f,否则P1=0x0f; { delayms(5); temp=P1; temp=temp&0x0f; if(temp!=0x0f) { temp=P1; switch(temp) { case 0x07: key=4; break; case 0x0b: key=5; break; case 0x0d: key=6; break; case 0x0e: key=7; break; } while(temp!=0x0f) //判断那个键是否还在按着,如果按着的话,等待按键弹起来; { temp=P1; temp=temp&0x0f; } displays(key); } } P1=0xdf; //将第三行全部置0; temp=P1; temp=temp&0x0f; //判断第三行那个键按下; if(temp!=0x0f) //如果有那个键按下,P1!=0x0f,否则P1=0x0f; { delayms(5); temp=P1; temp=temp&0x0f; if(temp!=0x0f) { temp=P1; switch(temp) { case 0x07: key=8; break; case 0x0b: key=9; break; case 0x0d: key=10; break; case 0x0e: key=11; break; } while(temp!=0x0f) //判断那个键是否还在按着,如果按着的话,等待按键弹起来; { temp=P1; temp=temp&0x0f; } displays(key); } } P1=0xef; //将第四行全部置0; temp=P1; temp=temp&0x0f; //判断第四行那个键按下; if(temp!=0x0f) //如果有那个键按下,P1!=0x0f,否则P1=0x0f;; { delayms(5); temp=P1; temp=temp&0x0f; if(temp!=0x0f) { temp=P1; switch(temp) { case 0x07: key=12; break; case 0x0b: key=13; break; case 0x0d: key=14; break; case 0x0e: key=15; break; } while(temp!=0x0f) //判断那个键是否还在按着,如果按着的话,等待按键弹起来; { temp=P1; temp=temp&0x0f; } displays(key); } } } /******************************************************* 延时函数xms *******************************************************/ void delayms(int x) { int a; for(x;x>0;x--) for(a=110;a>0;a--); } /*********************显示函数*****************************/ void displays(int y) { p0=table[y]; } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:34 , Processed in 1.045502 second(s), Total 47, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号