找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3092|回复: 6
收起左侧

为什么矩阵键盘用不了

[复制链接]
ID:170585 发表于 2017-5-18 03:28 | 显示全部楼层 |阅读模式
5黑币
#include "keyscan.h"
#define uchar unsigned char
unsigned char JP()
{
unsigned char x=0x00;
  bit i=0;
  x=P2;   //é¨ÃèY×ø±ê
  delay(125);  //Ïû¶¶
  P2=0x0f;
  delay(2);
  x+=P2;    //é¨ÃèX×ø±ê
  switch(x)
  {
   case 0xee:x=0x30;break;    //°′ÏÂ0
   case 0xed:x=0x31;break;    //°′ÏÂ1
   case 0xeb:x=0x34;break;    //°′ÏÂ4
   case 0xe7:x=0x37;break;    //°′ÏÂ7
   case 0xde:x=0x46;break;       //°′ÏÂF/.
   case 0xdd:x=0x32;break;    //°′ÏÂ2
      case 0xdb:x=0x35;break;    //°′ÏÂ5
   case 0xd7:x=0x38;break;    //°′ÏÂ8
   case 0xbe:x=0x45;break;    //°′ÏÂE
   case 0xbd:x=0x33;break;    //°′ÏÂ3
   case 0xbb:x=0x36;break;    //°′ÏÂ6
   case 0xb7:x=0x39;break;    //°′ÏÂ9
   case 0x7e:x=0x44;break;    //°′ÏÂD
   case 0x7d:x=0x43;break;    //°′ÏÂC
   case 0x7b:x=0x42;break;    //°′ÏÂB
   case 0x77:x=0x41;break;    //°′ÏÂA
   default:x=0xff;break;
   }
   while(i==0)    //°′¼üËé¿a
   {
    P2=0xf0;
    delay(150);
    if(P2==0xf0)
    {
     i=1;
    }
    else{i=0;}
   }
  return x;    //·μ»Øx(ASCIIÂë)
}
//--------------------Ñóê±oˉêy--------//
void delay(unsigned char m)
{
  uchar i,j;
  for(i=0;i<m;i++)
  {
   for(j=0;j<121;j++)
   {;}
  }
}
#include "main.h"
#include "LCD12864.h"
#include "HX711.h"
#include "keyscan.h"
#define uchar unsigned char
#define uint unsigned int
unsigned long HX711_Buffer = 0;

