找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助!关于键盘与UI

[复制链接]
跳转到指定楼层
楼主
ID:85871 发表于 2015-7-16 20:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假期想做个开发板交互程序
结果在键盘扫描停住了
原想:
  • T0动态扫描数码管  显示通过修改显存实现
  • T1扫描键盘 有四个按钮
结果调试时发现:
  • 两个定时器有时冲突
  • 数码管亮度不定
  • 键盘迟钝
看例程里面这两个功能不是同时进行的
请大家看看我这个程序应该怎么改
这类又用数码管动态扫描又用键盘的程序比较可行的思路有哪些?
MySummerProject.tar.gz (75.42 KB, 下载次数: 14)

评分

参与人数 1黑币 +50 收起 理由
admin + 50

查看全部评分

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

使用道具 举报

沙发
ID:58502 发表于 2015-7-17 13:02 | 只看该作者
中断显示数码管不要一次显示8位,这样显示时间过长导致出问题了,而是进入一次显示一位,再次进入显示第二位,显示完再重新开始

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:85871 发表于 2015-7-17 13:12 | 只看该作者
键盘扫描也是这样吗
回复

使用道具 举报

地板
ID:58502 发表于 2015-7-17 23:30 | 只看该作者
是的,键盘扫描也尽量不要用延时的方法去抖,我在你程序的定时器0没发现关于按键扫描部分。不知道你放哪了
回复

使用道具 举报

5#
ID:85871 发表于 2015-7-22 21:03 | 只看该作者
liaolinhui 发表于 2015-7-17 23:30
是的,键盘扫描也尽量不要用延时的方法去抖,我在你程序的定时器0没发现关于按键扫描部分。不知道你放哪了

我把它注释掉了。。
回复

使用道具 举报

6#
ID:85871 发表于 2015-7-22 21:04 | 只看该作者
不过现在问题已经解决了,我换了个方法,键盘扫描和动态显示都用主程序去完成,只不过现在按键后不松手会黑屏。。
回复

使用道具 举报

7#
ID:85871 发表于 2015-7-22 21:06 | 只看该作者
大大小小 发表于 2015-7-22 21:03
我把它注释掉了。。

在key.c里最下边有一块注释 那是原来的程序
回复

使用道具 举报

8#
ID:85871 发表于 2015-7-22 21:09 | 只看该作者
liaolinhui 发表于 2015-7-17 13:02
中断显示数码管不要一次显示8位,这样显示时间过长导致出问题了,而是进入一次显示一位,再次进入显示第二 ...

试了后发现数码管要不闪烁,主程序就几乎没机会走下去;主程序要顺利,数码管就闪烁得厉害。除非数码管和键盘扫描里的延时用硬件实现吧,还没试呢。
回复

使用道具 举报

9#
ID:58502 发表于 2015-7-23 18:29 | 只看该作者
利用定时器中断来实现数码管扫描,进一次显示一位,
    void disp() interrupt 1                  
  {
          P1=duan[disbuff[i]];}
          P2=wei[i];
          if(++i>=8)
          i=0;                                                       
  }

评分

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

查看全部评分

回复

使用道具 举报

10#
ID:85871 发表于 2015-7-23 22:04 | 只看该作者
liaolinhui 发表于 2015-7-23 18:29
利用定时器中断来实现数码管扫描,进一次显示一位,
    void disp() interrupt 1                  
  {

是啊,忘记T1_Val 多余了。谢谢啦
回复

使用道具 举报

11#
ID:89045 发表于 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;
      }
    }
  }
}

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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