找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的带字库12864反白显示问题

[复制链接]
跳转到指定楼层
楼主
ID:387860 发表于 2018-9-19 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yekai_yh 于 2018-9-20 19:39 编辑

单片机入门新手,最近在学习制作菜单,遇到反白问题,在网上搜 了个反白函数,看不明白函数怎么用,convertChar (uchar CX, CY, width,YN,f),其中YN和f参数有什么作用,还有就是这个不能正常反白,请高手指点下,这个的效果是比如我要反白第一行,结果是第一行从上部分到下部分逐步反白,而且保持不了,一直流动反白。具体程序如下,没有引用别的头文件。

函数如下:

  1. void Disp_black()   //在反白之前先清绘图存储区,将绘图存储区的参数全设为不反白0x00.
  2. {
  3. unsigned char i,j;
  4. lcd_w_com(0x36); //图形方式
  5. for(i=0;i<32;i++)
  6.   {
  7.     lcd_w_com(0x80+i);
  8.     lcd_w_com(0x80);
  9.      for(j=0;j<16;j++)
  10.           {
  11.        lcd_w_data(0x00);
  12.       }
  13.   }
  14. for(i=0;i<32;i++)
  15.   {
  16.     lcd_w_com(0x80+i);
  17.     lcd_w_com(0x88);
  18.     for(j=0;j<16;j++)
  19.          {
  20.      lcd_w_data(0x00);
  21.      }
  22.    }
  23. }


  24. void convertChar (uchar CX, CY, width,YN,f)
  25. {
  26. unsigned char halfLineCnt, basicBlock,lcdPosX,lcdPosY;
  27.      if(f==1)
  28.     Disp_black(); //清绘图区
  29. lcdPosY = 0x80;

  30. if (CX == 0)
  31. {
  32.     CX = 0x80;
  33.     halfLineCnt = 16;
  34. }
  35. else if (CX == 1)
  36. {
  37.     CX = 0x80;
  38.     halfLineCnt = 32;
  39. }
  40. else if (CX == 2)
  41. {
  42.     CX = 0x88;
  43.     halfLineCnt = 16;
  44. }
  45. else if (CX == 3)
  46. {
  47.     CX = 0x88;
  48.     halfLineCnt = 32;
  49. }
  50. lcdPosX = CX + CY;

  51.      for (; halfLineCnt != 0; halfLineCnt--)
  52. {
  53.     basicBlock = width;
  54.     lcd_w_com(0x34);
  55.     lcd_w_com(lcdPosY);
  56.     lcd_w_com(lcdPosX);
  57.     lcd_w_com(0x30);

  58.     for (;basicBlock != 0; basicBlock--)
  59.     {
  60.      if (halfLineCnt > 16)
  61.      {
  62.       lcd_w_data(0x00);
  63.      }
  64.      else
  65.      {
  66.        if(YN==1) lcd_w_data(0xff);
  67.        else   lcd_w_data(0x00);
  68.      }
  69.     }
  70.     lcdPosY++;
  71. }

  72. lcd_w_com(0x36);
  73. lcd_w_com(0x30);
  74. }

复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:387860 发表于 2018-9-20 19:40 | 只看该作者
别沉了,自己顶下,弱弱的问一下,这个提问题是要悬赏吗
回复

使用道具 举报

板凳
ID:98526 发表于 2018-9-21 08:55 | 只看该作者
看不懂它是怎么反白的、但是f等于1应该就是选择绘图区反白,YN应该是选择反白还是反黑???
回复

使用道具 举报

地板
ID:387860 发表于 2018-9-21 19:14 | 只看该作者
726434632 发表于 2018-9-21 08:55
看不懂它是怎么反白的、但是f等于1应该就是选择绘图区反白,YN应该是选择反白还是反黑???

谢谢了,YN、f都等于1,比如我要反白一个字“三”,实际效果是
1、先反白最上边的一横,
2然后中间那一横(上边一横的反白效果没了),
3然后下边那一横反白了(上边两横的效果没了),然后都不反白,接着又到步骤1了,一直循环,是个动态的
回复

使用道具 举报

5#
ID:406128 发表于 2018-11-9 11:30 | 只看该作者
顶起,希望有人帮忙一下
回复

使用道具 举报

6#
ID:423279 发表于 2018-11-9 20:38 | 只看该作者
顶一下,遇到类似问题
回复

使用道具 举报

7#
ID:272089 发表于 2018-11-23 08:12 | 只看该作者
void convertChar (uchar CX, CY, width,YN,f)
cx代表起始行,cy起始列,width反白宽度,yn和f都是1
回复

使用道具 举报

8#
ID:427121 发表于 2018-12-16 11:11 | 只看该作者
同问类似问题,两个按键分别选择上一行反白还是下一行反白,按键移动选择哪一行反白
回复

使用道具 举报

9#
ID:890184 发表于 2021-3-11 14:47 | 只看该作者
为什么halfLineCnt > 16时直接写0呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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