打印

刚学ATmega128,编了个小程序

[复制链接]
1222|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
/*******************************
delay。h
********************************/
#ifndef __DELAY__H
#define __DELAY__H
//extern unsigned char bb;
void Delay_us(void);
void Delay_nus(unsigned int t);
void Delay_ms(void);
void Delay_nms(unsigned int t);
#endif
/************************************
delay.c
**************************************/
/*--------------------------------------------------*/
/*     AVR系统的处理器为:   ATMega128               */
/*     AVR系统的晶振频率:   7.3728 Mhz             */
/*--------------------------------------------------*/
#include "delay.h"
/*-----------------------------------------------------------------------
Delay_us    :1us延时函数
-----------------------------------------------------------------------*/
void Delay_us(void)
{
   unsigned char t=3;
   
   while(t--);
}
/*-----------------------------------------------------------------------
Delay_nus          :长延时函数
输入参数: t        :延时时间 us
-----------------------------------------------------------------------*/
void Delay_nus(unsigned int t)
{
    while (t--)
       Delay_us();
}
/*-----------------------------------------------------------------------
Delay_ms    :1ms延时函数
-----------------------------------------------------------------------*/
void Delay_ms(void)
{
   Delay_nus(1000);
}
/*-----------------------------------------------------------------------
Delay_nms          :长延时函数
输入参数: t        :延时时间 ms
-----------------------------------------------------------------------*/
void Delay_nms(unsigned int t)
{
    while (t--)
       Delay_ms();
}
/**********************************************
**********************************************/
/*********************************************************
程序名:计数器
功能:从1自加到10000,归零
环境:ICCAVR
编者:江湖浮萍
**********************************************************/
//调用头文件
#include<iom128v.h>
#include"delay.h"
#include<macros.h>
//定义全局变量
int a[11]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x03};
int b[11]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x03};
int k=0,interrupt_count=0,ck1=0,ck2=0,ck3=0,ck4=0;
led=0x01;
//初始化时间函数
void timer0_init(void)
{
    TCCR0 =0x00;
ASSR  =0x00;
TCNT0 =0x64;
OCR0  =0x00;
TCCR0 =0x07;
}
//端口初始化
void port_init(void)
{
    DDRA =0xFF;
PORTA=0x01;
DDRB =0xFF;
PORTB=0xFF;
DDRC =0x00;
PORTC=0xFF;
}
/******************************************
定义中断函数,实现累加功能
*******************************************/
#pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF
void timer0_ovf_isr(void)
{
    TCNT0=64;

if(k<=9)
{
     if(interrupt_count<=1)
  {
      interrupt_count=interrupt_count+1;
  }
  else
  {
   if(ck4<=8)
   {
     if(ck3<=8)
     {
         if(ck2<=9)
      {
          if(ck1<=8)
           {
                  ck1++;
         
           }
        else
        {
            if(ck2<=8)
         {
                ck1=0;
          ck2++;
         }
      else
      {
         ck1=0;
         ck2=0;
         ck3++;
      }
         
        }
      }
      else
      {
          ck1=0;
          ck2=0;
       ck3++;
      }
      }
    else
    {
        ck3=0;
     ck4++;
    }
   
   }
   else
    {
        ck4=0;
    }
   
   
   interrupt_count=0;
   k++;
  }
  
}
else
{
     k=0;
}

}
//定义四个数码管所显示控制函数
void bit_1(void)
{
     PORTB=a[ck1];
}
void bit_2(void)
{
     PORTB=a[ck2];
     
}
void bit_3(void)
{
     PORTB=a[ck3];
     
}
void bit_4(void)
{
     PORTB=a[ck4];
     
}
void main(void)
{
    int i=0,j;


port_init();
CLI();                            //关闭中断
timer0_init();
MCUCR=0x00;
TIMSK=0x01;
SEI();
while(1)
{
    if(!(PINC&0x01))                    //判断是否有开关按下,若是,则开始计数
                                       
    {                                   //如打开开关则计数停止,闭合则继续计数
        for(i=0;i<4;i++)
        {
             if(i==0)
       {      
          PORTA=(led<<i);
          bit_1();
          Delay_nus(10);
       }
        else if(i==1)
       {      
          PORTA=(led<<i);
          bit_2();
          Delay_nus(10);
       }
        else if(i==2)
       {      
          PORTA=(led<<i);
          bit_3();
          Delay_nus(10);
       }
        else
       {      
          PORTA=(led<<i);
          bit_4();
          Delay_nus(10);
       }
        }
  }
  else
  {
      PORTA=0xFF;
   PORTB=0x03;
  }   
  }
}

NI(M)D[G3PHN_}T(MKY7T{J.jpg (113.25 KB )

ATmega128接线方式

ATmega128接线方式

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

1

粉丝