(五)数码管的仿真 01

要点:

1、 认识  共阴和 共阳

2、共阴极数码管0-9           0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F

    共阳极数码管0-9           0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90

3、注意 proteus 里面共阳极 和 共阴极 数码管的 选择 CC共阴  CA共阳

4、 proteus 里面排阻是 Rx8 

 

 

实验一: 轮流显示 偶数 和 奇数   0 2 4 6 8  和 1 3 5 7 9 

电路图: 共阳数码管 7seg-MPX1-CA 

参考程序:

#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
#define out P0
uchar8 code seg[]={ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 };     // 共阳数码管

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

}


void main()
{
    
  int i; 
  while(1)
  {
       for(i=0;i<10;i++,i++)
    {      
       out=seg[i];
       DelayMs(1000);
    }
    
    for(i=1;i<10;i++,i++)
    {      
       out=seg[i];
       DelayMs(1000);
    }
   
  }

}

 

实验二:  控制LED 数码管滚动 显示 数字 1到8

仿真图: 这个很重要,要记得 排阻 Rx8 还有总线 ,还有三极管具体作用 NPN 怎么使用,需要补充理论知识 

 

参考程序:

#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
uchar8 code seg[]={  0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80};     // 共阳数码管

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

}


void main()
{
  uchar8  j=0x80;  
  int i; 
  while(1)
  {
       for(i=0;i<8;i++)
    {      
       j=_crol_(j,1);   // 0x01   即 0000 0001     左移,向高位移动 
       P0=seg[i];      //  P0口 输出段码
       P2=j;           //  P2  输出位选码 
       DelayMs(1000);  // 这里最好用 1000 ,用100或更小时间会有视觉暂留
    }
      
  }

}

 

posted on 2015-12-23 21:06  无悔这一生。  阅读(1744)  评论(0编辑  收藏  举报

导航