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

AVR单片机-数码管1

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

  八段数码管由八段LED构成 ,Ø各LED阴极或阳极并在一起,称为“位选线”:共阴、共阳 。
其余8个引脚各自引出,称为“段选线”,各段可以分别控制 。
 
使用LED数码管时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。
 


 
共阳极数码管译码表:
 
0x3f  , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
   0    1     2     3       4      5

 0x7d , 0x07 , 0x7f  , 0x6f , 0x77 , 0x7c ,
   6     7       8       9      A      B

 0x39 , 0x5e , 0x79 , 0x71 , 0x00
   C     D      E       F    无显示
 
共阴极的译码表只需对共阳极的译码表取反就可以得到。

 

本程序的实验原理图:



 
 
源程序:
 
/*
 * 数码管.c
 *
 * Created: 2011-6-24 17:24:05
 *  Author: ZYIN
 */
#include <avr/io.h>
unsigned char led0[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
 
void delay(void)//延时函数
{
 long int j;
 j=200000;
 while(j--);
}
int main(void)
{
 DDRF=0xff;//设置PF口为输出
 PORTF=0b00000110;//设置74hc573锁存器
 DDRC=0xff;
 DDRA=0xff;
  PORTA=0xff;
   while(1)
    {
  int i;
        for(i=0;i<16;i++)
  {
   PORTC=~(led0[i]+0x80);//循环显示,加0x80意思是把小数点点亮
   delay();//延时一下
  
  }
    }
}
 
效果图:AVR studio 5编译结果
 

关闭窗口

相关文章