uint8_t是不是不能给负值
时间: 2023-12-01 08:40:34 浏览: 34
根据引用中的描述,Java中的byte是带符号的,因此将127以上的uint8_t值转换为Java byte时将被视为负值。因此,如果将负值赋给uint8_t,则在Java中将被视为大于127的值。但是,在C / C ++中,uint8_t是无符号的,因此可以将0到255之间的任何值赋给它,包括0和负值。
相关问题
void Plot_Wave(uint16_t *Data,uint16_t MAX,uint16_t x,uint16_t y,uint16_t Start) { // uint16_t Data_Max;//存放数组中的最大值 // uint16_t Ymax,Ymin; uint16_t TemData[200]; uint16_t i; float Ratio;//用来对数据进行归一化显示 if(MAX>200) { Ratio = (float)(200/MAX); } else {Ratio = 1;} for(i=0:i<200;i++) { if((uint16_t)(Ratio*Data[Start+i])>100) { TemData[i] = (uint16_t)(Ratio*Data[Start+i]); } else { TemData[i] = -(uint16_t)(Ratio*Data[Start+i]); } } LCD_SetBackColor(WHITE); ILI9341_Clear(0,0,360,240); Plot_Graph(MAX,x,y); LCD_SetTextColor(RED); for(i=0;i<199;i++) { ILI9341_DrawLine(x+100+i,y+TemData[i],x+101+i,y+TemData[i+1]); } }
这是一个绘制波形的函数,使用了ILI9341液晶屏和一个存储波形数据的数组。函数的输入参数包括Data数组、数组的最大值MAX、绘制波形的起始坐标(x, y)以及Start参数用于指定从Data数组的哪个位置开始绘制波形。
首先,函数会根据MAX值计算一个归一化比例Ratio。如果MAX大于200,Ratio将等于200/MAX,否则Ratio为1。
然后,函数会遍历长度为200的临时数组TemData,在每个位置上计算归一化后的数据,并存储到TemData数组中。如果归一化后的数据大于100,将存储正值,否则存储负值。
接下来,函数会使用LCD_SetBackColor函数设置背景颜色为白色,并清除整个屏幕。
然后,函数会调用Plot_Graph函数绘制一个坐标轴。
最后,函数会使用ILI9341_DrawLine函数在屏幕上绘制波形,通过连接相邻的点来实现。
请注意,该代码中有一些被注释掉的代码段,可能是之前的尝试或者备用代码。
// 设置电机占空比 void setMotorDuty(MOTOR *motor,const int dutyValue) { uint8_t channel_num= dutyValue > 0 ? 0:1; pwm_set_duty(motor->channel[channel_num],dutyValue > 0? dutyValue:-dutyValue); } // 获取电机编码器值 int16_t getEncoderValue(MOTOR *motor) { if(motor->encoder == ENCODER_QUADDEC_FL || motor->encoder == ENCODER_QUADDEC_BL) return encoder_get_count(motor->encoder); else return -encoder_get_count(motor->encoder); }
这段代码定义了两个函数,用于设置电机占空比和获取电机编码器值。
`setMotorDuty`函数用于设置电机的占空比,即控制电机的转速或转动方向。该函数接受两个参数,一个是指向`MOTOR`结构体的指针,另一个是占空比值`dutyValue`。根据`dutyValue`的正负,确定要控制的电机通道号,并使用`pwm_set_duty`函数设置占空比的绝对值。
`getEncoderValue`函数用于获取电机的编码器值。该函数接受一个指向`MOTOR`结构体的指针,并根据电机的编码器类型使用`encoder_get_count`函数获取编码器的计数值。如果编码器类型是`ENCODER_QUADDEC_FL`或`ENCODER_QUADDEC_BL`,则返回计数值;否则返回计数值的负值。
这些函数的作用是在PID控制中,根据控制输出来设置电机的占空比,并根据电机的编码器类型获取实际转动的位置或速度值。如果您对这些函数有任何疑问或需要进一步解释,请随时告诉我!