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

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

?? sample.c

?? AVR單片機實現AD采集PWM播放聲音功能
?? C
字號:
#include “io8535.h”
#include <ina90.h>
#include “stdlib.h”
#include “dataflash.h”
// prototypes
void setup (void);
void erasing (void);
void recording (void);
void interrupt[ADC_vect] sample_ready (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 interrupt[TIMER1_OVF1_vect] out_now(void);
void active_buffer_to_speaker (unsigned char active_buffer);
// 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)
	_SEI(); // enable interrupts
}
void erasing(void)
{
	unsigned int block_counter = 0;
	unsigned char temp = 0x80;
	ACSR |= 0x02; // 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
		SPDR = BLOCK_ERASE;
		while (!(SPSR & temp)); // wait for data transfer to be completed
			SPDR = (char)(block_counter>>3);
		while (!(SPSR & temp)); // wait for data transfer to be completed
			SPDR = (char)(block_counter<<5);
		while (!(SPSR & temp)); // wait for data transfer to be completed
			SPDR = 0x00; // don’t cares
		while (!(SPSR & temp)); // wait for data transfer to be completed
			PORTB |= DF_CHIP_SELECT; // disable DataFlash
		block_counter++;
		while(!(PINB & 0x02)); // wait until block is erased
	}
	SPCR = 0x00; //disable SPI
}
void recording(void)
{
	// 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
	ADCSR = 0xDD; // single A/D conversion, fCK/32,
	// conversion now started
	while (!(PIND & 8)); // loop while button for recording (button
	// 3) is pressed
	ADCSR = 0x00; // disable AD converter
	SPCR = 0x00; // disable SPI
}
void interrupt[ADC_vect] sample_ready(void)
{
	unsigned char count = 0;
	while (count < 6) count++; // wait some cycles
	ADCSR |= 0x40; // start new A/D conversion
	write_to_flash(ADC-0x1D5); // read data, convert to 8 bit
	// and store in flash
}
void write_to_flash(unsigned char flash_data)
{
	static unsigned int buffer_counter;
	static unsigned int page_counter;
	unsigned char temp = 0x80;
	if((ACSR & 0x02)) // 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 &= 0xFD; // clear the signal flag
	}
	while(!(PINB & 0x02)); // check if flash is busy
		PORTB &= ~DF_CHIP_SELECT; // enable DataFlash
		SPDR = BUFFER_1_WRITE;
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = 0x00; // don’t cares
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = (char)(buffer_counter>>8);// don’t cares plus first two bits
		// of buffer address
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = (char)buffer_counter; // buffer address (max. 2^8 = 256 pages)
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = flash_data; // write data into SPI Data Register
	while (!(SPSR & temp)); // wait for data transfer to be completed
		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
			SPDR = B1_TO_MM_PAGE_PROG_WITHOUT_ERASE;// write data from
			//buffer1 to page
			while (!(SPSR & temp)); // wait for data transfer to be completed
				SPDR = (char)(page_counter>>6);
			while (!(SPSR & temp));// wait for data transfer to be completed
				SPDR = (char)(page_counter<<2);
			while (!(SPSR & temp)); // wait for data transfer to be completed
				SPDR = 0x00; // don’t cares
			while (!(SPSR & temp)); // wait for data transfer to be completed
				PORTB |= DF_CHIP_SELECT;// disable DataFlash
				page_counter++;
		}
		else
		{
			PORTB |= 0x08; // turn LED off
			while (!(PIND & 8)); // wait until button for recording
			// (button 3) is released
		}
	}
}
void playback(void)
{
	unsigned int page_counter = 0;
	unsigned int buffer_counter = 0;
	unsigned char active_buffer = 1;// active buffer = buffer1
	unsigned char temp = 0x80;
	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;
	// read page0 to buffer1
	next_page_to_next_buffer (active_buffer, page_counter);
	while (!(PINB & 0x02)); // wait until page0 to buffer1
	// transaction is finished
	while ((page_counter < 4095)&(!(PIND & 2)))// while button for playback
	// (button 1) 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)
{
	unsigned char temp = 0x80;
	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
	{
		SPDR = MM_PAGE_TO_B2_XFER; // transfer next page to buffer2
	}
	else // else
	{
		SPDR = MM_PAGE_TO_B1_XFER; // transfer next page to buffer1
	}
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = (char)(page_counter >> 6);
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = (char)(page_counter << 2);
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = 0x00; // write don’t care byte
	while (!(SPSR & temp)); // wait for data transfer to be completed
	PORTB |= DF_CHIP_SELECT; // disable DataFlash and start transaction
}

void interrupt[TIMER1_OVF1_vect] out_now(void)
{
	wait = 0; // 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 = 0;
	unsigned char temp = 0x80;
	PORTB &= ~DF_CHIP_SELECT; // enable DataFlash
	if (active_buffer == 1) // if buffer1 is the active buffer
	{
		SPDR = BUFFER_1_READ; // read from buffer1
	}
	else // else
	{
		SPDR = BUFFER_2_READ; // read from buffer2
	}
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = 0x00; // write don’t care byte
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = 0x00; // write don’t care byte
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = 0x00; // start at buffer address 0
	while (!(SPSR & temp)); // wait for data transfer to be completed
		SPDR = 0x00; // write don’t care byte
	while (!(SPSR & temp)); // wait for data transfer to be completed
	while (buffer_counter < 528)
	{
		SPDR = 0xFF; // write dummy value to start register shift
		while (!(SPSR & temp)); // wait for data transfer to be completed
		while(wait); // wait for timer1 overflow interrupt
		OCR1B = SPDR; // play data from shift register
		wait = 1; // clear the signal flag
		buffer_counter++;
	}
	PORTB |= DF_CHIP_SELECT; // disable DataFlash
}
void main(void)
{
	setup();
	for(;;)
	{
		if (!(PIND & 8)) // if button for recording (button 3)
		// is pressed
		{
			PORTB &= 0xF7; // turn LED on
			recording();
		}
		if (!(PIND & 4)) // if button for erasing (button 2)
		// is pressed
		{
			PORTB &= 0xF7; // turn LED on
			erasing();
			while (!(PIND & 4));// wait until button for erasing (button 2)
			// is released
		}
		if (!(PIND & 2)) // if button for playback (button 1)
		// is pressed
		{
			PORTB &= 0xF7; // turn LED on
			playback();
			while (!(PIND & 2));// wait until button for playback (button 1)
			// is released
		}
		PORTB |= 0x08; // turn LED off while running idle
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清不卡在线| 一区二区三区美女视频| 国产视频一区在线观看| 亚洲制服丝袜av| 麻豆国产精品视频| 国产精品一区二区久激情瑜伽| 久99久精品视频免费观看| 91蝌蚪porny| 欧美一区二区三区免费| 国产精品全国免费观看高清| 久久99精品久久久久婷婷| 成+人+亚洲+综合天堂| 欧美日韩精品一区二区三区蜜桃| 中文字幕高清不卡| 奇米四色…亚洲| 99国产精品久久久久| 国产日本一区二区| 无吗不卡中文字幕| 91在线porny国产在线看| 亚洲乱码国产乱码精品精的特点| 蜜桃精品在线观看| 日本道免费精品一区二区三区| 欧美一区二区视频在线观看| 中文字幕在线不卡视频| 久国产精品韩国三级视频| 91啪亚洲精品| 中文字幕一区av| 国产一区二区美女诱惑| 欧美一级黄色片| 日韩综合在线视频| 欧美亚洲国产一区二区三区va| 中文字幕成人网| 人人精品人人爱| 欧美日本韩国一区| 亚洲一区在线观看网站| 欧美色男人天堂| 亚洲综合丝袜美腿| 色伊人久久综合中文字幕| ㊣最新国产の精品bt伙计久久| 国产99久久久精品| 国产欧美在线观看一区| 成人涩涩免费视频| 国产香蕉久久精品综合网| 国产在线不卡一区| 欧美韩国日本不卡| 国产iv一区二区三区| 国产欧美一区二区精品仙草咪| 国产精品一区二区黑丝| 国产校园另类小说区| 国产一区二区影院| 亚洲欧洲一区二区在线播放| 日韩欧美第一区| 日本道免费精品一区二区三区| 亚洲免费观看高清完整版在线观看| 国产中文字幕一区| 岛国av在线一区| 国产午夜精品一区二区三区视频 | 欧美人动与zoxxxx乱| 日韩av午夜在线观看| 欧美精品777| 麻豆精品一二三| 亚洲午夜日本在线观看| 91久久精品网| 亚洲一二三专区| 欧美电视剧在线看免费| 国产曰批免费观看久久久| 日本一区二区三区国色天香| 色婷婷精品大视频在线蜜桃视频| 亚洲精品日韩专区silk| 欧美精品在线观看播放| 最近日韩中文字幕| 8v天堂国产在线一区二区| 六月丁香综合在线视频| 欧美精品一区二区三区在线| 成人aa视频在线观看| 香蕉久久夜色精品国产使用方法| 欧美日韩夫妻久久| 成人av电影免费观看| 亚洲国产精品麻豆| 欧美va天堂va视频va在线| 在线观看91精品国产入口| 精品一区二区三区香蕉蜜桃| 国产精品另类一区| 日韩美女天天操| 99精品国产91久久久久久| 日本欧美大码aⅴ在线播放| 中文字幕一区免费在线观看 | 成人国产精品免费网站| 奇米亚洲午夜久久精品| 国产精品国产三级国产有无不卡| 欧美性感一区二区三区| 久久99日本精品| 亚洲欧美色图小说| 久久久美女毛片| 666欧美在线视频| 91亚洲精品久久久蜜桃| 日本黄色一区二区| 国产91精品精华液一区二区三区| 婷婷丁香激情综合| 亚洲色图另类专区| 91精品国产综合久久久久久漫画| 色8久久精品久久久久久蜜| 国内精品久久久久影院色 | 中文字幕av一区二区三区高 | 亚洲天堂免费在线观看视频| 欧美大片在线观看| 91九色最新地址| 91免费观看国产| 国产一区不卡精品| 日韩av电影免费观看高清完整版| 中文幕一区二区三区久久蜜桃| 欧美一区二区三区免费观看视频| 在线视频你懂得一区| 国产一区二区在线看| 理论电影国产精品| 日韩成人av影视| 一区二区在线免费| 亚洲丰满少妇videoshd| 亚洲少妇30p| 亚洲欧洲一区二区在线播放| 最新成人av在线| 亚洲欧洲日本在线| 久久综合色8888| 久久伊人蜜桃av一区二区| 欧美一区二区视频免费观看| 欧美在线你懂得| 欧美一区二区在线免费播放| 欧美日韩国产高清一区二区三区| 色综合久久综合网| 在线观看区一区二| 欧美色涩在线第一页| 在线精品视频免费播放| 91精品一区二区三区久久久久久| 欧美三级中文字幕| 欧美久久一二区| 精品国产麻豆免费人成网站| 日韩美女天天操| 精品久久久久久久久久久久久久久久久 | 一二三四社区欧美黄| 亚洲视频狠狠干| 亚洲精品老司机| 亚洲摸摸操操av| 日韩精品成人一区二区三区| 天天做天天摸天天爽国产一区 | 天天操天天综合网| 日本女人一区二区三区| 国产a视频精品免费观看| 成人一级片在线观看| 暴力调教一区二区三区| 色婷婷综合久久久久中文| 777午夜精品免费视频| 国产性天天综合网| 亚洲成精国产精品女| 国产精品一二三四区| 在线看日韩精品电影| 亚洲精品在线一区二区| 亚洲精品国产精华液| 九九精品视频在线看| 91黄色激情网站| 久久久.com| 日本中文字幕不卡| av网站免费线看精品| 日韩一级黄色片| 夜夜嗨av一区二区三区中文字幕| 久久99精品久久久久| 欧美亚洲国产一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 亚洲mv大片欧洲mv大片精品| 成人a区在线观看| 日韩视频一区在线观看| 亚洲柠檬福利资源导航| 国产精品自在欧美一区| 欧美猛男男办公室激情| 悠悠色在线精品| 国产乱码精品一区二区三区av| 欧美日韩一区二区三区在线| 国产精品女同一区二区三区| 看片的网站亚洲| 欧美精品在线视频| 一区二区理论电影在线观看| www.欧美.com| 国产欧美日韩在线视频| 麻豆91在线看| 欧美精品九九99久久| 一区二区三区中文字幕| 91丝袜美女网| 中文字幕视频一区二区三区久| 国内精品久久久久影院色| 欧美mv日韩mv| 久久精品国产99国产| 9191成人精品久久| 首页国产丝袜综合| 欧美揉bbbbb揉bbbbb| 亚洲午夜精品一区二区三区他趣| 97久久超碰国产精品| 中文字幕一区二区三中文字幕| 国产酒店精品激情| 久久婷婷久久一区二区三区| 国产一区二区在线观看免费| 久久久亚洲精品石原莉奈|