找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2668|回复: 4
打印 上一主题 下一主题
收起左侧

单片机键盘显示问题(为何唯独不能显示出2,6,10,14数字,其它数字正常显示?)

[复制链接]
跳转到指定楼层
楼主
ID:77673 发表于 2015-4-22 16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的程序为何唯独不能显示出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;
                        }
                }
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:72643 发表于 2015-4-23 11:00 | 只看该作者
检查一下线路是否没接好 特别是P3.6引脚

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:77673 发表于 2015-4-23 19:23 | 只看该作者
superjiangzhen 发表于 2015-4-23 11:00
检查一下线路是否没接好 特别是P3.6引脚

你为什么会想到是P3.6引脚呢?
回复

使用道具 举报

地板
ID:72643 发表于 2015-4-23 21:36 | 只看该作者
她为我心 发表于 2015-4-23 19:23
你为什么会想到是P3.6引脚呢?

根据你说的情况判断的 刚刚看到你P3.6脚其它用了 所以会出现你说的这样的问题 或者你可以把那些按键接到P0脚上  

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:76287 发表于 2015-5-2 21:51 | 只看该作者
虽然不懂,但还是赞一下,毕竟每个人都是从无到有,最终成就大神之路!!!!!!!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表