亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sound_system2.c

?? 基于AVR的一個 Sound Recorder的源代碼
?? C
字號:
/*****************************************************************************
*
* Atmel Corporation
*
* File              : sound_system2.c
* Compiler          : IAR EWAAVR 3.20C
* Revision          : $Revision: 1.4 $
* Date              : $Date: Monday, November 15, 2004 12:53:58 UTC $
*
* Support mail      : avr@atmel.com
*
* Supported devices : ATmega8535
*
* AppNote           : AVR335 Digital Sound Recorder.
*
*
****************************************************************************/


#include <inavr.h>
#include <ioavr.h>
#include "dataflash.h"

// prototypes
void setup (void);
void erasing (void);
void recording (void);     
void write_to_flash (unsigned char ad_data);
void playback (void);
void next_page_to_next_buffer (unsigned char active_buffer, unsigned int page_counter); 
void active_buffer_to_speaker (unsigned char active_buffer);
void write_SPI(unsigned char data);

// global variables  
volatile unsigned char wait = 0;


void setup(void)
{
    DDRB = 0xBD;                            // SPI Port initialisation
                                            // SCK, MISO, MOSI,  CS, LED,  WP , RDYBSY, RST
                                            // PB7, PB6,  PB5,  PB4, PB3, PB2 ,  PB1,   PB0
                                            //  O    I     O     O    O    O      I      O
                                            //  1    0     1     1    1    1      0      1
                                            
    PORTB = 0xFF;                           // all outputs high, inputs have pullups (LED is off) 
    DDRA = 0x00;                            // define port A as an input    
    PORTA = 0x00;
    DDRD = 0x10;                            // define port D as an input (D4: output)

    __enable_interrupt();                   // enable interrupts
}

void write_SPI(unsigned char data)
{
       SPDR = data;
       while (!(SPSR & 0x80));             // wait for data transfer to be completed
}

void erasing(void)
{
    unsigned int block_counter = 0;
    
    ACSR |= CLEARED;                           // set signal flag that new data has to be recorded next

    // interrupt disabled, SPI port enabled, master mode, MSB first,  SPI mode 3, Fcl/4
    SPCR = 0x5C;

    while (block_counter < 512)
    {
        PORTB &= ~DF_CHIP_SELECT;           // enable DataFlash
        
        write_SPI(BLOCK_ERASE);
        write_SPI((char)(block_counter>>3));
        write_SPI((char)(block_counter<<5));
        write_SPI(0x00);

        PORTB |= DF_CHIP_SELECT;            // disable DataFlash

        block_counter++;
        while(!(PINB & 0x02));              // wait until block is erased
    }
    SPCR = 0x00;                            //disable SPI        
}

 
void recording(void)
{   
    unsigned char count;
    // interrupt disabled, SPI port enabled, master mode, MSB first, SPI mode 3, Fcl/4
    SPCR = 0x5C;           
    ADMUX = 0x00;                           // A/D converter input pin number = 0
    ADCSRA = 0xD5;                           // single A/D conversion, fCK/32, conversion now started 
    do
    {
        do
        {
        } while(!(ADCSRA&(1<<ADIF)));         // Wait for A/D conversion to finish
        count = 6;                          
        do                                   // Customize this loop to 66 cycles !!
        {
        } while(--count);                   // wait some cycles
        ADCSRA |= 0x40;                      // start new A/D conversion 
        write_to_flash(ADC-0x1D5);          // read data, convert to 8 bit and store in flash 
    } while (!(PIND & 2));                  // loop while button for recording (button 1) is pressed

    ADCSRA = 0x00;                           // disable AD converter
    SPCR = 0x00;                            // disable SPI        
}

