数码之家

 找回密码
 立即注册
搜索
查看: 638|回复: 16

[C51] 小白学51单片机,LCD12864无字库模拟滚屏效果

[复制链接]
发表于 2024-2-22 15:50:56 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
先上小视频
c58f2f12f81238413ee6cc8c12227085.mp4 (1.58 MB, 下载次数: 0)

代码如下:感谢网友的新思路,要是用笨办法的话,怕是键盘要敲烂,

  1. #include <reg52.h>
  2. #include "delayms.h"    //延时   
  3. #include "lcd12864.h"  //屏驱动
  4. #include "cn.h"  //汉字库,存了一首诗
  5. #include "en.h"  //字符库头文件

  6. void main(void)
  7. {
  8.     uchar a,b,c;   //a行 b列 c第几个字
  9.     lcd_init();     //初始化
  10.     lcd_clear();  //清屏
  11.      
  12.         for(c=0;c<8;c++)     //显示前8个字
  13.         {
  14.             a=((c>>3)<<1)+6;       //从最下一行开始显示
  15.             lcd_write_cn(a,b,c,cn1);  //写出一个字
  16.             b=b+16;         //列位置改变
  17.         }
  18.         delayms(1000);   // 延时一下,出现滚动效果
  19.         lcd_clear();  //清屏

  20.         for(c=0;c<16;c++)     //显示前16个字
  21.         {
  22.             a=((c>>3)<<1)+4;
  23.             lcd_write_cn(a,b,c,cn1);  //写出一个字
  24.             b=b+16;         //列位置改变
  25.         }
  26.         delayms(1000);
  27.         lcd_clear();  //清屏

  28.         for(c=0;c<24;c++)     //显示前24个字
  29.         {
  30.             a=((c>>3)<<1)+2;
  31.             lcd_write_cn(a,b,c,cn1);  //写出一个字
  32.             b=b+16;         //列位置改变
  33.         }
  34.         delayms(1000);
  35.         lcd_clear();  //清屏

  36.         
  37.         for(c=0;c<32;c++)     //显示前32个字
  38.         {
  39.             a=((c>>3)<<1)+0;
  40.             lcd_write_cn(a,b,c,cn1);  //写出一个字
  41.             b=b+16;         //列位置改变
  42.         }
  43.         delayms(1000);
  44.         lcd_clear();  //清屏

  45.         for(c=8;c<40;c++)     //显示8-40个字
  46.         {
  47.             a=((c>>3)<<1)+6;
  48.             lcd_write_cn(a,b,c,cn1);  //写出一个字
  49.             b=b+16;         //列位置改变
  50.         }
  51.         delayms(1000);
  52.         lcd_clear();  //清屏

  53.         for(c=16;c<48;c++)     //显示16-48个字
  54.         {
  55.             a=((c>>3)<<1)+4;
  56.             lcd_write_cn(a,b,c,cn1);  //写出一个字
  57.             b=b+16;         //列位置改变
  58.         }
  59.         delayms(1000);
  60.         lcd_clear();  //清屏

  61.         for(c=24;c<56;c++)     //显示24-56个字
  62.         {
  63.             a=((c>>3)<<1)+2;
  64.             lcd_write_cn(a,b,c,cn1);  //写出一个字
  65.             b=b+16;         //列位置改变
  66.         }
  67.         delayms(1000);
  68.         lcd_clear();  //清屏

  69.         for(c=32;c<64;c++)     //显示32-64个字
  70.         {
  71.             a=((c>>3)<<1)+0;
  72.             lcd_write_cn(a,b,c,cn1);  //写出一个字
  73.             b=b+16;         //列位置改变
  74.         }
  75.         delayms(1000);
  76.             
  77.     while(1);                                                
  78. }
复制代码


打赏

参与人数 1家元 +18 收起 理由
cushion + 18 原創內容

查看全部打赏

发表于 2024-2-22 16:01:35 | 显示全部楼层
正在学习,东西还没到
回复 支持 反对

使用道具 举报

发表于 2024-2-22 16:19:59 | 显示全部楼层
以行为单位的软件滚屏才叫滚屏哦,你这个以页为单位的只能叫跳 ,参考一下这个https://www.bilibili.com/video/B ... c32c35387ae6c66fcf4

