原创 ATmega16L单片机数码管显示示例程序设计

2009-8-4 08:29 1858 1 1 分类: MCU/ 嵌入式

来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain


GCC AVR单片机数码显示示例程序(DG800B PIC/AVR开发板)
;******************************************************
;*标题:    ATmega16L单片机数码管显示示例程序
;*文件:                           
;*版本:    1.0

;*******************************************************
#include <avr/io.h>
#include <avr/delay.h>
//注: 内部函数_delay_ms() 最高延时  262.144mS@1MHz 即 32.768ms@8MHz
//    该函数可以实现较精确的定时for()/while()指令很难计算延时时间
//    为了使 _delay_ms()函数的延时正确,须在makefile中设定F_CPU为实际的系统时钟频
//    本范例为4MHz内部RC振荡器 即 F_CPU=4000000
//**********************************
#define uchar unsigned char  //数据类型说明
#define uint  unsigned int  //数据类型说明
#define RD4  4  //
#define RD5  5  //
#define RD6  6  //
#define RD7  7  //
//**********************************
uchar table[11]={0xc0,0xf9,0xa4,0xb0,0x99, // 0, 1, 2, 3,4,
                  0x92,0x82,0xf8,0x80,0x90, 0xff} ;// 5, 6, 7, 8, 9, off
uchar  buf[4] ;
uchar  disppoint;              //
//**********************************
void DelayMs(uint i)          //Ms级延时函数,参数i:延时时间
{ uint j ;
  for( ;i!=0 ;i--)
  {for(j=8000 ;j!=0 ;j--)  ;}
}
//**********************************

//**********************************
void put_num(char c)
{
  PORTC="table"[c&0x0f]; //
}
//*********************************
void main()
{
    DDRD="0xFF"  ;      //置PD口为输出
    PORTD="0xFF" ;
    DDRC="0xFF"  ;
    PORTC="0xFF" ;      //置PC口为输出
buf[0]=0;        //
  buf[1]=1;        //
buf[2]=2;        //
    buf[3]=3;        //
while(1)
  {
   
      disppoint="0";                //
      put_num(buf[disppoint]);  //
      PORTD &=~(1<<RD4);        //
      DelayMs(1);                //
      PORTD |= (1<<RD4);        //
      disppoint++;              //
      put_num(buf[disppoint]);  //
      PORTD &=~(1<<RD5);      //
      DelayMs(1);              //
      PORTD |= (1<<RD5);      //
      disppoint++;              //
      put_num(buf[disppoint]); //
      PORTD &=~(1<<RD6);      //
      DelayMs(1);              //
      PORTD |= (1<<RD6);      //

      disppoint++;            //
      put_num(buf[disppoint]); //
      PORTD &=~(1<<RD7);      //
      DelayMs(1);              //
      PORTD |= (1<<RD7);      //
                              //
  }

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /3 下一条