void write_to_flash(unsigned char flash_data)
{
    static unsigned int buffer_counter;
    static unsigned int page_counter;
    
    if((ACSR&CLEARED))                       // if flag is set that new data has to be written
    {
        buffer_counter = 0;
        page_counter = 0;                   // reset the counter if new data has to be written
        ACSR &= (~CLEARED);                       // clear the signal flag
    }

    while(!(PINB & 0x02));                  // check if flash is busy

    PORTB &= ~DF_CHIP_SELECT;               // enable DataFlash
     
    write_SPI(BUFFER_1_WRITE);
    write_SPI(0x00);                         // don't cares
    write_SPI((char)(buffer_counter>>8));    // don't cares plus first two bits of buffer address
    write_SPI((char)buffer_counter);         // buffer address (max. 2^8 = 256 pages)
    write_SPI(flash_data);                   // write data into SPI Data Register
        
    PORTB |= DF_CHIP_SELECT;                // disable DataFlash 
    
    buffer_counter++; 
        
    if (buffer_counter > 528)               // if buffer full write buffer into memory page
    {
        buffer_counter = 0;
        if (page_counter < 4096)            // if memory is not full   
        { 
            PORTB &= ~DF_CHIP_SELECT;       // enable DataFlash

            write_SPI(B1_TO_MM_PAGE_PROG_WITHOUT_ERASE);// write data from buffer1 to page 
            write_SPI((char)(page_counter>>6));
            write_SPI((char)(page_counter<<2));
            write_SPI(0x00);                    // don't cares
        
            PORTB |= DF_CHIP_SELECT;        // disable DataFlash
            page_counter++;
        }
        else
        {
            PORTB |= 0x08;                  // turn LED off
            while (!(PIND & 2));            // wait until button for recording (button 1) is released
        }
    }
}


void playback(void)
{      
    unsigned int page_counter = 0;
    unsigned char active_buffer = 1;        // active buffer = buffer1

    TCCR1A = 0x21;                          // 8 bit PWM, using COM1B
    TCNT1 = 0x00;                           // set counter1 to zero      
    TIFR = 0x04;                            // clear counter1 overflow flag 
    TIMSK = 0x04;                           // enable counter1 overflow interrupt
    TCCR1B = 0x01;                          // counter1 clock prescale = 1
    OCR1B = 0x00;                           // set output compare register B to zero
    
    // interrupt disabled, SPI port enabled, master mode, MSB first,  SPI mode 3, Fcl/4
    SPCR = 0x5C;
        
    next_page_to_next_buffer (active_buffer, page_counter);  // read page0 to buffer1 
        
    while (!(PINB & 0x02));                 // wait until page0 to buffer1 transaction is finished
    
    while ((page_counter < 4095)&(!(PIND & 4))) // while button for playback (button 2) is pressed
    {   
        page_counter++;                     // now take next page
         
        next_page_to_next_buffer (active_buffer, page_counter);         
        active_buffer_to_speaker (active_buffer);        
        
        if (active_buffer == 1)             // if buffer1 is the active buffer
        {
          active_buffer++;                    // set buffer2 as active buffer
        }
        else                                // else
        {
          active_buffer--;                    // set buffer1 as active buffer
        }      
    }
    TIMSK = 0x00;                           // disable all interrupts
    TCCR1B = 0x00;                          // stop counter1
    SPCR = 0x00;                            // disable SPI
}


void next_page_to_next_buffer (unsigned char active_buffer, unsigned int page_counter)
{
    while(!(PINB & 0x02));                  // wait until flash is not busy
    
    PORTB &= ~DF_CHIP_SELECT;               // enable DataFlash
                
    if (active_buffer == 1)                 // if buffer1 is the active buffer
    {
          write_SPI(MM_PAGE_TO_B2_XFER);      // transfer next page to buffer2
    }
    else                                    // else
    {
           write_SPI(MM_PAGE_TO_B2_XFER);          // transfer next page to buffer1
    }
    write_SPI((char)(page_counter >> 6));
    write_SPI((char)(page_counter << 2));
    write_SPI(0x00);

    PORTB |= DF_CHIP_SELECT;                // disable DataFlash and start transaction     
}
 

#pragma vector = TIMER1_OVF_vect
__interrupt void out_now(void)
{
   ACSR |= T1_OVF;                                // an interrupt has occured 
}                          


