找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1231|回复: 7
打印 上一主题 下一主题
收起左侧

关于C语言缓冲区的这段程序如何理解呢?

[复制链接]
跳转到指定楼层
楼主
ID:904095 发表于 2022-11-22 22:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. void main()
  2. {
  3. unsigned char i;
  4. unsigned char index=0;//移动索引
  5. unsigned char pdata bufmove1[16+sizeof(str1)+16];//移动显示缓冲区1
  6. unsigned char pdata bufmove2[16+sizeof(str2)+16];//移动显示缓冲区2
  7. EA=1;//开总中断
  8. Configtime0(10);//配置T0定时10ms
  9. InitLCD1602();//初始化液晶
  10. /*缓冲区开头一段填充为空格*/
  11. for(i=0;i<16,i++)
  12.         {
  13.          bufmove1[i]='';
  14.          bufmove2[i]='';
  15.         }
  16. /*待显示字符串复制到缓冲区中间位置*/
  17. for(i=0;i<(sizeof(str1)-1);i++)
  18.         {
  19.          bufmove1[16+i]=str1[i];
  20.          bufmove2[16+i]=str2[i];
  21.         }
  22. /*缓冲区结尾一段也填充为空格*/
  23. for(i=(16+sizdof(str1)-1;)i<sizeof(bufomve1);i++)
  24.         {
  25.          bufmove1[i]='';
  26.          bufmove2[i]='';
  27.         }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2022-11-23 10:09 | 只看该作者
文中的文字,已经讲得够清楚
回复

使用道具 举报

板凳
ID:752974 发表于 2022-11-23 16:18 | 只看该作者
就是开辟一块内存区域,用于暂存需要显示的数据或显示数据的字模。
回复

使用道具 举报

地板
ID:230742 发表于 2022-11-23 18:42 | 只看该作者
这个大概是用了做字幕滚动用的。比如1602.要先显示空的字符,屏是没有显示的,然后把文字从左到右(或者从右到左)显示过去,后面也要填充空的字符,这样看上去就像是文字走过去了。屏其实也显示了。只是显示的是空字符。我们看不见而已。
回复

使用道具 举报

5#
ID:298391 发表于 2022-11-23 18:58 | 只看该作者
我觉着程序注释的已经很清楚了,直接调试一下,看效果就明白了
回复

使用道具 举报

6#
ID:1053596 发表于 2022-11-23 19:47 | 只看该作者
缓冲一般是为了避免不确定值
回复

使用道具 举报

7#
ID:824490 发表于 2022-11-24 10:49 | 只看该作者
啤酒瓶子老大 发表于 2022-11-23 18:42
这个大概是用了做字幕滚动用的。比如1602.要先显示空的字符,屏是没有显示的,然后把文字从左到右(或者从 ...

正解!
空白缓存区,目的就是为了滚屏。
一前一后2个缓存区,就是为能方便前后滚,别无他用。
如只有一前或一后,只设一个缓存区,可能在滚屏完之后显存内容也没了。
回复

使用道具 举报

8#
ID:308903 发表于 2022-11-25 09:18 | 只看该作者
  • for(i=0;i<16,i++)                                                   //前面16个位,放空格
  •         {
  •          bufmove1='';
  •          bufmove2='';
  •         }
  • /*待显示字符串复制到缓冲区中间位置*/
  • for(i=0;i<(sizeof(str1)-1);i++)                                     //第17个位开始,放字符串
  •         {
  •          bufmove1[16+i]=str1;
  •          bufmove2[16+i]=str2;
  •         }
  • /*缓冲区结尾一段也填充为空格*/
  • for(i=(16+sizdof(str1)-1;)i<sizeof(bufomve1);i++)                  /字符长度尾部也放空格
  •         {
  •          bufmove1='';
  •          bufmove2='';
  •         }

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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