void delay_1ms(uint32_t count) { delay = count; while(0U != delay){ } }
时间: 2024-04-27 21:19:16 浏览: 147
这代码实现了一个延时函数delay_1ms,其作用是让程序暂停一段时间,具体的时间由传入的参数count来指定,单位是毫秒。这个函数的实现方式是通过在全局定义一个变量delay,在函数中将count值赋给delay,然后在一个while循环中不断判断delay变量是否为0,如果不为0就一直等待,直到delay变为0为止。在等待的过程中,程序会一直占用CPU资源,因此这种延时方式不太适用于需要同时执行其他任务的情况。此外,由于不同的处理器速度不同,同样的延时时间在不同的处理器上可能会有一定的误差。
相关问题
解读程序:void I2C_test_MYJ(void) { unsigned char nnn = 0; unsigned char n = 0; uint8_t ii = 0; uint8_t io_first_flag = 0; uint8_t io_error0 = 0; uint8_t io_error1 = 0; uint32_t t_count0 = 0; uint32_t t_count1 = 0; uint32_t t_count2 = 0; uint32_t t_count3 = 0; uint32_t t_count4 = 0; /IO口引脚初始化*****************/ Gpio_InitIOExt(3,1,GpioDirOut,TRUE,FALSE,TRUE,FALSE); Gpio_InitIOExt(2,7,GpioDirOut,TRUE,FALSE,TRUE,FALSE); Gpio_InitIOExt(3,2,GpioDirOut,TRUE,FALSE,TRUE,FALSE); Gpio_InitIOExt(3,3,GpioDirOut,TRUE,FALSE,TRUE,FALSE); Gpio_SetIO(3,2,1); Gpio_SetIO(3,3,1); Gpio_SetIO(3,1,1); Gpio_SetIO(2,7,1); delay1ms(10); while(1) { delay1ms(5); if(0 == I2C0_Read(i2cRxData0,13))//mei lianjie { LED0_ON; io_error0 = 1; status = 1; error1[0]++; } else { i2cRxData0[13] = 0; for(ii = 0; ii < 12; ii++) { i2cRxData0[13] += i2cRxData0[ii]; } if(i2cRxData0[13] != i2cRxData0[12])//jduge { LED0_ON; io_error0 = 1; status = 4; error1[3]++; } if(i2cRxData0[10] == 0 && i2cRxData0[11] < 0X50)// yu zhen xiao { LED0_ON; io_error0 = 1; status = 2; error1[1]++; } }
这段程序主要是对I2C进行测试和处理。首先,定义了一些变量和计数器,包括nnn、n、ii、io_first_flag、io_error0、io_error1、t_count0、t_count1、t_count2、t_count3和t_count4。
然后,进行了一些IO口引脚的初始化,使用了Gpio_InitIOExt函数对一些引脚进行配置。
接下来,在一个无限循环中,每隔5毫秒延迟一次。然后通过调用I2C0_Read函数读取I2C数据,如果返回值为0,则表示没有连接成功。在这种情况下,LED0会点亮,io_error0会被置为1,status会被设置为1,并且error1[0]会自增。
如果连接成功,则对接收的数据进行处理。首先,将i2cRxData0[13]初始化为0,并对前12个字节进行累加,结果存储在i2cRxData0[13]中。然后,判断i2cRxData0[13]和i2cRxData0[12]是否相等,如果不相等,则表示数据错误。在这种情况下,LED0会点亮,io_error0会被置为1,status会被设置为4,并且error1[3]会自增。
接下来,判断i2cRxData0[10]是否为0且i2cRxData0[11]是否小于0x50。如果满足条件,则表示数据有效。在这种情况下,LED0会点亮,io_error0会被置为1,status会被设置为2,并且error1[1]会自增。
以上就是这段程序的基本逻辑和功能。
void key_init(void); u8 key_scan(void); void relay_init(void); void relay_set(uint8_t relay_flag); void main_interface(void); uint16_t adc_value = 0; int main(void) { uint8_t key = 0; char minute_value_str[8] = {0}; char seconds_value_str[8] = {0}; delay_init();//延时初始化,72MHz uart1_init(115200); uart3_init(9600); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); Adc_Init(ADC1, GPIOA, GPIO_Pin_7, 1); DHT11_Init(); key_init(); OLED_Init(); relay_init(); TIMx_Init(TIM2, 10000, 0, 1); TIMx_Init(TIM3, 10000, 0, 2); delay_ms(500); main_interface(); ON_TIMx(TIM2); OFF_TIMx(TIM3); USART3_TX((uint8_t *)"1智能坐垫设计"); while(1) { adc_value = ADC_Mean_Smoothing(ADC1, ADC_Channel_7, 10); if(adc_value < 3530) { if(timer_flag == 0) { timer_flag = 1; TIM3_Count = 0; ON_TIMx(TIM3); } // ON_TIMx(TIM3); } else { if(timer_flag == 1) { timer_flag = 0; OFF_TIMx(TIM3);
这段代码看起来像是嵌入式系统中的主函数,其中包括了一些初始化函数和一些功能实现。具体来说,这段代码初始化了延时、串口、ADC、DHT11、按键、OLED、继电器和定时器等模块,并在循环中读取 ADC 值,如果小于 3530 则启动定时器 TIM3,并将计时器 TIM3_Count 清零,否则关闭定时器 TIM3。可能还有其他的功能实现,但是代码截断了,无法确定。
阅读全文