//****************************************************
//Ö÷oˉêy
//****************************************************
   void main(void)
{
   uchar  LCD[16]={"0123456789ABCDEF"};
   code uchar JM1[]={0xb5,0xda,0xc8,0xfd,0xd7,0xe9,0xb5,0xe7,0xd7,0xd3,0xb3,0xc6};
   code uchar JM2[]={"μ¥¼Û: 00.0    "};
   code uchar JM3[]={"ÖØá¿: 00.000KG  "};
   code uchar JM4[]={"×ü¼Û: 0000.0Ôa  "};
   uchar DJ[3];       //μ¥¼Û
   uchar ZL[5];       //ÖØá¿
   uchar QPZL[5];   //è¥ƤoóμÄÖØá¿
   uchar ZJ[5];       //×ü¼Û
   unsigned long J1;
   uint J2,J3,J6=0;
   bit J5=1;
   uint J7;
   uchar i;
   uchar JM5[]={5679};
  LCD12864_Reset();  //3õê¼»ˉ
  for(i=0;i<3;i++)  //μ¥¼Ûêäèë
  {
   DJ[i]=0;
  }
  for(i=0;i<5;i++)   //ÖØá¿
  {
   ZL[i]=0;
  }
  for(i=0;i<5;i++)   //¾»ÖØ
  {
   QPZL[i]=0;
  }
  for(i=0;i<5;i++)   //×ü¼Û
  {
   ZJ[i]=0;
  }
LCD12864_COM_Write(0x81);  //¶¨Î»       
  for(i=0;i<12;i++)
{
  LCD12864_Data_Write(JM1[i]);  //ÏÔê¾μúèy×éμç×ó3ó
}
LCD12864_COM_Write(0x90);  //¶¨Î»
for(i=0;JM2[i]!='\0';i++)
{
LCD12864_Data_Write(JM2[i]);    //ÏÔê¾μ¥¼Û:00.0Ôa
}
LCD12864_COM_Write(0x88);  //¶¨Î»
for(i=0;JM3[i]!='\0';i++)
{
  LCD12864_Data_Write(JM3[i]);  //ÏÔê¾ÖØá¿: 00.000KG
}
LCD12864_COM_Write(0x98);    //¶¨Î»
for(i=0;JM4[i]!='\0';i++)
{
  LCD12864_Data_Write(JM4[i]);   //×ü¼Û: 0000.0Ôa
}
P2=0xf0;
while(1)
{
   while(P2==0xf0)      //μ±Ã»óD°′¼ü°′ÏÂê±½øè룬óD°′¼ü°′ÏÂê±ìø3öà′
   {
   J1=HX711_Read();    //¶áè¡ADÖμ
   J3=((J1-8388608)/150)-11;  //è¡Öμ
   ZL[0]=(J3/10000)%10;   //ÖØá¿ê®Î»
   if(ZL[0]>3){FMQ=0;}     //3¬Öر¨¾ˉ
   else{FMQ=1;}
   ZL[1]=(J3/1000)%10;       //ÖØῸöλ
   ZL[2]=(J3/100)%10;     //¼ÆËãλ
   ZL[3]=(J3/10)%10;
   ZL[4]=J3%10;
   J7=ZL[4];
   J7+=ZL[3]*10;
   J7+=ZL[2]*100;
   J7+=ZL[1]*1000;
   J7+=ZL[0]*10000;
   J3=QPZL[4];
   J3+=QPZL[3]*10;
   J3+=QPZL[2]*100;
   J3+=QPZL[1]*1000;
   J3+=QPZL[0]*10000;
   J7-=J3;
   ZL[0]=J7/10000;
   J7%=10000;
   ZL[1]=J7/1000;
   J7%=1000;
   ZL[2]=J7/100;
   J7%=100;
   ZL[3]=J7/10;
   J7%=10;
   ZL[4]=J7;
   LCD12864_COM_Write(0x8b); //¶¨Î»
   LCD12864_Data_Write(LCD[ZL[0]]);    //ËíÏÔê¾£¬ÏÂí¬
  LCD12864_Data_Write(LCD[ZL[1]]);   
  LCD12864_Data_Write(0x2e);   
  LCD12864_Data_Write(LCD[ZL[2]]);   
   LCD12864_Data_Write(LCD[ZL[3]]);   
   LCD12864_Data_Write(LCD[ZL[4]]);   
   J7=DJ[2]*ZL[3];
   J7+=DJ[2]*ZL[2]*10;
   J7+=DJ[2]*ZL[1]*100;
   J7+=DJ[2]*ZL[0]*1000;
   J7/=10;
   J7+=DJ[1]*ZL[3];
   J7+=DJ[1]*ZL[2]*10;
   J7+=DJ[1]*ZL[1]*100;
   J7+=DJ[1]*ZL[0]*1000;
   J7/=10;
   J7+=DJ[0]*ZL[3];   
   J7+=DJ[0]*ZL[2]*10;
   J7+=DJ[0]*ZL[1]*100;
   J7+=DJ[0]*ZL[0]*1000;

ZJ[0]=J7/10000;
J7%=10000;
ZJ[1]=J7/1000;
J7%=1000;
ZJ[2]=J7/100;
J7%=100;
ZJ[3]=J7/10;
J7%=10;
ZJ[4]=J7;
  LCD12864_COM_Write(0x9b);
  i=ZJ[0];
  i=LCD[i];
LCD12864_Data_Write(i);   
   i=ZJ[1];
  i=LCD[i];
  LCD12864_Data_Write(i);   
   i=ZJ[2];
  i=LCD[i];
LCD12864_Data_Write(i);   
   i=ZJ[3];
  i=LCD[i];
LCD12864_Data_Write(i);   
  LCD12864_Data_Write(0x2e);   
    i=ZJ[4];
  i=LCD[i];
  LCD12864_Data_Write(i);   
   P2=0xf0;
   delay(1);
   }
   J2=JP();
   if(J6>2){J6=0;}
   if(J2<0x40)
   {
   J2-=0x30;
   DJ[J6]=J2;
   J2=0xff;
   J6++;
   }
   else
   {
    switch(J2)
   {
case 0x41:P2=0xf0;while(P2==0xf0);J2=0xff;break;    //°′ÏÂAËø¶¨½çÃæ
    case 0x42:J2=0xff;break;         //½a3yËø¶¨
case 0x43:HX711_Read();          //è¥Ƥ
           J3=((J1-8388608)/150)-11;
     QPZL[0]=(J3/10000)%10;
     QPZL[1]=(J3/1000)%10;
     QPZL[2]=(J3/100)%10;
     QPZL[3]=(J3/10)%10;
     QPZL[4]=J3%10;
     J2=0xff;
     break;
case 0x44:DJ[0]=0;DJ[1]=0;DJ[2]=0;J6=0;J2=0xff;break;    //μ¥¼Û¸′λ
    case 0x45:QPZL[0]=0;QPZL[1]=0;QPZL[2]=0;QPZL[3]=0;QPZL[4]=0;J2=0xff;break;   //ÖØῸ′λ
    case 0x46:DJ[0]=0;DJ[1]=0;DJ[2]=0;J6=0;QPZL[0]=0;QPZL[1]=0;QPZL[2]=0;QPZL[3]=0;QPZL[4]=0;J2=0xff;break;    //μ¥¼ÛÖØá¿ ¸′λ
default:break;
   }
   }
   LCD12864_COM_Write(0x93);
   i=DJ[0];
   i=LCD[i];
   LCD12864_Data_Write(i);
   i=DJ[1];
   i=LCD[i];
  LCD12864_Data_Write(i);
   LCD12864_Data_Write(0x2e);
   i=DJ[2];
   i=LCD[i];
  LCD12864_Data_Write(i);
}
}

