完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
本帖最后由 eehome 于 2013-1-5 09:54 编辑
#include #define uchar unsigned char #define uint unsigned int ***it dual=P2^6; ***it weal=P2^7; uchar code DSY_CODE[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar Pre_KeyNo=16,KeyNo=16; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } void Keys_Scan() { uchar Tmp; P3=0x0f; //高4位置0,放入4行 delayms(1); Tmp=P3^0x0f;//按键后0f变成0000XXXX,X中一个为0,3个仍为1,通过异或把3个1变为0,唯一的0变为1 switch(Tmp) //判断按键发生于0~3列的哪一列 { case 1: KeyNo=0;break; case 2: KeyNo=1;break; case 4: KeyNo=2;break; case 8: KeyNo=3;break; default:KeyNo=16; //无键按下 } P3=0xf0; //低4位置0,放入4列 delayms(1); Tmp=P3>>4^0x0f;//按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值 switch(Tmp) //对0~3行分别附加起始值0,4,8,12 { case 1: KeyNo+=0;break; case 2: KeyNo+=4;break; case 4: KeyNo+=8;break; case 8: KeyNo+=12; } } void main() { dual=1; P0=0xc0; dual=0; while(1) { weal=1 ; P3=0xf0; if(P3!=0xf0) Keys_Scan(); //获取键序号 if(Pre_KeyNo!=KeyNo) { P0=~DSY_CODE[KeyNo]; weal=0; Pre_KeyNo=KeyNo; } delayms(100); } } |
|
相关推荐
9个回答
|
|
|
获取按键值,同时数码管显示出来
|
|
|
|
|
|
为什么要取反呢?没搞明白
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
数码管的管脚次序有关
|
|
|
|
|
|
|
|
|
|
|
|
其实是为了是输出的信号电平更稳定,以前在一本书上看到过!!!
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
528 浏览 0 评论
654 浏览 0 评论
858 浏览 0 评论
837 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
770 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17060 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 19:48 , Processed in 0.916784 second(s), Total 91, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3915