调试墨水屏驱动程序时碰到一个怪现象,弄了好几天百思不得其解,请编程高手指点一下,先谢了!
下面是一个局部显示的函数:
- //----局部画色块--------------------------------------
- void EPD_Dis_Part( u16 x0, u16 y0, u16 w, u16 h, u8 datas ) //u8 * datas
- {
- u16 i, n;
- n = h * w / 8;
- EPD_Part_Init();
- EPD_SetPos( x0, x0 + w, y0, y0 + h );
-
- L_command( 0x24 );
- for( i = 0; i < n; i++ )
- {
- L_data( datas );
- }
- EPD_Part_Update();
-
- }
复制代码
下面在主函数的主循环中调用这个函数:
- while( 1 )
- {
-
- EPD_Dis_Part( 16, 100, 80, 40, 0x00 );//显示一块黑色
- delay_ms( 1000 );
- EPD_Dis_Part( 16, 100, 80, 40, 0xff );//显示一块白色
- EPD_sleep();
- delay_ms( 1000 );
-
- led = ~led;
- }
- }
复制代码
上述代码只执行后只显示了一个黑色的色块,led隔2秒闪烁一次正常进行。
如果修改这个函数:
- //----局部画色块--------------------------------------
- void EPD_Dis_Part( u16 x0, u16 y0, u16 w, u16 h, u8 datas ) //u8 * datas
- {
- u16 i, n;
- n = h * w / 8;
-
- EPD_SetPos( x0, x0 + w, y0, y0 + h );
-
- L_command( 0x24 );
- for( i = 0; i < n; i++ )
- {
- L_data( datas );
- }
-
-
- }
复制代码
修改主循环:
- while( 1 )
- {
- EPD_Part_Init();
- EPD_Dis_Part( 16, 100, 80, 40, 0x00 );//显示一块黑色
- EPD_Part_Update();
- delay_ms( 1000 );
- EPD_Part_Init();
- EPD_Dis_Part( 16, 100, 80, 40, 0xff );//显示一块白色
- EPD_Part_Update();
- EPD_sleep();
- delay_ms( 1000 );
-
- led = ~led;
- }
复制代码
修改后程序可以如愿运行了,同一位置交替显示黑色、白色、led闪烁。
我想知道的是:这两句代码:EPD_Part_Init(); EPD_Part_Update();放在函数中与放在主循环中有啥不同,为啥结果不同?
|