标题: 求助!关于键盘与UI [打印本页]

作者: 大大小小    时间: 2015-7-16 20:56
标题: 求助!关于键盘与UI
假期想做个开发板交互程序
结果在键盘扫描停住了
原想:
结果调试时发现:
看例程里面这两个功能不是同时进行的
请大家看看我这个程序应该怎么改
这类又用数码管动态扫描又用键盘的程序比较可行的思路有哪些?
MySummerProject.tar.gz (75.42 KB, 下载次数: 14)

作者: liaolinhui    时间: 2015-7-17 13:02
中断显示数码管不要一次显示8位,这样显示时间过长导致出问题了,而是进入一次显示一位,再次进入显示第二位,显示完再重新开始
作者: 大大小小    时间: 2015-7-17 13:12
键盘扫描也是这样吗
作者: liaolinhui    时间: 2015-7-17 23:30
是的,键盘扫描也尽量不要用延时的方法去抖,我在你程序的定时器0没发现关于按键扫描部分。不知道你放哪了
作者: 大大小小    时间: 2015-7-22 21:03
liaolinhui 发表于 2015-7-17 23:30
是的,键盘扫描也尽量不要用延时的方法去抖,我在你程序的定时器0没发现关于按键扫描部分。不知道你放哪了

我把它注释掉了。。
作者: 大大小小    时间: 2015-7-22 21:04
不过现在问题已经解决了,我换了个方法,键盘扫描和动态显示都用主程序去完成,只不过现在按键后不松手会黑屏。。
作者: 大大小小    时间: 2015-7-22 21:06
大大小小 发表于 2015-7-22 21:03
我把它注释掉了。。

在key.c里最下边有一块注释 那是原来的程序
作者: 大大小小    时间: 2015-7-22 21:09
liaolinhui 发表于 2015-7-17 13:02
中断显示数码管不要一次显示8位,这样显示时间过长导致出问题了,而是进入一次显示一位,再次进入显示第二 ...

试了后发现数码管要不闪烁,主程序就几乎没机会走下去;主程序要顺利,数码管就闪烁得厉害。除非数码管和键盘扫描里的延时用硬件实现吧,还没试呢。
作者: liaolinhui    时间: 2015-7-23 18:29
利用定时器中断来实现数码管扫描,进一次显示一位,
    void disp() interrupt 1                  
  {
          P1=duan[disbuff[i]];}
          P2=wei[i];
          if(++i>=8)
          i=0;                                                       
  }
作者: 大大小小    时间: 2015-7-23 22:04
liaolinhui 发表于 2015-7-23 18:29
利用定时器中断来实现数码管扫描,进一次显示一位,
    void disp() interrupt 1                  
  {

是啊,忘记T1_Val 多余了。谢谢啦
作者: 呵呵呵呵    时间: 2015-8-29 13:03
上程序
//4*4键盘检测程序,按下键后相应的代码显示在数码管上
#include<reg51.h>
sbit beep=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
         unsigned char i=100;
unsigned char j,k,temp,key;
void delay(unsigned char i)
{
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
display(unsigned char num)
{
         P0=table[num];
   //    P0=0xff;
         dula=1;
         dula=0;
         P0=0xc0;
         wela=1;
         wela=0;
}
void main()
{
  dula=0;
  wela=0;
  while(1)
  {
    P3=0xfe;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      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;
           beep=0;
         }
         beep=1;
        display(key);
        // P0=table[key];
/*        P0=0xff;
         dula=1;

         while(i--);
         dula=0;
         P0=0xc0;
         wela=1;
         wela=0;
  dula=0;
  wela=0;
  P0=0xff;
  dula=1;
  dula=0;
  P0=0xc5;
  wela=1;
  wela=0; */
         P1=0xfe;
      }
    }
    P3=0xfd;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      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;
           beep=0;
         }
         beep=1;
         display(key);
/*         P0=table[key];
         dula=1;
      //   while(100--);
         dula=0;
         P0=0xc0;
         wela=1;
         wela=0;
  */       P1=0xfc;
      }
      }
    P3=0xfb;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      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;
           beep=0;
         }
         beep=1;
        display(key);
     /*    P0=table[key];
         dula=1;
      //   while(100--);
         dula=0;
         P0=0xc0;
         wela=1;
         wela=0;
    */     P1=0xf8;
      }
      }
    P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      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;
           beep=0;
         }
         beep=1;
        display(key);
  /*       P0=table[key];
         dula=1;
   //      while(100--);
         dula=0;
         P0=0xc0;
         wela=1;
         wela=0;
    */     P1=0xf0;
      }
    }
  }
}






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