导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:求助,键盘输入数码管显示,如何让数码管可以停留显示[oycfc]

 *第3716篇: 初学者:求助,键盘输入数码管显示,如何让数码管可以停留显示

  
楼 主:oycfc 2002年6月19日22:45
 初学者:求助,键盘输入数码管显示,如何让数码管可以停留显示
求助,键盘输入数码管显示,如何让数码管可以停留显示(高于16_20HZ),
指教程式错在哪? 那位有没有一样的发给我一份参考一下 oycfc@163.com

#include <stdio.h>
#include <reg51.h>
char act[4]={0xfe,0xfd,0xfb,0xf7,}; 
char disp[6]={0x3f,0x06,0x5b,0x4f,0x77,0x7c};
//字形表
const unsigned char DATA_7SEG[16]={0xb9,0x5e,0x79,0x71, 0X7F,0X6F,0x77,0x7c,
                    0x66,0X6D,0X7D,0X07, 0X3F,0x06,0x5B,0x4F};

//显示缓冲区                    
int key;


void delay(int t)//延时子程式 1ms//
    { int i,j;
  for(i=0;i<t;i++) 
  {for(j=0;j<120;j++);
   }
}
//**************************//
char scan_key(void) //键盘扫描程式//
     {
     char i,j,find,ini,inj;
     char in;
     find=0;
     for(i=0;i<4;i++)
        {P2=act[i];
        delay(3);
        in=P2;     
           in=in>>4;     
       in=in|0xf0;   
      for(j=0;j<4;j++)
        if(act[j]==in)
          {find=1;
          inj=j;ini=i;
          }    
    }
  if(find==0) return 0;
    key=ini*4+inj;
    return 1;
 }
    
          
        
void get_key(void) //等待键盘并等安键放开程式//
       {
        while(1)
         if(scan_key()==1) break;
        while(1)
         if(scan_key()==0) break;
         }

char scan_keyboard(void)//转换成按键代码输出//
     { char  key_code;
     while(1)
     { get_key();    
      key_code=DATA_7SEG[key];
        if(key_code==0) return 0;
         return (key_code);
        }   

}
void diskplay(void) //数码管扫描控制//
     {char i; 
      for(i=0;i<6;i++) 
         {
       P1=disp[i];
       P3=~(1<<i);
       delay(10); 
       P3|=(1<<i);
      }
    }

void main(void) // 主程序//
     { 
     char keyval;
     diskplay();
     while(1)  
      {
      keyval=scan_keyboard();
      disp[0]=keyval;
      diskplay();

     }
  }


  
2楼:逍遥派掌门人 2002年6月26日10:33
 显示部分放到定时中断里去
  
3楼:ggyyguoyi 2002年6月26日10:49
 你的数码管是静态还是动态的
这主要是看你的数码管的动态还是静态的。如果是静态的,那你加一片锁存就可以实现停留
显示。当然这样功耗会大一些。
如果你的数码管是动态的那么看你连了几个,这样才好确定每一片的停留时间,当然锁存也
是必要的。
  
4楼:万方 2002年6月26日13:14
 请掌握以下原则
1。要使数码管显示不闪烁,扫描帧频率应>=50HZ(每个数码管点亮一次为一帧)。
2。每次每个数码管点亮的时间不小于2ms.

>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:MSP430单片机:用过msp430的大侠看过来

[下一篇主题]:硬件:求助:放大电路