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

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

?? dso.c

?? STM32手持式示波器源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	DispButton();

	DispFrame();	/* 繪制刻度框 */
	DispChInfo();	/* 顯示通道信息(幅度,時間檔位) */

	DispCh1Wave();	/* 顯示波形1 */	
	DispCh2Wave();	/* 顯示波形2 */	
}

/*******************************************************************************
*	函數名: InitDsoParam
*	輸  入:	無
*	輸  出:	無
*	功  能:初始化全局參數變量
*/
static void InitDsoParam(void)
{
	g_DSO.Ch1Attenuation = 23;	/* 設置缺省衰減系數 */
	g_DSO.Ch2Attenuation = 23;	/* 設置缺省衰減系數 */
	g_DSO.Ch1VScale = 1000;	/* 缺省是1V */
	g_DSO.Ch2VScale = 1000;	/* 缺省是1V */

	g_DSO.Ch1VOffset = 70; 	/* 通道1 GND線位置 */
	g_DSO.Ch2VOffset = 170; /* 通道2 GND線位置 */

	g_DSO.ActiveCH = 1;		/* 缺省是CH1 */
	g_DSO.AdjustMode = 1;	/* 缺省是調節垂直偏移, 可以切換到2調節幅度 */

	g_DSO.HoldEn = 0;

	g_DSO.TimeBaseId = 0;									 
	g_DSO.TimeBase = 	g_TimeTable[g_DSO.TimeBaseId];
	g_DSO.SampleFreq = 25000000 / g_DSO.TimeBase;


	g_DSO.Ch1AttId = 2;
	g_DSO.Ch1Attenuation = g_AttTable[g_DSO.Ch1AttId][0];
	g_DSO.Ch1VScale =  g_AttTable[g_DSO.Ch1AttId][1];

	g_DSO.Ch2AttId = 2;
	g_DSO.Ch2Attenuation = g_AttTable[g_DSO.Ch2AttId][0];
	g_DSO.Ch2VScale =  g_AttTable[g_DSO.Ch2AttId][1];

}

/*******************************************************************************
*	函數名: IncSampleFreq
*	輸  入:	無
*	輸  出:	無
*	功  能:增加采樣頻率,按 1-2-5 
*	
*	時間軸分度(每1個大格的時長)
		20us 	      1250000
		50us 		   500000
		100us		   250000
		200us		   125000
		500us		    50000
		1ms				 2500
		2ms				 1250
		5ms				  500 
		10ms			  250
		20ms			  125
		50ms			   50
		100ms			   25

//		200ms			   12.5
//		500ms			    5

	g_DSO.TimeScale = 25000000 / g_DSO.SampleRate;
*/
static void IncSampleFreq(void)
{
	if (g_DSO.TimeBaseId < (sizeof(g_TimeTable) / 4) - 1)
	{
		g_DSO.TimeBaseId++;
	}
													 
	g_DSO.TimeBase = 	g_TimeTable[g_DSO.TimeBaseId];
	g_DSO.SampleFreq = 25000000 / g_DSO.TimeBase;

	SetSampRate(g_DSO.SampleFreq);	/* 改變采樣頻率 */
}

/*******************************************************************************
*	函數名: IncSampleFreq
*	輸  入:	無
*	輸  出:	無
*	功  能:降低采樣頻率,按 1-2-5 
*/
static void DecSampleFreq(void)
{
	if (g_DSO.TimeBaseId > 0)
	{
		g_DSO.TimeBaseId--;
	}
													 
	g_DSO.TimeBase = g_TimeTable[g_DSO.TimeBaseId];
	g_DSO.SampleFreq = 25000000 / g_DSO.TimeBase;

	SetSampRate(g_DSO.SampleFreq);	/* 改變采樣頻率 */
}

