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

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

   oycfc 
oycfc发表的帖子 

 初学者:求助,键盘输入数码管显示,如何让数码管可以停留显示
求助,键盘输入数码管显示,如何让数码管可以停留显示(高于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();

     }
  }




发表时间:2002年6月19日22:45:00

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  8503.[详细]显示部分放到定时中断里去
摘要:......(无内容)
- [逍遥派掌门人][1012次] 2002年6月26日

  8504.[详细]你的数码管是静态还是动态的
摘要:这主要是看你的数码管的动态还是静态的。如果是静态的,那你加一片锁存就可以实现停留 显示。当然这样功耗会大一些。 如果你的数码管是动态的那么看你连了几个,这样才好确定每一片的停留时间,当然锁存也 是必要的。......(102字)
- [ggyyguoyi][1230次] 2002年6月26日

  8514.[详细]请掌握以下原则
摘要:1。要使数码管显示不闪烁,扫描帧频率应>=50HZ(每个数码管点亮一次为一帧)。 2。每次每个数码管点亮的时间不小于2ms. ......(66字)
- [万方][1123次] 2002年6月26日

[上一篇帖子]:MSP430单片机:用过msp430的大侠看过来msp430链接错误 Undefined&n
[下一篇帖子]:硬件:求助:放大电路有谁用过AD590做传感器,我用放大时放大的信号不标准,请帮帮忙,帮 我