打赏

参与人数 1家元 +30 收起 理由
cushion + 30 熱心助人

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

发表于 2024-2-22 21:36:06 | 显示全部楼层
玩彩屏吧,更有趣
回复 支持 反对

使用道具 举报

发表于 2024-2-23 03:06:48 来自手机浏览器 | 显示全部楼层
每次移动一个像素点然后连贯起来就像滚屏,这样一跳一跳的感觉像没反应过来。。不过也很厉害了,我学单片机目前还停留在点灯而已。
回复 支持 反对

使用道具 举报

发表于 2024-2-23 12:01:23 | 显示全部楼层
qrut 发表于 2024-2-22 16:19
以行为单位的软件滚屏才叫滚屏哦,你这个以页为单位的只能叫跳 ,参考一下这个https://www.bilibili ...

这种屏估计是以页为单位显示的,所以想滚屏,真有点难度的。
回复 支持 反对

使用道具 举报

发表于 2024-2-23 12:09:09 | 显示全部楼层
lmn2005 发表于 2024-2-23 12:01
这种屏估计是以页为单位显示的,所以想滚屏,真有点难度的。

肯定啊,要按行滚动就得对每一页数据做动态缓存和运算再刷屏,按页滚屏就简单多了~
回复 支持 反对

使用道具 举报

发表于 2024-2-23 12:09:13 | 显示全部楼层
lmn2005 发表于 2024-2-23 12:01
这种屏估计是以页为单位显示的,所以想滚屏,真有点难度的。

8行为一页,要逐行滚动效果其实也可以做到,就是麻烦点
回复 支持 反对

使用道具 举报

发表于 2024-2-23 17:49:48 | 显示全部楼层
qrut 发表于 2024-2-23 12:09
肯定啊,要按行滚动就得对每一页数据做动态缓存和运算再刷屏,按页滚屏就简单多了~ ...

高难度动作
回复 支持 反对

使用道具 举报

发表于 2024-2-23 17:50:11 | 显示全部楼层
inthsunshine 发表于 2024-2-23 12:09
8行为一页,要逐行滚动效果其实也可以做到,就是麻烦点

我觉得自己无法弄成功
回复 支持 反对

使用道具 举报

发表于 2024-2-23 18:04:06 | 显示全部楼层
lmn2005 发表于 2024-2-23 17:50
我觉得自己无法弄成功

要动态调整字模数据,假设汉字16像素高,比如往上滚一行,刷新还是按页刷新,但是第一页显示字模的第2行到第9行,第2页显示第10行到16行,再加上原本第3页的第一行。以此类推,这样就变复杂了
回复 支持 反对

使用道具 举报

发表于 2024-3-12 10:20:08 | 显示全部楼层
lmn2005 发表于 2024-2-23 12:01
这种屏估计是以页为单位显示的,所以想滚屏,真有点难度的。

把显示内容放在缓存里面,一次刷新整个屏
回复 支持 反对

使用道具 举报

发表于 2024-3-12 14:49:12 | 显示全部楼层
595953427@qq 发表于 2024-3-12 10:20
把显示内容放在缓存里面,一次刷新整个屏

这个我知道原理,就是跟显示图形一样。但是处理数据比较麻烦,所以一直都不想去试试。
回复 支持 反对

使用道具 举报

发表于 2024-3-12 22:28:36 | 显示全部楼层
我感觉LCD显示如同LED屏走字的效果编程挺烧脑的。
回复 支持 反对

使用道具 举报

发表于 2024-3-13 16:19:05 | 显示全部楼层
慕名而来 发表于 2024-3-12 22:28
我感觉LCD显示如同LED屏走字的效果编程挺烧脑的。

上GUI,比如u8g2
回复 支持 反对

使用道具 举报

发表于 2024-3-13 21:31:00 | 显示全部楼层

一直玩51单片机写一些简单的代码还没有上手GUI。
回复 支持 反对

使用道具 举报

发表于 2024-3-14 15:53:19 | 显示全部楼层
u8g2 : 听说你找我?
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-28 08:51 , Processed in 0.358800 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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