定时器&&定时调用&&延时调用

setInterval(回调函数,每次调用间隔时间)

返回值:返回一个Number类型的数据,用来作为唯一标识

clearInterval关闭定时器

		<script type="text/javascript">
			window.onload = function(){
				var count = document.getElementById("count");
				//每间隔一段时间执行一次,可以使用定时调用
				/*for(var i = 0;i<10;i++){
					count.innerHTML = i;
				}*/
				//定时调用
				//1回调函数2每次间隔时间(ms)
				//返回值:返回一个Number类型的数据,
				var num = 1;
				
				var timer = setInterval(function(){
					count.innerHTML = num++;
					if(num==11){
						clearInterval(timer);
					}
				},1000);
				//关闭定时器
				//clearInterval()
			}
			
		</script>

定时切换图片

		<script type="text/javascript">
			window.onload = function(){
				//自动切换
				var img1 = document.getElementById("img1");
				
				var imgArr = ["img/1.jpg","img/77B65B8382D22ACC8DBED7C0FA9DF602.gif","img/v2-55c82c3467fafc796cd2c2dea5c1498f.jpg"];
			
				var index = 0;//保存索引
				var timer;
				
				var btn01 = document.getElementById("btn01");
				btn01.onclick = function(){
					//每点击一次就开启一个定时器,点击多次,开启多个,导致图片切换速度过快,并且只能关闭最后一次开启的定时器
					//在开启定时器之前,需要将当前的其他定时器关闭,
					clearInterval(timer);
					timer = setInterval(function(){	
					
					index++;
					//修改属性
					/*if(index>= imgArr.length){
						index = 0;
					}*/
					index = index%imgArr.length;
					
					img1.src = imgArr[index];
				},1000);
				}
				var btn02 = document.getElementById("btn02");
				btn02.onclick = function(){
					clearInterval(timer);//可以接受任意的参数,如果参数是一个有效的定时器标识,则停止对应的标识,如果不是不进行操作
					
				}
				
			}
		</script>

使用定时调用使图片的移动平顺不卡顿

		<script type="text/javascript">
			window.onload = function(){
				var box1 = document.getElementById("box1");
				var speed = 10;	
				var dir = 0;//方向
				
				
					//开启定时器控制控制div的移动
					setInterval(function(){
						switch(dir){
						case 37:
							box1.style.left = box1.offsetLeft - 10 +"px";
							break;
						case 38:
							box1.style.left = box1.offsetLeft + 10 +"px";
							break;
						case 39:
							box1.style.top  = box1.offsetTop - 10 +"px";
							break;
						case 40:	
							box1.style.top  = box1.offsetTop + 10 +"px";
							break;
					}
					},30);
				document.onkeydown = function(event){
					event = event  || window.event;
					
					
					if(event.ctrlKey){
						speed = 200;
					}else{
						speed = 10;
					}
					dir = event.keyCode;	
					
				};
				document.onkeyup =  function(){
					dir = 0;
				}
			};
		</script>

延时调用

		<script type="text/javascript">
			var num = 1;
			/*setInterval(function(){
				console.log(num++);
			},3000);
			*/
			//延时调用:函数不马上执行,一段时间以后再执行 ,,只执行一次
			//延时和定时可以互相代替,
			var timer = setTimeout(function(){
				console.log("1");
			},10000);
			clearTimeout(timer);//关闭延时调用
		</script>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于STM32F103C8T6芯片的流水灯和滴答定时器的代码: 首先,需要在STM32CubeMX中配置GPIO口,将LED的引脚设置为输出,并将滴答定时器TIM3的时钟频率设置为1kHz。然后生成代码并导入到工程中。 接下来是代码的实现: ```c #include "main.h" #include "stm32f1xx_hal.h" /* Private variables */ TIM_HandleTypeDef htim3; /* Private function prototypes */ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM3_Init(void); int main(void) { /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM3_Init(); /* Start the timer */ HAL_TIM_Base_Start(&htim3); /* Infinite loop */ while (1) { for (int i = 0; i < 8; i++) { // 8个LED灯循环点亮 HAL_GPIO_WritePin(GPIOB, 1 << i, GPIO_PIN_SET); // 设置GPIOB的第i个引脚为高电平 HAL_Delay(100); // 延时100ms HAL_GPIO_WritePin(GPIOB, 1 << i, GPIO_PIN_RESET); // 设置GPIOB的第i个引脚为低电平 } } } /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /** * @brief TIM3 Initialization Function * @param None * @retval None */ static void MX_TIM3_Init(void) { /* USER CODE BEGIN TIM3_Init 0 */ /* USER CODE END TIM3_Init 0 */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; /* USER CODE BEGIN TIM3_Init 1 */ /* USER CODE END TIM3_Init 1 */ htim3.Instance = TIM3; htim3.Init.Prescaler = 72000 - 1; // 分频器为72000,计数器时钟为1kHz htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 1000 - 1; // 计数器计数到1000时为1s htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM3_Init 2 */ /* USER CODE END TIM3_Init 2 */ } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET); /*Configure GPIO pins : PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } ``` 在代码中,使用了一个for循环将8个LED灯循环点亮,并且在每个LED灯点亮之间延时100ms。同时,使用了滴答定时器TIM3来延时,每计数到1000时,即为1s,使用HAL_TIM_Base_Start函数启动定时器。 需要注意的是,由于使用了HAL库,需要在代码中包含对应的头文件。在本例中,使用了main.h、stm32f1xx_hal.h和stm32f1xx_hal_tim.h等头文件。同时,在使用HAL库的函数之前,需要先调用HAL_Init()函数进行初始化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值