工程可见Github<传送门>
由于代码过长,这里就不再贴出代码了,只是记录下自己在做这个题遇到的问题吧。
又探索出了新的操作方法
//LED
u16 LED_MODE = 0XFFFF;
...
LED_MODE |= (1<<9);
GPIOC-> ODR = LED_MODE;
GPIOD-> ODR |= (1<<2);
GPIOD-> ODR &=~(1<<2);
比如这个题中,有多个界面且每个界面也有不同的参数,显示对应的参数和处理对应的参数,如果变量使用同一个容易发生意想不到的错误。
最好显示用原值,处理再来一个缓冲区变量。
就是夹在中间上下分别设置,注意其后要紧跟着LCD_DisplayStringLine
。
if(SelIndex == 0)
LCD_SetTextColor(Green);
else
LCD_SetTextColor(White);
LCD_DisplayStringLine(...)
使用自带的I2C底层,进行连续读和写,要注意适当的延时,这里就取5ms了
①、最后加个回车换行(\r\n
)会更好
sprintf((char *)UART_Str, " Temp:%d, Humi:%d Time:%2d:%2d:%2d\r\n", TempThre,HumiThre,HH,MM,SS);
②、操作完一帧数据别忘了再次开启接收中断和清空缓冲区
//别忘了这两个
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//接收的数据处理完毕后打开接收中断
for(i=0; i<20; i++)//清空缓冲区
RxdBuf[i] = 0;