找回密码
 立即注册
查看: 565|回复: 2

请教!函数在主循环中无法运行的原因?

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:486
  • 最近打卡:2025-06-17 09:32:28

46

主题

179

回帖

1964

积分

金牌会员

积分
1964
发表于 2024-3-23 21:16:34 | 显示全部楼层 |阅读模式
调试墨水屏驱动程序时碰到一个怪现象,弄了好几天百思不得其解,请编程高手指点一下,先谢了!

下面是一个局部显示的函数:
  1. //----局部画色块--------------------------------------
  2. void EPD_Dis_Part( u16 x0, u16 y0, u16 w, u16 h, u8  datas ) //u8 * datas
  3. {
  4.     u16 i, n;
  5.     n = h * w / 8;
  6.     EPD_Part_Init();
  7.     EPD_SetPos( x0, x0 + w, y0, y0 + h );
  8.     L_command( 0x24 );
  9.     for( i = 0; i < n; i++ )
  10.     {
  11.         L_data( datas );
  12.     }
  13.     EPD_Part_Update();
  14. }
复制代码
下面在主函数的主循环中调用这个函数:
  1.     while( 1 )
  2.     {
  3.         EPD_Dis_Part( 16, 100, 80, 40, 0x00 );//显示一块黑色
  4.         delay_ms( 1000 );
  5.         EPD_Dis_Part( 16, 100, 80, 40, 0xff );//显示一块白色
  6.         EPD_sleep();
  7.         delay_ms( 1000 );
  8.         led = ~led;
  9.     }
  10. }
复制代码
上述代码只执行后只显示了一个黑色的色块,led隔2秒闪烁一次正常进行。
如果修改这个函数:
  1. //----局部画色块--------------------------------------
  2. void EPD_Dis_Part( u16 x0, u16 y0, u16 w, u16 h, u8  datas ) //u8 * datas
  3. {
  4.     u16 i, n;
  5.     n = h * w / 8;
  6.    
  7.     EPD_SetPos( x0, x0 + w, y0, y0 + h );
  8.     L_command( 0x24 );
  9.     for( i = 0; i < n; i++ )
  10.     {
  11.         L_data( datas );
  12.     }
  13.    
  14. }
复制代码
修改主循环:
  1.     while( 1 )
  2.     {
  3.                 EPD_Part_Init();
  4.         EPD_Dis_Part( 16, 100, 80, 40, 0x00 );//显示一块黑色
  5.                 EPD_Part_Update();
  6.         delay_ms( 1000 );
  7.                 EPD_Part_Init();
  8.         EPD_Dis_Part( 16, 100, 80, 40, 0xff );//显示一块白色
  9.                 EPD_Part_Update();
  10.         EPD_sleep();
  11.         delay_ms( 1000 );
  12.         led = ~led;
  13.     }
复制代码
修改后程序可以如愿运行了,同一位置交替显示黑色、白色、led闪烁。
我想知道的是:这两句代码:EPD_Part_Init(); EPD_Part_Update();放在函数中与放在主循环中有啥不同,为啥结果不同?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-06-17 23:10:36

0

主题

336

回帖

1632

积分

金牌会员

积分
1632
发表于 2024-3-24 00:00:12 | 显示全部楼层
你原来的局部显示函数每次执行都要执行初始化程序,哪有这么干的,而且墨水屏反应很慢的,你初始化后要给点时间启动到正常
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:486
  • 最近打卡:2025-06-17 09:32:28

46

主题

179

回帖

1964

积分

金牌会员

积分
1964
发表于 2024-3-24 18:42:41 | 显示全部楼层
xxxe*** 发表于 2024-3-24 00:00
你原来的局部显示函数每次执行都要执行初始化程序,哪有这么干的,而且墨水屏反应很慢的,你初始化后要给点 ...

我是按照例程改编的程序,根据例程墨水屏要求每次刷屏都要设置驱动波形这就要求每次操作都要配置一次。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-19 05:04 , Processed in 1.985721 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表