//****************************************************
//MSÑóê±oˉêy(12M¾§ÕñÏÂ2aêÔ)
//****************************************************
void Delay_ms(unsigned int n)
{
    unsigned int  i,j;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}


回复

使用道具 举报

ID:7485 发表于 2017-5-18 09:56 | 显示全部楼层
你知道你贴出来的是几个文件吗?

你有没有那几个头文件?
回复

使用道具 举报

ID:170585 发表于 2017-5-18 12:18 | 显示全部楼层
头文件是有的,开发板调试也没效果
回复

使用道具 举报

ID:157662 发表于 2017-5-18 19:18 | 显示全部楼层
你把仿真图发上来看看也
回复

使用道具 举报

ID:195376 发表于 2017-5-18 21:01 | 显示全部楼层
有仿真结果图吗
回复

使用道具 举报

ID:202427 发表于 2017-5-19 11:12 | 显示全部楼层
仿真结果是什么样子的
回复

使用道具 举报

ID:203076 发表于 2017-5-21 10:36 | 显示全部楼层
unsigned char keyscan()
{
        unsigned char v;
        P3=0xf0;
        if(P3!=0xf0)//表示有按键按下
           {
            delayms(10);  //去抖
                if(P3!=0xf0) //确定有按键按下
                  {
                    P3=0xfe; //检测第一行
                        if(P3!=0xfe)
                          {
                                v=P3&0xf0;
                                v+=0x0e;
                                    while(P3!=0xfe);
                                  delayms(10); //去抖
                                  while(P3!=0xfe);
                                anx++;
                               return v;
                }
                P3=0xfd; //检测第二行
                        if(P3!=0xfd)
                          {
                                v=P3&0xf0;
                                v+=0x0d;
                                   while(P3!=0xfd);
                                  delayms(10); //去抖
                                  while(P3!=0xfd);
                                anx++;
                               return v;
                }
                    P3=0xfb; //检测第三行
                        if(P3!=0xfb)
                          {
                                v=P3&0xf0;
                                v+=0x0b;
                                    while(P3!=0xfb);
                                  delayms(10); //去抖
                                  while(P3!=0xfb);
                                anx++;
                               return v;
                }
                    P3=0xf7; //检测第四行
                        if(P3!=0xf7)
                          {
                                v=P3&0xf0;
                                v+=0x07;
                                    while(P3!=0xf7);
                                  delayms(10); //去抖
                                  while(P3!=0xf7);
                                anx++;
                               return v;
                }
                }
        }
          return 0xff;
}
char outsz() //输出数字 1~9
{
        switch(keyscan())
        {         
                case 0xee:return 0; break;//0
                case 0xde:return 1; break;//1
                case 0xbe:return 2; break;//2
                case 0x7e:return 3; break;//3
               
                case 0xed:return 4; break;//4
                case 0xdd:return 5; break;//5
                case 0xbd:return 6; break;//6
                case 0x7d:return 7; break;//7
               
                case 0xeb:return 8; break;//8
                case 0xdb:return 9; break;//9
                case 0xbb:return a; break;//a
                case 0x7b:return b; break;//b
               
                case 0xe7:return c; break;//c
                case 0xd7:return d; break;//d
                case 0xb7:return e; break;//e
                case 0x77:return f; break;//f
        }
}
楼主程序太过复杂了,可以参考我这个,第一个函数用来检测按下的按键的坐标,第二个函数用来返回该坐标对应的值
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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