打印

问一个51单片机的矩阵键盘扫描程序,为何烧写总是不对?

[复制链接]
920|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjh2014|  楼主 | 2015-1-8 13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}
void display(uchar num)
{
        P2=table[num];
}
void keyscan()
{
        uchar temp,key;
        P3=0xfe;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delayms(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xee:
                                        key=0;
                                        break;
                                case 0xde:
                                        key=1;
                                        break;
                                case 0xbe:
                                        key=2;
                                        break;
                                case 0x7e:
                                        key=3;
                                        break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;                                       
                        }
                        display(key);
                }
        }
           P3=0xfd;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delayms(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xed:
                                        key=4;
                                        break;
                                case 0xdd:
                                        key=5;
                                        break;
                                case 0xbd:
                                        key=6;
                                        break;
                                case 0x7d:
                                        key=7;
                                        break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;                                       
                        }
                        display(key);
                }
        }
                P3=0xfb;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delayms(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xeb:
                                        key=8;
                                        break;
                                case 0xdb:
                                        key=9;
                                        break;
                                case 0xbb:
                                        key=10;
                                        break;
                                case 0x7b:
                                        key=11;
                                        break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;                                       
                        }
                        display(key);
                }
        }
        P3=0xf7;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delayms(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xe7:
                                        key=12;
                                        break;
                                case 0xd7:
                                        key=13;
                                        break;
                                case 0xb7:
                                        key=14;
                                        break;
                                case 0x77:
                                        key=15;
                                        break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;                                       
                        }
                        display(key);
                }
        }       
}
void main()
{
        P0=0xff;
        P2=0x00;
        while(1)
        {
                keyscan();       
        }
}

相关帖子

沙发
cplide| | 2015-1-8 20:15 | 只看该作者
怎么这么长?反正我不会

使用特权

评论回复
板凳
wangyy608| | 2015-1-9 08:32 | 只看该作者
这个好像没办法显示按键,逻辑有问题。
松开按键才display(key),等下一轮扫描key又变成0了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

50

帖子

3

粉丝