本帖最后由 何觅仙缘 于 2013-2-18 16:40 编辑
看了郭天祥矩阵键盘的教程,看着程序很冗长,所以就用for语句来实现扫描键盘,程序简洁了不少,但是下载到51后没用! 无论按哪个键都数码管都没有显示(键盘是4x3的),仿真了下,发现所有I0都是高电平,跟没下程序一样。。。。。(经LZ检查板子没问题),检查了很多遍程序也没发现问题,麻烦各位看下
先附程序
误区:在第30行中代码有误,因为优先级的关系,所以程序不正确(C语言基本功要扎实啊!)
改为:for(j=0;t=hang
&lie[j],j<4;j++) //此处不可以直接将hang&lie[j]
if(temp==t) //与temp比较,因为==优先级高于&- #include <reg52.h>
- #include <Myspace.h>
- uchar lie[4]={0xef,0xdf,0xbf,0x7f};
- uchar hang[3]={0xfd,0xfb,0xf7};
- uchar temp,key,i,j;
- void disp(uchar x) //显示程序
- {
- P0=duan2[x];
- delay(10);
- }
- void scanf()
- {
- for(i=0;i<3;i++)
- {
- P1=hang[i]; //先将某一行置零
- temp=P1;
- temp&=0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp&=0xf0; //确认有按键按下时,确定哪一列
- if(temp!=0xf0)
- {
- temp=P1;
- for(j=0;j<4;j++)
- if(temp==hang[i]&lie[j]){key=4*i+j+1;break;}
- while(temp!=0xf0) //等待松开按键
- {
- disp(key);
- temp=P1;
- temp&=0xf0;
- }
- }
- }
- }
- }
- main()
- {
- P2=0x00; //选中所有数码管
- while(1)
- {
- void sacnf();
- }
- }
复制代码
现在正在研究,不过不想通过查键值表来输出数码管显示,觉得有点浪费内存,所以自己做了些处理
一周热门 更多>