找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于12864lcd屏显示单片机驱动程序问题,单数列能正常显示,双数列不能正常显示

[复制链接]
跳转到指定楼层
楼主
各位大佬,你们好!这是一个无字库屏,
我用12864显示中文的函数,改了一个显示数字的函数,(16*8的点阵)
产生了一个很奇怪的问题,第一个数字可以正常清新显示,横向第二个却无法正常显示,
或者说单数列能正常显示,双数列不能正常显示
如下图所示,


用的显示函数都一样,单片机主函数如下:
void main()
{
        u8 i = 128;
        Lcd12864_Init();                                                 //初始化12864屏
        Lcd12864_ClearScreen();                                         //清屏
        Lcd12864_Write8ascii(0, 0, 16);                          //显示0
        Lcd12864_Write8ascii(8, 0, 16);                                                 //显示0,不正常
        Lcd12864_Write8ascii(0, 2, 17);                          //1
        Lcd12864_Write8ascii(8, 2, 17);                                                 //显示1,不正常
        Lcd12864_Write8ascii(0, 4, 18);                   //2
        Lcd12864_Write8ascii(8, 4, 18);                                                 //不正常
        Lcd12864_Write8ascii(0, 6, 19);                          //3
        Lcd12864_Write8ascii(8, 6, 19);                                                 //不正常
        Lcd12864_Write8ascii(16, 0, 20);                   //4
        Lcd12864_Write8ascii(24, 0, 20);
        Lcd12864_Write8ascii(16, 2, 21);                   //5
        Lcd12864_Write8ascii(24, 2, 21);
        Lcd12864_Write8ascii(16, 4, 22);                   //6
        Lcd12864_Write8ascii(24, 4, 22);
        Lcd12864_Write8ascii(16, 6, 23);                   //7
        Lcd12864_Write8ascii(24, 6, 23);
        Lcd12864_Write8ascii(32, 0, 24);                   //8
        Lcd12864_Write8ascii(40, 0, 24);
        Lcd12864_Write8ascii(32, 4, 25);                   //9
        Lcd12864_Write8ascii(40, 4, 25);

        while (1)
        {        
        }
}



显示函数如下:
void Lcd12864_Write8ascii(u8 x, u8 y, u8 Num)
{
        u8 j, x1, x2;
        y += 0xB0;           //求取Y坐标的值
        for( j=0; j<16; j++)                 //
        {               
                //--设置Y坐标--//
                LcdSt7565_WriteCmd(y);

                x1 = (x >> 4) & 0x0F;   //由于X坐标要两句命令,分高低4位,所以这里先取出高4位
                x2 = x & 0x0F;          //去低四位
                //--设置X坐标--//
                LcdSt7565_WriteCmd(0x10 + x1);   //高4位
                LcdSt7565_WriteCmd(0x04 + x2);        //低4位
        
                if (j == 8)         //由于8X16用到两个Y坐标,当大于等于8时,切换坐标
                {
                        y+=1;
                        x-=8;
                }
                LcdSt7565_WriteData(ascii_1608[Num][j]);
                x ++;
        }                                
}



请教各位大佬,我这哪里出问题了?
对了排除是屏幕坏的可能性,我用扫屏函数都扫过,每个点都能点亮的。

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

使用道具 举报

沙发
ID:789121 发表于 2022-5-30 11:08 | 只看该作者
if (j == 8)         //由于8X16用到两个Y坐标,当大于等于8时,切换坐标
                {
                        y+=1;
                        x-=8;
                }
放到
//--设置Y坐标--//
上面试一下
回复

使用道具 举报

板凳
ID:789121 发表于 2022-5-30 11:09 | 只看该作者
if (j == 8)//由于8X16用到两个Y坐标,当大于等于8时,切换坐标
{
y+=1;
x-=8;
}
放到 //--设置Y坐标--//上面
回复

使用道具 举报

地板
ID:821461 发表于 2022-5-30 11:29 | 只看该作者
不要黑 发表于 2022-5-30 11:09
if (j == 8)//由于8X16用到两个Y坐标,当大于等于8时,切换坐标
{
y+=1;

我刚试过了,还是一样的,那些列还是不清楚,就好像丢失了几个数据一样好奇怪
修改后的代码如下:
void Lcd12864_Write8ascii(u8 x, u8 y, u8 Num)
{
        u8 j, x1, x2;
        y += 0xB0;           //求取Y坐标的值

        for( j=0; j<16; j++)                 //
        {               
                if (j == 8)         //由于8X16用到两个Y坐标,当大于等于8时,切换坐标
                {
                        y+=1;
                        x-=8;
                }
                //--设置Y坐标--//
                LcdSt7565_WriteCmd(y);

                x1 = (x >> 4) & 0x0F;   //由于X坐标要两句命令,分高低4位,所以这里先取出高4位
                x2 = x & 0x0F;          //去低四位
                //--设置X坐标--//
                LcdSt7565_WriteCmd(0x10 + x1);   //高4位
                LcdSt7565_WriteCmd(0x04 + x2);        //低4位
       
               
                LcdSt7565_WriteData(ascii_1608[Num][j]);
                x ++;
        }                               
}
回复

使用道具 举报

5#
ID:123289 发表于 2022-5-31 17:33 | 只看该作者
是不是调用上别人的函数?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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