找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2563|回复: 8
收起左侧

矩阵键盘显示两位数,求高手解答。这是我的程序。

[复制链接]
ID:92512 发表于 2015-10-25 18:42 | 显示全部楼层 |阅读模式
#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit been=P2^4;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uint num1,num,count;

void delay(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}

uchar jianpan1()                       
{                       
                        uint temp;
                        P3=0xfe;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                        case 0xee:num1=1;
                                                                break;
                                                        case 0xde:num1=2;
                                                                break;
                                                        case 0xbe:num1=3;
                                                                break;
                                                        case 0x7e:num1=4;
                                                                break;
                                                }
                                        while(temp!=0xf0)
                                                {
                                                        temp=P3;
                                                        temp=temp&0xf0;
                                                }
                                        }
                                }

                        P3=0xfd;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                        case 0xed:num1=5;
                                                                break;
                                                        case 0xdd:num1=6;
                                                                break;
                                                        case 0xbd:num1=7;
                                                                break;
                                                        case 0x7d:num1=8;
                                                                break;
                                                }
                                        while(temp!=0xf0)
                                                {
                                                        temp=P3;
                                                        temp=temp&0xf0;
                                                }
                                        }
                                }


                        P3=0xfb;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                        case 0xeb:num1=9;
                                                                break;
                                                        case 0xdb:num1=10;
                                                                break;
                                                        case 0xbb:num1=11;
                                                                break;
                                                        case 0x7b:num1=12;
                                                                break;
                                                }
                                        while(temp!=0xf0)
                                                {
                                                        temp=P3;
                                                        temp=temp&0xf0;
                                                }
                                        }
                                }


                        P3=0xf7;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                        case 0xe7:num1=13;
                                                                break;
                                                        case 0xd7:num1=14;
                                                                break;
                                                        case 0xb7:num1=15;
                                                                break;
                                                        case 0x77:num1=16;
                                                                break;
                                                }
                                        while(temp!=0xf0)
                                                {
                                                        temp=P3;
                                                        temp=temp&0xf0;
                                                }
                                        }
                                }
                                return num1;
}


void display()
{
                        uint shi,ge;
                        shi=num/10;
                        ge=num%10;

                        dula=1;
                        P0=table[shi];
                        dula=0;
                        P0=0xff;
                        wela=1;
                        P0=0xfe;
                        wela=0;
                       
                         delay(10);
                        dula=1;
                        P0=table[ge];
                        dula=0;
                        P0=0xff;                                                                     ;
                        wela=1;
                        P0=0xfd;
                        wela=0;
                        delay(10);
                               
}

void main(void)
{
        uint count=0,num=0;
        EA=1;
        EX0=1;
        IT0=1;
        while(1)
        {
                jianpan1();
                display();
        }
}


void INT0_num() interrupt 0
{       
       
        num=num*10+num1;
        if(num>99)
                {num=0;
                been=0;}
}

回复

使用道具 举报

ID:92512 发表于 2015-10-25 18:45 | 显示全部楼层
我把矩阵键盘的四个引脚接到一个与门上,输出接到中断引脚上的。
回复

使用道具 举报

ID:1 发表于 2015-10-25 18:56 来自手机 | 显示全部楼层
目前你这个程序,运行以后是什么现象
回复

使用道具 举报

ID:92512 发表于 2015-10-25 19:00 | 显示全部楼层
admin 发表于 2015-10-25 18:56
目前你这个程序,运行以后是什么现象

启动的时候两个管都是0。按下一个建时,第一个数码管不亮第二个键是0.松开后又都是00
回复

使用道具 举报

ID:92512 发表于 2015-10-25 19:00 | 显示全部楼层
admin 发表于 2015-10-25 18:56
目前你这个程序,运行以后是什么现象

启动的时候两个管都是0。按下一个建时,第一个数码管不亮第二个键是0.松开后又都是00
回复

使用道具 举报

ID:92512 发表于 2015-10-25 19:00 | 显示全部楼层
admin 发表于 2015-10-25 18:56
目前你这个程序,运行以后是什么现象

启动的时候两个管都是0。按下一个建时,第一个数码管不亮第二个键是0.松开后又都是00
回复

使用道具 举报

ID:92512 发表于 2015-10-25 19:12 | 显示全部楼层
求解答!!!!!
回复

使用道具 举报

ID:92512 发表于 2015-10-25 19:37 | 显示全部楼层
@青苹果
回复

使用道具 举报

ID:92512 发表于 2015-10-25 19:45 | 显示全部楼层
admin 发表于 2015-10-25 18:56
目前你这个程序,运行以后是什么现象

????
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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