首页 > 技术文章 > (五)数码管仿真 02

shengruxiahua 2015-12-23 21:10 原文

电路图:注意 为了省事 把 数码管串联的电阻省去了

 

 

参考代码:  这里 检测按键并不好,抄的另外一篇日志,具体还要看书

#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
sbit  key1=P2^0;
sbit  key2=P2^1;
sbit  key3=P2^2;
sbit  key4=P2^3;
uchar8 code seg[]={   0x3F,0x06,0x5B,0x4F,0x66 };     // 共阴数码管

/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/*************************                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            *******************/
void DelayMs(uint16 val)
{
       uint16  i,j;
       for( i=0;i<val;i++)
           for(j=0;j<113;j++);

}


/****************************/
// 函数名称:  keyscan( )
// 函数功能:  检测按键
// 入口函数:  无
// 出口函数:  keyscan_num
/*****************************/
uchar8 keyscan()
{
      uchar8 keyscan_num=0 ,temp;
      P2=0xff;    // 置电平
      temp=P2;  //  读P2口电平,送入 temp 中(因为这时候可能改变按键了)
      
      // if(~(temp&0xff))  不会用,先不看,用下面的
      if(temp!=0xff)    // 说明有键按下
      {
        
            if(key1==0)
            {
             keyscan_num=1;
            }
              else if(key2==0)
            {
              keyscan_num=2;
            }
            else if(key3==0)
            {
              keyscan_num=3;
            }
            else  if(key4==0)
            {
            
               keyscan_num=4;
            }
            else 
            
             keyscan_num=0;         // 依旧为0
       }
         
              
       return keyscan_num;

}



void main()
{
  uchar8   ledshow;
  while(1)
  {
        ledshow=keyscan();  // 切记 不是写 keyscan_num 要多看C语言
     
     P1=seg[ledshow];      
     DelayMs(1000);
      
  }

}

 

 

疑问: 虽然达到了按键控制 选择来显示 1234 的目的,但是不太好

 

推荐阅读