1、最简单的AVR程序

来源:互联网 发布:微信淘宝头像图片大全 编辑:程序博客网 时间:2024/05/21 12:39

开机LED闪烁10次,SPEAKER鸣1次,然后PORTA端口接的6盏灯以不同花式闪烁。

※PB2: SPEAKER,用于开机鸣叫
※PB3: LED,用于开机闪烁 

 

/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
?Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 2006-12-30
Author  : F4CG                            
Company : F4CG                            
Comments: 


Chip type           : ATmega32
Program type        : Application
Clock frequency     : 4.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 512
****************************************************
*/


#include 
<mega32.h>

// Declare your global variables here
/* This seems to produce the right amount of delay for the LED to be
 * seen
 
*/

void Delay()
{
unsigned 
char a, b;
for (a = 1; a; a++)
for (b = 1; b; b++)
;
}

//-----------------------------------
// 延时程序
//-----------------------------------
void delayms(unsigned char m)
{
    unsigned 
char a, b;
    
for (a = 1; a<m; a++)
    
for (b = 1; b; b++)
    ;
}


unsigned 
int k = 0;
void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA
=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB
=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC
=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD
=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0
=0x00;
OCR0
=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B
=0x00;
TCNT1H
=0x00;
TCNT1L
=0x00;
ICR1H
=0x00;
ICR1L
=0x00;
OCR1AH
=0x00;
OCR1AL
=0x00;
OCR1BH
=0x00;
OCR1BL
=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2
=0x00;
TCNT2
=0x00;
OCR2
=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR
=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR
=0x00;

    DDRB 
= 0xFF;    /* output */
    PORTB 
= 0xFF;    /* all off */
    DDRA 
= 0xFF;    /* output */
    PORTA 
= 0xFF;    /* all off */
        
    
for(k=0; k<10; k++)
    
{
        PORTB 
= 0xF7;
        delayms(
100);
        PORTB 
= 0xFF;
        delayms(
100);
    }

    PORTB 
= 0xFB;
    Delay();
    PORTB 
= 0xFF;
    Delay();
    
    TCCR0 
= 0x04;
    TCNT0 
= 0x06;
        
    
while (1)
    
{
        
for(k=0; k<5; k++)
        
{
            PORTA 
= ~(1<<k);
            delayms(
100);
        }


        
for(k=5; k>0; k--)
        
{
            PORTA 
= ~(1<<k);
            delayms(
100);
        }

        
        
for(k=0; k<5; k++)
        
{
            PORTA 
&= 0xE0;
            delayms(
100);
            PORTA 
|= 0xFF;
            delayms(
100);
        }


        
for(k=5; k>0; k--)
        
{
            PORTA 
&= 0xFB;
            delayms(
100);
            PORTA 
|= 0xFF;
            delayms(
100);
        }


        
for(k=5; k>0; k--)
        
{
            PORTA 
&= 0xE4;
            delayms(
100);
            PORTA 
|= 0xFF;
            delayms(
100);
        }


        
for(k=5; k>0; k--)
        
{
            PORTA 
&= 0xF5;
            delayms(
100);
            PORTA 
|= 0xFF;
            delayms(
100);
        }


        
for(k=5; k>0; k--)
        
{
            PORTA 
&= 0xEE;
            delayms(
100);
            PORTA 
|= 0xFF;
            delayms(
100);
        }


        
for(k=5; k>0; k--)
        
{
            PORTA 
&= 0xEA;
            delayms(
100);
            PORTA 
|= 0xFF;
            delayms(
100);
        }

    }
;
}


// #pragma interrupt_handler Timer0:10
interrupt [8void Timer0(void)
{
    PORTB 
= 0xF7;
    delayms(
100);
    PORTB 
= 0xFF;
    delayms(
100);
}


原创粉丝点击