/*******************************************************************************
*	函數名: DecAttenuation
*	輸  入:	ch   : 通道號,1或2
*			mode : 0 降低, 1增加
*	輸  出:	無
*	功  能:降低衰減,按 1-2-5 
*/
static void AdjustAtt(uint8_t ch, uint8_t mode)
{

	if (ch == 1)
	{
		if (mode == 0) 	/* 降低 */
		{
			if (g_DSO.Ch1AttId > 0)
			{
				g_DSO.Ch1AttId--;
			}
		}
		else		/* 增加 */
		{
			if (g_DSO.Ch1AttId < ATT_COUNT - 1)
			{
				g_DSO.Ch1AttId++;
			}
		}

		g_DSO.Ch1Attenuation = g_AttTable[g_DSO.Ch1AttId][0];
		g_DSO.Ch1VScale =  g_AttTable[g_DSO.Ch1AttId][1];
	}
	else if (ch == 2)
	{
		if (mode == 0) 	/* 降低 */
		{
			if (g_DSO.Ch2AttId > 0)
			{
				g_DSO.Ch2AttId--;
			}
		}
		else		/* 增加 */
		{
			if (g_DSO.Ch2AttId < ATT_COUNT - 1)
			{
				g_DSO.Ch2AttId++;
			}
		}
		g_DSO.Ch2Attenuation = g_AttTable[g_DSO.Ch2AttId][0];
		g_DSO.Ch2VScale =  g_AttTable[g_DSO.Ch2AttId][1];
	}
}

/*******************************************************************************
*	函數名: StopADC
*	輸  入:	無
*	輸  出:	無
*	功  能:暫停ADC采樣
*/
static void StopADC(void)
{
	TIM_Cmd(TIM1, DISABLE);

	/* Enable DMA1 channel1 */
	DMA_Cmd(DMA1_Channel1, DISABLE);
	
	/* Enable DMA2 channel5 */
	DMA_Cmd(DMA2_Channel5, DISABLE);
}

/*******************************************************************************
*	函數名: StopADC
*	輸  入:	無
*	輸  出:	無
*	功  能:暫停ADC采樣
*/
static void StartADC(void)
{
#if 1
	DMA_InitTypeDef DMA_InitStructure;

	DMA_DeInit(DMA1_Channel1);		/* 復位DMA1寄存器到缺省狀態 */
	DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;	/* 選擇ADC1的數據寄存器作為源 */
	DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&g_DSO.Ch1Buf;	/* 目標地址 */
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;	/* 設置DMA傳輸方向,外設(ADC)作為源 */
	DMA_InitStructure.DMA_BufferSize = SAMPLE_COUNT;	/* 設置緩沖區大小 */
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;	/* 外設地址不自增 */
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;	/* 存儲器地址需要自增 */
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;	/* 選擇外設傳輸單位:16bit */
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;	/* 選擇內存傳輸單位:16bit */
	DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;	/* 無需循環模式   */
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;	/* 選擇DMA優先級 */
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;	/* DMA傳輸類型,不是內存到內存 */
	DMA_Init(DMA1_Channel1, &DMA_InitStructure);

	DMA_DeInit(DMA2_Channel5);		/* 復位DMA2寄存器到缺省狀態 */
	DMA_InitStructure.DMA_PeripheralBaseAddr = ADC3_DR_Address;	/* 選擇ADC1的數據寄存器作為源 */
	DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&g_DSO.Ch2Buf;	/* 目標地址 */
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;	/* 設置DMA傳輸方向,外設(ADC)作為源 */
	DMA_InitStructure.DMA_BufferSize = SAMPLE_COUNT;	/* 設置緩沖區大小 */
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;	/* 外設地址不自增 */
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;	/* 存儲器地址需要自增 */
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;	/* 選擇外設傳輸單位:16bit */
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;	/* 選擇內存傳輸單位:16bit */
	DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;	/* 無需循環模式   */
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;	/* 選擇DMA優先級 */
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;	/* DMA傳輸類型,不是內存到內存 */
	DMA_Init(DMA2_Channel5, &DMA_InitStructure);
#endif

	/* Enable DMA2 channel5 */
	DMA_Cmd(DMA1_Channel1, ENABLE);

	/* Enable DMA2 channel5 */
	DMA_Cmd(DMA2_Channel5, ENABLE);

	TIM_Cmd(TIM1, ENABLE);
}

