|
发表于 2019-10-14 11:10:20
|
显示全部楼层
本帖最后由 huaweiwx 于 2019-10-22 21:01 编辑
你的函数要求原型:
u8 VolumeToString(u16 Volume){
?
?
?
}
1 对于写一个函数,首先需要确定的是,输入参数,在c中可以是直接传递数据(值)或指向数据的指针(地址),这里是数值 u16 Volume,其次是返回结果的方式及放在哪里的问题,对于字符串这样的返回值,因为长度通常是不定的,显然用指针较好;这里用u8值,只有一个字符长度显然是不够的;
2 给你写个参考并加上了注释:
void u16ToString(u16 Volume, char *hexStr) { /* hexStr 为转换后的字符串 0xXXXX*/
u8 j;
char str[] = "0123456789ABCDEF"; /*16进制字符表,用查表法高效快速*/
for (j = 5; j > 1; j--) { /* 从个位起开始查表,共 5-1 = 4 次 */
hexStr[j] = str[Volume & 0x0f]; /*Volume & 0x0f:取得 该位的16进制值,对应的就是str数组的ascii码*/
Volume = Volume >> 8; /*右移 8bit 就是取得下个 16进制位值,供循环下次使用 */
}
hexStr[0] = '0'; hexStr[1] = 'x'; /* 最后 在 头部补上表示hex字符串的 0x 标识*/
hexStr[6] = 0; /* 尾部补上字符串结束符*/
}
3 调用方法,需要先定义一个返回结果的字符空间,调用时将转换的数值和这个空间位置一并传递给u16ToString函数,如下:
char strBuf[6+1]; /*0xXXXX 长度6,字符串需要补个结束符 0 */
u16 Color = 0xFEE7;
......
// 调用 改成:
u16ToString(Color,strBuf); /*转换调用,结果在 strBuf*/
Lcd_Disply_string(0,23, strBuf,Color);
|
|