专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

AVR单片机-数码管2(动态扫描)

作者:佚名   来源:本站原创   点击数:  更新时间:2012年10月24日   【字体:

  前面说了数码管的静态扫描,但是在大多数场合下都是动态扫描。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

 本程序的原理图:


 

源程序:

/*
 * shumaguan1.c
 *
 * Created: 2011-6-24 20:45:16
 *  Author: ZYIN
 */

#include <avr/io.h>
char temp;
int i,h,num,k;

unsigned char led0[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
       0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};

void delay(void)
{
 unsigned int j;
 j=1000;
 while(j--);
}

int main(void)
{
 DDRF=0xff;
 PORTF=0b00000110;
 DDRA=0xff;
 DDRC=0xff;
    while(1)
    {
  
  for(k=0;k<45;k++)
  {
   temp=0b00000001;
   for(i=0;i<8;i++)
   {
    num=i+h;
    PORTA=temp;
    PORTC=~led0[num];
    delay();
    temp<<=1;
   }
   }
  h++;
  if(h==24)
  h=0;
   }
}

效果图:

 

关闭窗口

相关文章