完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
void delay(unsigned int i) { unsigned char j,k; for(j=0;j for(k=0;k<255;k++); } void main() { unsigned int h,l; P2=0X00; P3=0X00; while(1) { P1=0XF0; h=P1; if(h!=0xf0) { delay(1000); h=P1; if(h!=0xf0) { h=h&0xf0; /*1110 0000*/ P1=0X0F; /*11101111*/ delay(1); l=P1; l=P1; if(l!=0x0f) { delay(1000); if(l!=0x0f) { l=l&0x0f; h=h+l; } } } } if(h==0x11) { P2=0XC0; P3=0XFF; delay(255); } } }
|
|
相关推荐
5个回答
|
|
亲,你好,共同学习下。。。给你发个程序,你试下,看行不?
void main() { unsigned int h,a; P2=0X00; P3=0X00; while(1) { P1=0xf0; h=P1; h=h&0xf0; if(h!=0xf0) { delay(5);//按键按下去抖 h=P1; h=h&0xf0; if(h!=0xf0) { h=P1;//若是第一个键按下h=1110 0000 P1=0X0F; delay(5); a=P1; //a=P1; a=a&0x0f;//若是第一个键按下a=00001110 if(a!=0x0f) { delay(5); a=P1; a=a&0x0f; if(a!=0x0f) { a=P1;//a=00001110 h=h+a;//h+a=11101110 } } while(h!=0xf0)//松手检测 { h=P1; h=h&0xf0; } } } if(h==0xee) { P2=0XC0;//共阳极0 P3=0XFF; delay(255); } } } |
|
|
|
跟我那个一样,P1端口有出现高低电平变化,而其他端口电平均不改变··········· |
|
|
|
P2 P3你就一直没有改变他的值,就不会有高低变化哦,应该通过扫描哪个按键按下,来改变P2的值,才会有不同的数显示
|
|
|
|
//共阴数码管用P0口控制,P2口控制16个按键,当有键按下的时候数码管显示按键是第几个
#include #define uchar unsigned char #define uint unsigned int uchar code SMG_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //共阴数码管的编码表 uint num; void delay(uint z) //延时函数 { uint x,y; for(x=1;x } void dispiay(void) { uint temp; // num=16; P2=0xfe; //赋值,为了检测第一行 { temp=P2; //读取数值 if(temp!=0xfe) //检测有按键按下 { delay(10); //消抖 temp=P2; //读取数值 if(temp!=0xfe) //消抖后确定有按键按下 switch(temp) { case 0xee:num=0;break; //说明s1按下时 case 0xde:num=1;break; //说明s2按下时 case 0xbe:num=2;break; //说明s3按下时 case 0x7e:num=3;break; //说明s4按下时 } while(P2!=0xfe); //松手检测 } } P2=0xfd; //赋值,为了检测第二行 { temp=P2; //读取数值 if(temp!=0xfd) //检测有按键按下 { delay(10); //消抖 temp=P2; //读取数值 if(temp!=0xfd) //消抖后确定有按键按下 switch(temp) { case 0xed:num=4;break; //说明s5按下时 case 0xdd:num=5;break; //说明s6按下时 case 0xbd:num=6;break; //说明s7按下时 case 0x7d:num=7;break; //说明s8按下时 } while(P2!=0xfd); //松手检测 } } P2=0xfb; //赋值,为了检测第三行 { temp=P2; //读取数值 if(temp!=0xfb) //检测有按键按下 { delay(10); //消抖 temp=P2; //读取数值 if(temp!=0xfb) //消抖后确定有按键按下 switch(temp) { case 0xeb:num=8;break; //说明s9按下时 case 0xdb:num=9;break; //说明s10按下时 case 0xbb:num=10;break; //说明s11按下时 case 0x7b:num=11;break; //说明s12按下时 } while(P2!=0xfb); //松手检测 } } P2=0xf7; //赋值,为了检测第四行 { temp=P2; //读取数值 if(temp!=0xf7) //检测有按键按下 { delay(10); //消抖 temp=P2; //读取数值 if(temp!=0xf7) //消抖后确定有按键按下 switch(temp) { case 0xe7:num=12;break; //说明s13按下时 case 0xd7:num=13;break; //说明s14按下时 case 0xb7:num=14;break; //说明s15按下时 case 0x77:num=15;break; //说明s16按下时 } while(P2!=0xf7); //松手检测 } } } void main (void) { num=16; P0=SMG_Tab[num]; while(1) { dispiay(); P0=~SMG_Tab[num]; } } 现在电脑有点问题不能给图,不好意思 |
|
|
|
矩阵键盘用扫描法,还有你那消斗时间也太长了吧?一般5~10ms
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
250 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
473 浏览 2 评论
571 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
260 浏览 0 评论
400 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11974 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 06:33 , Processed in 0.751660 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号