TA的每日心情 | 衰 2021-12-11 14:10 |
---|
签到天数: 173 天 连续签到: 1 天 [LV.7]常住居民III
|
COG先展示一点点吧,软件写起来比较头疼,驱动MCU用的是MSP430,采用的是SPI的方式,温度传感器用的DHT11。温度驱动弄的比较早,今天折腾的是点阵显示这块。学到了点新知识,也拿出来分享下。因为COG的显示要转过来,而且它的地址编码从低到高的顺序,从图上看的话在点阵那边就是从右向左显示的。所以在编码的时候都要逆序排列,在字符显示的时候还好,但是在整个字符串的逆序时候碰上麻烦了。
下面是我原来调用的函数的编写:
void PCA8538_SPI_Write_English_String(BYTE MX, BYTE LX,BYTE Y,char *s)
{
PCA8538_SPI_Set_XY(MX,LX,Y); //Set Display's Column & Row
while(*s)
{
PCA8538_SPI_Write_Char(s[t]);//Display the String
s++;
}
PCA8538_Write_Byte_Stop_Condition;
}
PCA8538_SPI_Write_English_String(0, 0, 0, "Speed Test EE Board");//如果这样调用的话 显示就变成draoB EE tseT deepS
完全掉过来了,这时我想到的是把这个字符串做个逆序排列,于是我用了如下的函数。
char* Reverse(char* s)
{
char* p = s; //p指向字符串头部
char* q = s;
while( *q )
{
++q ;
}
q -- ; //q指向字符串尾部
while(q > p)
{
char t = *p ;
*p++ = *q ;
*q-- = t ;
} //交换并移动指针,直到p和q交叉
return s ;
}
不知道是不是这个函数的问题,请教下各位这个函数有问题吗?它能做到逆序排列吗?
我看了后觉的这个函数没有问题,但是我在打开调试窗口的时候,发现这些指针指向的地址并不是字符串S的地址,这些指针指向的地址也不是连续的。在上面看来这个函数用能调用的话,字符存放的数据地址要是连续的才可以,而在这里是不连续的。突然想到个原因,不会这里的地址要加2吧?16位的处理器。待会再试试吧。
最后没办法,还是用数组的方式吧。
void PCA8538_SPI_Write_English_String(BYTE MX, BYTE LX,BYTE Y,char s[])
{
signed char t;
PCA8538_SPI_Set_XY(MX,LX,Y); //Set Display's Column & Row
t=strlen(s);
for(t--;t>=0;t--)
{
PCA8538_SPI_Write_Char(s[t]);//Display the String
}
PCA8538_Write_Byte_Stop_Condition;
}
这样后,字符的逆序就算完成了。
|
|