/*******************************************************************************
*	函數名: DsoRun
*	輸  入:	無
*	輸  出:	無
*	功  能:DSO全速運行狀態
*/
static void DsoRun(uint8_t *pMainStatus)
{
	uint8_t KeyCode;
	uint8_t fRefresh = 1;	/* LCD刷新標志 */

	InitDsoParam();	/* 初始化示波器參數 */

	InitDSO();		/* 配置示波器用到的外設:ADC,TIM,DMA等 */

	LCD_Clear(Blue);  			/* 清屏,背景藍色 */
	LCD_SetBackColor(Blue);		/* 設置文字背景顏色 */

	LCD_SetTextColor(White);	/* 設置文字顏色 */

	StartTimer(1, 150);		/* 啟動定時器1,100ms刷新1次 */
	while (*pMainStatus == S_RUN)
	{
		CPU_IDLE();

		if (fRefresh)
		{
			fRefresh = 0;

			//StopADC();	/* 暫停采樣 */
			if (g_DSO.HoldEn == 1)
			{
				DispDSO();
			}
			//StartADC();	/* 開始采樣 */
		}

		if (CheckTimer(1))
		{
			StartTimer(1, 150);		/* 啟動定時器1,100ms刷新1次 */

			/* 運行狀態。每隔100ms刷新1次波形 */
			if (g_DSO.HoldEn == 0)
			{
				StopADC();	/* 暫停采樣 */
				DispDSO();
				StartADC();	/* 開始采樣 */
			}
		}

		/* 讀取按鍵,大于0表示有鍵按下 */
		KeyCode = GetKey();
		if (KeyCode > 0)
		{
			/* 有鍵按下 */
			switch (KeyCode)
			{
				case  KEY_DOWN_TAMPER:	/* TAMPER 鍵,通道選擇(CH1或CH2) */
					if (g_DSO.ActiveCH == 1)
					{
						g_DSO.ActiveCH = 2;
					}
					else
					{
						g_DSO.ActiveCH = 1;
					}
					fRefresh = 1;		/* 請求刷新LCD */
					break;

				case  KEY_DOWN_WAKEUP:	/* WAKEUP 鍵, 調節模式選擇(幅度或者垂直偏移) */
					/* 退出,進入全速運行狀態 */
					*pMainStatus = S_HELP;
					break;

				case  KEY_DOWN_USER:	/* USER 鍵 */
					if (g_DSO.HoldEn == 0)
					{
						g_DSO.HoldEn = 1;

						/* 保存暫停時的時基,為了水平擴展用 */
						g_DSO.TimeBaseIdHold = g_DSO.TimeBaseId;	

						StopADC();
					}
					else
					{
						g_DSO.HoldEn = 0;
						StartADC();				
					}
					fRefresh = 1;		/* 請求刷新LCD */
					break;

				case KEY_DOWN_JOY_LEFT:	/* 搖桿LEFT鍵按下 */
					if (g_DSO.HoldEn == 0)
					{
						DecSampleFreq();	/* 遞減采樣頻率 */
						fRefresh = 1;		/* 請求刷新LCD */
					}
					else
					{
						; /* 波形水平移動,待完善 */
					}
					break;

				case KEY_DOWN_JOY_RIGHT:	/* 搖桿RIGHT鍵按下 */
					if (g_DSO.HoldEn == 0)
					{
						IncSampleFreq();  	/* 遞增采樣頻率 */					
						fRefresh = 1;		/* 請求刷新LCD */
					}
					else
					{
						; /* 波形水平移動,待完善 */
					}
					break;

				case  KEY_DOWN_JOY_OK:	/* 搖桿OK鍵 */
					if (g_DSO.AdjustMode == 0)
					{
						g_DSO.AdjustMode = 1;
					}
					else
					{
						g_DSO.AdjustMode = 0;
					}
					fRefresh = 1;		/* 請求刷新LCD */
					break;

				case KEY_DOWN_JOY_UP:	/* 搖桿UP鍵按下 */
					if (g_DSO.ActiveCH == 1) 	/* 當前激活的是CH1 */
					{
						if (g_DSO.AdjustMode == 0)	/* 調節幅度放大倍數 */
						{
							AdjustAtt(1, 1);
						}
						else 	/* 調節上下偏移 */
						{
							g_DSO.Ch1VOffset -= 5;
						}
					}
					else	/* 當前激活的是CH2 */
					{
						if (g_DSO.AdjustMode == 0)	/* 調節幅度放大倍數 */
						{
							AdjustAtt(2, 1);
						}
						else 	/* 調節上下偏移 */
						{
							g_DSO.Ch2VOffset -= 5;
						}
					}
					fRefresh = 1;		/* 請求刷新LCD */
					break;

				case KEY_DOWN_JOY_DOWN:		/* 搖桿DOWN鍵按下 */
					if (g_DSO.ActiveCH == 1) 	/* 當前激活的是CH1 */
					{
						if (g_DSO.AdjustMode == 0)	/* 調節幅度放大倍數 */
						{
							AdjustAtt(1, 0);
						}
						else 	/* 調節上下偏移 */
						{
							g_DSO.Ch1VOffset += 5;
						}
					}
					else	/* 當前激活的是CH2 */
					{
						if (g_DSO.AdjustMode == 0)	/* 調節幅度放大倍數 */
						{
							AdjustAtt(2, 0);
						}
						else 	/* 調節上下偏移 */
						{
							g_DSO.Ch2VOffset += 5;
						}
					}
					fRefresh = 1;		/* 請求刷新LCD */
					break;

				default:
					break;
			}
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷夜色潮精品综合在线| 91国内精品野花午夜精品| 91麻豆6部合集magnet| 欧美一区二视频| 亚洲欧洲日韩在线| 日韩成人伦理电影在线观看| 成人美女视频在线看| 欧美军同video69gay| 中文字幕精品一区| 久久成人精品无人区| 欧美久久久一区| 日韩理论片中文av| 国产+成+人+亚洲欧洲自线| 26uuu精品一区二区三区四区在线| 国产精品久99| 国产精品12区| 欧美成人vr18sexvr| 午夜精品久久久| 在线欧美日韩精品| 国产精品视频在线看| 激情久久五月天| 欧美精三区欧美精三区| 亚洲男同1069视频| 日韩不卡一区二区三区 | 欧美日韩国产高清一区| 国产精品久久二区二区| 东方aⅴ免费观看久久av| 精品久久久久香蕉网| 久久成人18免费观看| 欧美一区二区女人| 青青草原综合久久大伊人精品| 欧美三级日韩在线| 五月激情综合色| 欧美精品99久久久**| 亚洲动漫第一页| 欧美日韩国产不卡| 婷婷开心久久网| 欧美一区国产二区| 久久99久久99| 国产日韩av一区二区| 国产精品99久久久久久似苏梦涵 | 久久99这里只有精品| 精品黑人一区二区三区久久| 久久99在线观看| 久久婷婷久久一区二区三区| 国产综合久久久久久鬼色| 久久蜜桃一区二区| 国产精华液一区二区三区| 国产日韩欧美精品综合| 成人一区二区视频| 亚洲欧美日本在线| 精品视频一区二区不卡| 亚洲成人自拍网| 日韩精品中文字幕一区| 国产精品88888| 中文字幕制服丝袜一区二区三区| 99re这里都是精品| 亚洲第一电影网| 日韩一级大片在线| 成人性生交大片免费看视频在线| 亚洲天堂免费看| 欧美精品一级二级三级| 国模娜娜一区二区三区| 综合在线观看色| 欧美一区二区三区在线观看| 国产一区二区三区黄视频 | 国产欧美一区二区精品性色超碰 | 精品制服美女丁香| 日本午夜精品视频在线观看 | 欧美日韩在线综合| 国产一区二区精品在线观看| 国产精品久久久久久久久免费桃花 | 色综合久久久久综合| 天天操天天综合网| 国产日韩欧美a| 欧美丰满美乳xxx高潮www| 国产成人在线网站| 日本三级亚洲精品| 日韩美女视频一区二区| 欧美一区二区视频在线观看2022| 国产成人亚洲综合a∨猫咪| 亚洲综合在线免费观看| 国产亚洲欧美日韩日本| 这里只有精品免费| 91丨porny丨中文| 国产一区在线精品| 欧美a级理论片| 一区二区三区蜜桃| 国产精品毛片久久久久久| 日韩一区二区三区在线视频| 色综合色综合色综合| 国产精品一色哟哟哟| 视频在线观看91| 亚洲女厕所小便bbb| 精品成人一区二区三区| 在线观看日韩高清av| 国产在线精品国自产拍免费| 亚洲欧美韩国综合色| 日韩一区二区中文字幕| 成av人片一区二区| 久久成人免费网| 亚洲欧美电影一区二区| 26uuu亚洲综合色欧美| 色综合一区二区三区| 久久精工是国产品牌吗| 一区二区三区国产精华| 久久精品夜夜夜夜久久| 欧美一级xxx| 欧美人狂配大交3d怪物一区| 成a人片亚洲日本久久| 丁香天五香天堂综合| 久久97超碰色| 热久久国产精品| 亚洲制服欧美中文字幕中文字幕| 欧美经典一区二区三区| 日韩一级片网站| 欧美丰满少妇xxxxx高潮对白 | 欧美成人video| 欧美熟乱第一页| 91官网在线免费观看| 91亚洲国产成人精品一区二区三| 国精品**一区二区三区在线蜜桃| 亚洲va国产va欧美va观看| 国产日韩影视精品| 国产精品乱码久久久久久| 精品日韩在线观看| 日韩精品一区国产麻豆| 日韩视频免费观看高清完整版在线观看 | 亚洲精品一区二区三区蜜桃下载| 日韩一区二区三区三四区视频在线观看 | 亚洲二区在线视频| 亚洲大尺度视频在线观看| 亚洲一区二区三区激情| 一区二区三区中文字幕在线观看| 国产精品久久网站| 综合久久久久久| 久久影院视频免费| 国产欧美精品国产国产专区| 欧美韩国日本不卡| 国产精品国产三级国产有无不卡| 精品成人一区二区| 国产色91在线| 中文字幕在线一区| 亚洲手机成人高清视频| 亚洲乱码中文字幕| 亚洲在线视频免费观看| 久久国内精品自在自线400部| 蜜桃视频在线观看一区二区| 老司机精品视频一区二区三区| 久88久久88久久久| 国产成人午夜99999| 成人高清在线视频| 成人高清视频免费观看| 欧美久久久久中文字幕| 日韩一级二级三级| 欧美国产日本韩| 亚洲精品免费看| 蜜臀av在线播放一区二区三区| 国产不卡视频一区| 欧美在线观看视频一区二区| 欧美精品粉嫩高潮一区二区| 欧美成人一区二区三区| 国产午夜三级一区二区三| 亚洲人精品午夜| 国产专区综合网| 日本韩国精品在线| 日韩无一区二区| 亚洲视频香蕉人妖| 日韩av在线播放中文字幕| 日韩福利电影在线观看| 91在线精品一区二区| 91精品黄色片免费大全| 国产三级一区二区| 亚洲电影欧美电影有声小说| 韩国理伦片一区二区三区在线播放| 91免费国产视频网站| 欧美成人r级一区二区三区| 综合av第一页| 韩国毛片一区二区三区| 欧美日韩午夜在线| 久久久美女毛片| 蜜臀av一区二区在线免费观看 | 狠狠色丁香婷婷综合| 色综合天天性综合| 欧美电视剧在线观看完整版| 国产精品电影一区二区| 久久国产精品一区二区| 在线亚洲欧美专区二区| www国产精品av| 日韩高清不卡一区| 成人中文字幕电影| 精品国产乱码久久久久久1区2区 | 国产一区二区在线看| 日韩欧美国产精品一区| 亚洲日本免费电影| 国产成人免费网站| 欧美变态tickling挠脚心| 亚洲妇女屁股眼交7| 精品污污网站免费看| 亚洲精品中文在线|