void active_buffer_to_speaker (unsigned char active_buffer)
{
    // until active buffer not empty read active buffer to speaker
    
    unsigned int buffer_counter = 528;
        
    PORTB &= ~DF_CHIP_SELECT;               // enable DataFlash     

    if (active_buffer == 1)                 // if buffer1 is the active buffer
    {
        write_SPI(BUFFER_1_READ);           // read from buffer1
    }
    else                                    // else
    {
        write_SPI(BUFFER_2_READ);               // read from buffer2
    }
    write_SPI(0x00);                          // write don't care byte
    write_SPI(0x00);                          // write don't care byte
    write_SPI(0x00);                          // start at buffer address 0
    write_SPI(0x00);                          // write don't care byte
         
    do
    {
        write_SPI(0xFF);                     // write dummy value to start register shift
        while(!(ACSR&T1_OVF));                        // wait for timer1 overflow interrupt            
        OCR1B = SPDR;                       // play data from shift register
        ACSR &= (~T1_OVF);                           // clear the signal flag               
     } while (--buffer_counter);                          
     PORTB |= DF_CHIP_SELECT;               // disable DataFlash
}


void main(void)
{   
    setup();
    
    for(;;)
    {       
        if (!(PIND & 2))                    // if button for recording (button 2) is pressed
        {
            PORTB &= 0xF7;                  // turn LED on
            recording();       
        }     
        if (!(PIND & 1))                    // if button for erasing (button 0) is pressed
        {            
            PORTB &= 0xF7;                  // turn LED on
            erasing();
            while (!(PIND & 1));            // wait until button for erasing (button 0) is released          
        }       
        if (!(PIND & 4))                    // if button for playback (button 3) is pressed
        {
            PORTB &= 0xF7;                  // turn LED on      
            playback();
            while (!(PIND & 4));            // wait until button for playback (button 3) is released             
        }
    PORTB |= 0x08;                          // turn LED off while running idle
    }
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产91久久综合桃花| 国产精品久久久久天堂| 国产午夜精品一区二区三区四区| 亚洲精品va在线观看| 国产精品99久久不卡二区| 欧美日韩午夜影院| 亚洲色图.com| 福利一区二区在线| 精品久久久久香蕉网| 亚洲超丰满肉感bbw| 色八戒一区二区三区| 久久精品日产第一区二区三区高清版 | 国产精品萝li| 国产一区二区三区日韩 | 久久蜜桃av一区二区天堂| 亚洲一区二区三区三| av一区二区久久| 欧美国产视频在线| 国产麻豆精品theporn| 日韩一区二区不卡| 蜜臀国产一区二区三区在线播放| 在线观看不卡一区| 亚洲精品ww久久久久久p站| 成人国产免费视频| 日本一区二区三区在线观看| 国产精品99久久久| 国产欧美日韩另类一区| 国产精品一区二区在线播放| 2022国产精品视频| 精品在线播放午夜| 精品国产凹凸成av人网站| 免费观看久久久4p| 欧美成va人片在线观看| 国产揄拍国内精品对白| 久久久久久麻豆| 国产精华液一区二区三区| 国产欧美1区2区3区| 国产成人综合网| 亚洲国产精华液网站w| 成人免费毛片aaaaa**| 国产精品视频yy9299一区| 成人性生交大片免费看在线播放| 国产情人综合久久777777| 成人午夜激情在线| 中文字幕一区免费在线观看| 91天堂素人约啪| 一区二区成人在线| 制服丝袜中文字幕一区| 久久国产剧场电影| 国产精品网站一区| 欧洲中文字幕精品| 美日韩黄色大片| 欧美激情中文字幕| 在线观看日韩av先锋影音电影院| 亚洲线精品一区二区三区八戒| 欧美精品视频www在线观看| 久久爱www久久做| 中文字幕亚洲不卡| 91精品国产福利| 高清视频一区二区| 亚洲一区二区三区国产| 日韩免费在线观看| 色婷婷综合激情| 国内精品国产成人国产三级粉色| 国产精品久久久久久久浪潮网站 | jlzzjlzz欧美大全| 亚洲成人精品一区| 久久久精品天堂| 欧美日韩精品一区二区天天拍小说 | 日本一区二区三区四区| 欧美日韩专区在线| 粉嫩在线一区二区三区视频| 亚洲综合成人在线视频| 国产日韩欧美精品一区| 欧美老年两性高潮| 不卡欧美aaaaa| 国产一区二区三区最好精华液| 一区二区三区四区乱视频| 国产亚洲婷婷免费| 欧美日韩国产一二三| 成人国产在线观看| 韩国成人在线视频| 日韩制服丝袜av| 亚洲精品欧美激情| 中国色在线观看另类| 日韩一区二区三区三四区视频在线观看| 成人的网站免费观看| 麻豆传媒一区二区三区| 亚洲国产综合人成综合网站| 欧美高清在线视频| 精品国产不卡一区二区三区| 91精品国产欧美一区二区成人| 91视频在线观看| 成人听书哪个软件好| 精品在线播放免费| 伦理电影国产精品| 日本最新不卡在线| 丝袜美腿一区二区三区| 亚洲愉拍自拍另类高清精品| 中文字幕一区二区三区在线不卡| 国产午夜精品理论片a级大结局| 日韩午夜av电影| 91精品国产一区二区人妖| 欧美性videosxxxxx| 一本久久精品一区二区| 成人精品鲁一区一区二区| 国产精品88888| 国产成人午夜精品5599| 国产91精品久久久久久久网曝门| 国产精品影视网| 国产精品1024久久| 成人免费视频免费观看| www.爱久久.com| 91在线porny国产在线看| av成人老司机| 日本乱人伦一区| 欧美日韩午夜在线视频| 91麻豆精品国产91久久久久| 3d动漫精品啪啪一区二区竹菊| 337p亚洲精品色噜噜| 欧美电影免费提供在线观看| 欧美va亚洲va国产综合| 久久女同精品一区二区| 国产午夜精品久久久久久久 | 91在线视频观看| 色婷婷av一区二区三区之一色屋| 91九色02白丝porn| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 欧美一级黄色片| www欧美成人18+| 国产欧美一区二区精品性| 中文字幕一区三区| 亚洲高清视频的网址| 美女视频第一区二区三区免费观看网站| 日本成人中文字幕| 国产精品一卡二| 色婷婷av一区| 日韩一区二区高清| 中文乱码免费一区二区| 亚洲精品ww久久久久久p站| 日韩国产精品91| 国产成人精品午夜视频免费| 色婷婷久久久亚洲一区二区三区| 日韩一区二区在线免费观看| 国产偷国产偷亚洲高清人白洁 | 国产精品二三区| 亚洲成av人片| 豆国产96在线|亚洲| 在线观看日韩电影| 久久亚洲免费视频| 一区二区三区不卡在线观看| 久久精品国产亚洲高清剧情介绍| 国产成人精品免费在线| 欧美日韩另类一区| 日本一区二区三区在线不卡| 亚洲成人在线免费| 成人激情免费视频| 精品久久国产字幕高潮| 亚洲男同性视频| 国产一区亚洲一区| 欧美日韩精品电影| 亚洲视频一区二区免费在线观看| 青青草国产精品97视觉盛宴| 99视频精品免费视频| 欧美成人午夜电影| 夜夜操天天操亚洲| 国产a视频精品免费观看| 91精品国产综合久久精品图片| 国产精品初高中害羞小美女文| 日韩成人伦理电影在线观看| 一本色道久久加勒比精品| 久久久无码精品亚洲日韩按摩| 亚洲mv大片欧洲mv大片精品| a美女胸又www黄视频久久| 日韩美女在线视频| 五月婷婷色综合| 在线一区二区三区四区| 欧美激情综合五月色丁香小说| 蜜乳av一区二区三区| 欧美色综合天天久久综合精品| 中文字幕一区二区三区在线观看| 国内精品嫩模私拍在线| 欧美一级二级在线观看| 亚洲国产一区二区视频| 91麻豆高清视频| 国产精品久久久久久久久快鸭 | **欧美大码日韩| 国模大尺度一区二区三区| 欧美日韩在线三级| 一区av在线播放| 91首页免费视频| 日韩美女视频一区二区| 成人夜色视频网站在线观看| 亚洲国产精品精华液ab| 国产精品亚洲综合一区在线观看| 久久综合色之久久综合| 国产资源在线一区| 欧美va亚洲va| 国产精品1区2区3区| 国产欧美一区二区精品性色|