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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sound_system2.c

?? 基于AVR的一個(gè) Sound Recorder的源代碼
?? C
字號(hào):
/*
Erase all pages if desired.
Write data to buffer 1. If buffer is full, write buffer to page.
Read DataFlash alternating through buffer1 and buffer2 into the data register.
*/

#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
    }
} 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re这里只有精品视频首页| 欧美精品成人一区二区三区四区| 一区二区三区欧美在线观看| 日韩精品中午字幕| 一本色道久久综合亚洲精品按摩| 免费观看一级欧美片| 亚洲色图.com| 久久综合色婷婷| 欧美在线一区二区| 丁香激情综合国产| 精品一区二区在线免费观看| 亚洲国产精品久久久久婷婷884| 国产丝袜欧美中文另类| 91精品国产综合久久国产大片| av在线不卡电影| 国产精品中文字幕欧美| 免费美女久久99| 亚洲国产视频网站| 亚洲免费在线看| 国产精品久久福利| 2022国产精品视频| 日韩一区二区电影网| 欧美三级电影在线看| 91免费在线播放| 成人免费高清在线| 福利一区福利二区| 国产一区二区三区不卡在线观看 | 欧美日韩精品一区二区三区四区 | 日本一区二区电影| 精品福利在线导航| 日韩一二三四区| 欧美一级片免费看| 欧美一级日韩免费不卡| 欧美日韩二区三区| 欧美高清一级片在线| 欧美久久婷婷综合色| 欧美肥大bbwbbw高潮| 欧美精品一卡两卡| 欧美日韩国产不卡| 91精品国产综合久久婷婷香蕉 | 91精品福利在线一区二区三区| 欧美图片一区二区三区| 欧美亚一区二区| 在线观看视频一区| 欧美性色欧美a在线播放| 在线观看视频91| 欧美日韩一区不卡| 在线播放/欧美激情| 日韩视频免费直播| 精品国产伦理网| 国产欧美精品一区| 亚洲视频中文字幕| 亚洲一二三区在线观看| 偷偷要91色婷婷| 久久精品二区亚洲w码| 国产伦精品一区二区三区在线观看| 国产自产v一区二区三区c| 国产成人夜色高潮福利影视| 成人免费电影视频| 色狠狠av一区二区三区| 欧美日韩久久不卡| 精品国产一区a| 国产精品天美传媒沈樵| 亚洲色图欧美激情| 天堂av在线一区| 国产一区二区网址| 99re8在线精品视频免费播放| 91福利在线导航| 日韩欧美的一区| 国产精品久久网站| 图片区日韩欧美亚洲| 国产一区二区三区蝌蚪| 91在线视频观看| 欧美一卡2卡三卡4卡5免费| 久久精品欧美日韩精品| 一区二区三区资源| 久久不见久久见免费视频1| 国产成人精品三级| 欧美写真视频网站| 久久久精品免费观看| 亚洲综合一区二区精品导航| 久久99蜜桃精品| 99精品桃花视频在线观看| 欧美日韩aaaaaa| 欧美国产国产综合| 日本最新不卡在线| 99久久精品国产精品久久| 制服丝袜激情欧洲亚洲| 欧美极品少妇xxxxⅹ高跟鞋 | 成人性生交大片免费看视频在线| 色婷婷综合久久久中文字幕| 精品少妇一区二区三区在线视频| 国产精品蜜臀在线观看| 美腿丝袜亚洲色图| 91猫先生在线| 国产欧美日韩中文久久| 天天色综合天天| 91麻豆福利精品推荐| 久久众筹精品私拍模特| 午夜精品一区二区三区免费视频| 风间由美一区二区三区在线观看| 欧美精品自拍偷拍动漫精品| 亚洲日本在线看| 国产福利91精品一区| 欧美日韩在线观看一区二区| 国产精品欧美经典| 国产一区999| 91精品国产色综合久久| 亚洲自拍偷拍综合| 欧美午夜寂寞影院| 国产精品美女久久福利网站| 久久99国产精品久久| 欧美日韩三级视频| 亚洲欧美福利一区二区| 成人黄色小视频在线观看| 日韩免费高清av| 石原莉奈在线亚洲三区| 91国偷自产一区二区开放时间| 中文一区二区完整视频在线观看| 激情国产一区二区 | 欧美高清视频不卡网| 一区二区三区自拍| 91在线精品一区二区| 国产精品久久久一本精品 | 91精品国产高清一区二区三区| 椎名由奈av一区二区三区| 成人免费看片app下载| 欧美激情综合五月色丁香小说| 韩国av一区二区三区在线观看| 日韩欧美亚洲另类制服综合在线| 亚洲国产精品麻豆| 欧美日韩另类国产亚洲欧美一级| 亚洲一区在线看| 在线精品视频一区二区| 亚洲精品国久久99热| 91浏览器在线视频| 亚洲免费在线视频一区 二区| 色综合激情五月| 国产精品一二三四| 久久久久久久av麻豆果冻| 国产尤物一区二区| 国产欧美日产一区| 97久久精品人人澡人人爽| 综合久久一区二区三区| 91福利区一区二区三区| 夜夜精品视频一区二区| 欧美人妇做爰xxxⅹ性高电影| 日韩国产在线观看一区| 日韩欧美高清dvd碟片| 狠狠色综合播放一区二区| 国产欧美日韩三级| 91亚洲精品一区二区乱码| 国产精品福利电影一区二区三区四区 | 久久综合九色综合97婷婷| 国产毛片一区二区| 国产精品不卡一区| 91久久精品一区二区二区| 五月天久久比比资源色| 欧美成人官网二区| 成人午夜精品在线| 亚洲精品国产精华液| 欧美美女bb生活片| 寂寞少妇一区二区三区| 国产精品视频免费看| 91女神在线视频| 首页国产欧美日韩丝袜| 久久久久久久久久久久久久久99| 成人开心网精品视频| 亚洲一区二区三区视频在线| 日韩一级片在线观看| 国产精品一区免费在线观看| 中文字幕一区二区三区视频| 欧美日韩国产一二三| 久久激五月天综合精品| 日本一区二区三级电影在线观看| 色婷婷综合久久久中文一区二区| 蜜桃精品视频在线| 亚洲欧洲成人精品av97| 欧美日韩国产乱码电影| 国产老肥熟一区二区三区| 一级女性全黄久久生活片免费| 91精品黄色片免费大全| 成人毛片在线观看| 日韩经典一区二区| 国产精品美女一区二区三区| 欧美亚洲一区二区在线观看| 国产米奇在线777精品观看| 亚洲综合小说图片| 蜜臂av日日欢夜夜爽一区| 国产精品久久久久久久久久免费看| 欧美日产在线观看| 高清av一区二区| 捆绑调教一区二区三区| 亚洲精品国产无天堂网2021| 久久久久久夜精品精品免费| 欧美午夜宅男影院| av高清久久久| 九一九一国产精品| 亚洲福利国产精品| 亚洲男人天堂一区|