我想告诉您,我为STM32L151C8微控制器创建了软件,通过I2C PCF85176驱动程序控制LCD段显示。
设计:
我的问题:
使用snprintf / sprintf函数将浮点数转换为char数组-它使用了大量内存?使用浮点(这个MCU没有FPU,我应该使用uint,并且只在LCD上添加点?)我为这个应用选择了好的MCU?
void LCD_Update(void) {
uint8_t msg[2+20];
uint8_t *display_mem=msg+2;
msg[0]=CMD_OPCODE_DEVICE_SELECT | 0 | CMD_CONTINUE;
msg[1]=CMD_OPCODE_LOAD_DATA_POINTER | 0;
memset(display_mem, 0, 20);
int i,j;
for(i=0;i<8;i++) {
for(j=0;j<4;j++) {
uint8_t nibble=(display_digits[i]>>(4*j))&0xf;
uint8_t nibbleaddr=digit_addrs[i][j];
uint8_t byteaddr=nibbleaddr>>1;
nibbleaddr&=1;
display_mem[byteaddr]|=nibble<<(4*nibbleaddr);
}
}
HAL_I2C_Master_Transmit(&hi2c1, PCF8576_ADDR, msg, sizeof(msg), 100);
}
void LCD_Clear(void) {
for(int i=0;i<=8;i++) {
display_digits[i]=0;
}
LCD_Update();
}
void LCD_Print(char* str) {
int idx=0;
for(int i=0;i<=8;i++) {
char c=str[i];
if(c>='A' && c<='Z') {
display_digits[idx]=alpha[c-'A'];
}
else if (c=='.') {
display_digits[idx-1]=numsDot[str[i-1]-'0'];
idx--;
}
else if(c>='0' && c<='9') {
display_digits[idx]=nums[c-'0'];
}
idx++;
}
LCD_Update();
}
void LCD_PrintInt(int value) {
char str[8];
sprintf(str, "%d", value);
LCD_Print(str);
}
void LCD_PrintFloat(float value, uint8_t length) {
char str[length];
snprintf(str, length + 1, "%f", value);
LCD_Print(str);
}以上是我的程序片段,用来控制LCD。
https://stackoverflow.com/questions/66781383
复制相似问题