标题: 单片机键盘显示问题(为何唯独不能显示出2,6,10,14数字,其它数字正常显示?) [打印本页]

作者: 她为我心    时间: 2015-4-22 16:02
标题: 单片机键盘显示问题(为何唯独不能显示出2,6,10,14数字,其它数字正常显示?)
下面的程序为何唯独不能显示出2,6,10,14数字,其它数字正常显示?

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit smg1=P2^4;
sbit smg2=P2^5;
sbit smg3=P2^6;
sbit rst=P3^6;
sbit en=P1^6;
uchar table[3];
unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x10};
unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};
uint k;
uchar temp;
uint shu;
void keyscan();
void display();
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
        for(j=110;j>0;j--);

}
void main()
{
        while(1)
        {
                keyscan();
                display();
        }

}
void display()
{
         uchar i;
//         shu=k*k;
         table[2]=k/100;
         table[1]=k/10%10;
         table[0]=k%10;
         rst=0;
         en=1;
         for(i=0;i<3;i++)
         {
                 P1=smg_du[table[ i]];
                P2=smg_we[ i];
                delayms(1);
         }
         en=0;
}
void keyscan()
{
        P3=0xfe;
        temp=P3;
        temp=temp&0xf0;
        while(temp!=0xf0)
        {
                delayms(5);
                temp=P3;
                temp=temp&0xf0;
                while(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xee:k=0;break;
                                case 0xde:k=1;break;
                                case 0xbe:k=2;break;
                                case 0x7e:k=3;break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        
                        }
                }
        }
        P3=0xfd;
        temp=P3;
        temp=temp&0xf0;
        while(temp!=0xf0)
        {
                delayms(5);
                temp=P3;
                temp=temp&0xf0;
                while(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xed:k=4;break;
                                case 0xdd:k=5;break;
                                case 0xbd:k=6;break;
                                case 0x7d:k=7;break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        
                        }
                }
        }
        P3=0xfb;
        temp=P3;
        temp=temp&0xf0;
        while(temp!=0xf0)
        {
                delayms(5);
                temp=P3;
                temp=temp&0xf0;
                while(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xeb:k=8;break;
                                case 0xdb:k=9;break;
                                case 0xbb:k=10;break;
                                case 0x7b:k=11;break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        
                        }
                }
        }
        P3=0xf7;
        temp=P3;
        temp=temp&0xf0;
        while(temp!=0xf0)
        {
                delayms(5);
                temp=P3;
                temp=temp&0xf0;
                while(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xe7:k=12;break;
                                case 0xd7:k=13;break;
                                case 0xb7:k=14;break;
                                case 0x77:k=15;break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        }
                }
        }
}


作者: superjiangzhen    时间: 2015-4-23 11:00
检查一下线路是否没接好 特别是P3.6引脚
作者: 她为我心    时间: 2015-4-23 19:23
superjiangzhen 发表于 2015-4-23 11:00
检查一下线路是否没接好 特别是P3.6引脚

你为什么会想到是P3.6引脚呢?
作者: superjiangzhen    时间: 2015-4-23 21:36
她为我心 发表于 2015-4-23 19:23
你为什么会想到是P3.6引脚呢?

根据你说的情况判断的 刚刚看到你P3.6脚其它用了 所以会出现你说的这样的问题 或者你可以把那些按键接到P0脚上  
作者: livingliving    时间: 2015-5-2 21:51
虽然不懂,但还是赞一下,毕竟每个人都是从无到有,最终成就大神之路!!!!!!!!!!!!!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1