找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1776|回复: 5
收起左侧

51单片机串口驱动LCD12864反白程序调试问题

[复制链接]
ID:265485 发表于 2022-7-21 16:11 | 显示全部楼层 |阅读模式
为什么我这个12864串口驱动 反白程序不对并口是可以的 显示除了需要需要的全部反白了 求 大神解答一下
/******************************************************                        
带中文12864 内置数字,字母,汉字反白               
y反白行 x反白列 sv你想反白多少个字符?可设置1~16字符(一个汉字等于2个字符)
fb=0反白 fb=1不反白
******************************************************/
void Lcd12864_Set(unsigned char y,unsigned char x,unsigned char sv,unsigned char fb)
{
unsigned char i,s,white_x,white_y,white_endx;
white_endx=x;
x=x/2;
switch(y)
  {
   case 1:white_y=0x80;white_x=0x80+x;break;
   case 2:white_y=0x90;white_x=0x80+x;break;
   case 3:white_y=0x80;white_x=0x88+x;break;
   case 4:white_y=0x90;white_x=0x88+x;break;
  }
        
LCD12864_COM_Write(0x36);                   //开绘图显示
for(i=0;i<16;i++)
  {
   LCD12864_COM_Write(white_y+i);
   LCD12864_COM_Write(white_x);
         if(fb==0)                              //fb=0反白
         {
    if(white_endx%2)LCD12864_Data_Write(0x00); //如果开始被2整除,就说明他开始是从0开始,可以写入0xff,否则写0x00
                for(s=0;s<sv;s++)
                 {
                  LCD12864_Data_Write(0xff);
                 }               
   }
         
  if(fb==1)                               //fb=1不反白
         {
    if(white_endx%2)LCD12864_Data_Write(0x00); //如果开始被2整除,就说明他开始是从0开始,写入0x00
                for(s=0;s<sv;s++)
                 {
                  LCD12864_Data_Write(0x00);
                 }                 
         }               
}
LCD12864_COM_Write(0x30);                    //回到基本指令
}

回复

使用道具 举报

ID:265485 发表于 2022-7-21 16:11 | 显示全部楼层
求大神讲解一下
回复

使用道具 举报

ID:584814 发表于 2022-7-22 08:12 | 显示全部楼层
所谓反白,就是原先打点的不打点,原先不打点的打点。
回复

使用道具 举报

ID:265485 发表于 2022-7-22 09:30 | 显示全部楼层
man1234567 发表于 2022-7-22 08:12
所谓反白,就是原先打点的不打点,原先不打点的打点。

具体内容?
回复

使用道具 举报

ID:195496 发表于 2022-7-22 18:47 | 显示全部楼层
按位置,把数据取反,这个与具体的应用程序有关系
回复

使用道具 举报

ID:44037 发表于 2022-7-23 18:49 | 显示全部楼层
1.png 2.png
我看网上的程序是 正常程序 取值时 取反
  1. void LCD12864_Display(u8 y,u8 x,u8 px,u8 py,u8 *pp)
  2. {
  3.    u8 i,j,k;

  4.    LCD12864_Clear();         //清屏
  5.    if(y<32)                  //如果起始行在上半屏
  6.    {
  7.       k = 32-y;              //算出上半屏的行数
  8.       for(i=0;i<k;i++,y++)   //上半屏行数
  9.       {
  10.          LCD12864_WCMD(0x80|y);  //写行地址(垂直地址)
  11.          LCD12864_WCMD(0x80|x);  //写列地址(水平地址)
  12.          for(j=0;j<px/8;j++)
  13.             LCD12864_WDAT(pp[i*px/8+j]);  //写图片数据

  14.       }
  15.       y=0;                    //下半屏起始行,接上半屏继续写数据
  16.       for(;i<py;i++,y++)//下半屏剩下的行数
  17.       {
  18.          LCD12864_WCMD(0x80|y);//写行地址(垂直地址)
  19.          LCD12864_WCMD(0x80|(8+x));//写列地址(水平地址)
  20.             for(j=0;j<px/8;j++)
  21.               LCD12864_WDAT(pp[i*px/8+j]);//写图片数据
  22.       }
  23.    }
  24.    else //如果起始行在下半屏
  25.    {
  26.       for(i=0;i<py;i++,y++)//行数
  27.       {
  28.          LCD12864_WCMD(0x80|(y-32));//写行地址(垂直地址)
  29.          LCD12864_WCMD(0x80|(8+x));//写列地址(水平地址)
  30.             for(j=0;j<px/8;j++)
  31.                LCD12864_WDAT(pp[i*px/8+j]);//写图片数据
  32.       }  
  33.          }
  34. }   
  35. // 反白程序  同上一函数一样 <span style="background-color: rgb(255, 255, 255);">取值时 </span><span style="background-color: rgb(255, 255, 255); color: red;">取反</span>
  36. void LCD12864_DisplayFb(u8 y,u8 x,u8 px,u8 py,u8 *pp)
  37. {
  38.    u8 i,j,k;

  39.    LCD12864_Clear();         //清屏
  40.    if(y<32)                  //如果起始行在上半屏
  41.    {
  42.       k = 32-y;              //算出上半屏的行数
  43.       for(i=0;i<k;i++,y++)   //上半屏行数
  44.       {
  45.          LCD12864_WCMD(0x80|y);  //写行地址(垂直地址)
  46.          LCD12864_WCMD(0x80|x);  //写列地址(水平地址)
  47.          for(j=0;j<px/8;j++)
  48.             LCD12864_WDAT(~pp[i*px/8+j]);  //写图片数据 取反

  49.       }
  50.       y=0;                    //下半屏起始行,接上半屏继续写数据
  51.       for(;i<py;i++,y++)//下半屏剩下的行数
  52.       {
  53.          LCD12864_WCMD(0x80|y);//写行地址(垂直地址)
  54.          LCD12864_WCMD(0x80|(8+x));//写列地址(水平地址)
  55.             for(j=0;j<px/8;j++)
  56.               LCD12864_WDAT(~pp[i*px/8+j]);//写图片数据 取反
  57.       }
  58.    }
  59.    else //如果起始行在下半屏
  60.    {
  61.       for(i=0;i<py;i++,y++)//行数
  62.       {
  63.          LCD12864_WCMD(0x80|(y-32));//写行地址(垂直地址)
  64.          LCD12864_WCMD(0x80|(8+x));//写列地址(水平地址)
  65.             for(j=0;j<px/8;j++)
  66.                LCD12864_WDAT(~pp[i*px/8+j]);//写图片数据 取反
  67.       }  
  68.          }
  69. }   
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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