找回密码
 立即注册

QQ登录

只需一步,快速开始

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

12864为什么显示自定义字体,有明显的刷字过程,不稳定显示。求大神指点。

[复制链接]
跳转到指定楼层
楼主
ID:88815 发表于 2015-8-25 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个是在网上借鉴的画字符功能函数

void displaypicture(unsigned char y,unsigned char x, unsigned char *picture,unsigned char hight,unsigned char wide)
{
        unsigned char line,row;
         LCD_write_command(0x34);   //打开扩展指令

   // send_com(0x36);   //打开绘图指令
        if(wide%8==0)
        {
        wide=wide/8;
        }
        else
        {
        wide=wide/8+1;
        }
        for(line=0;line<hight;line++)
        {
                if(y+line>31)
                {
                    LCD_write_command(0x80+y+line-32);
                   LCD_write_command(0x80+x+8);
                }
                else
                {
                    LCD_write_command(0x80+y+line);
                    LCD_write_command(0x80+x);
                }
                for(row=0;row<wide;row++)
                {
                        LCD_write_data(picture[line*wide+row]);
                }
        }

LCD_write_command(0x36);   //打开绘图指令
LCD_write_command(0x30);   //基本指令

}

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

使用道具 举报

沙发
ID:88854 发表于 2015-8-25 10:30 | 只看该作者
似乎点阵都是这样的
回复

使用道具 举报

板凳
ID:84652 发表于 2015-8-25 13:55 | 只看该作者
写数据周期是不是太短了?比如放到while里重复运行了之类的……
回复

使用道具 举报

地板
ID:88815 发表于 2015-8-25 15:48 | 只看该作者
王朗的诱惑 发表于 2015-8-25 13:55
写数据周期是不是太短了?比如放到while里重复运行了之类的……

恩,,就是在while循环中,通过while循环中switch来循环检测按键,选择显示不同内容。可以有什么方法让其稳定显示不?谢谢o.
switch(x)
   {
    case 0:     
    displaypicture(16,0,shuzi[0],32,16);
         displaypicture(16,1,shuzi[9],32,16);
        displaypicture(16,2,shuzi[1],32,16);
        displaypicture(16,3,kong,32,16);
    displaypicture(16,4,shuzi[5],32,16);
    displaypicture(16,5,shuzi[6],32,16);
        displaypicture(16,6,shuzi[7],32,16);
        displaypicture(16,7,shuzi[8],32,16);
    LATC1=1;break;
         
    case 1:

    displaypicture(16,1,shuzi[0],32,16);

    displaypicture(16,2,shuzi[1],32,16);
        displaypicture(16,3,kong,32,16);
       
    displaypicture(16,4,shuzi[3],32,16);

        displaypicture(16,5,shuzi[7],32,16);

        displaypicture(16,6,shuzi[8],32,16);
        displaypicture(16,7,kong,32,16);
    LATC1=1;break;
         
    case 2:
       
    displaypicture(16,1,shuzi[0],32,16);

    displaypicture(16,2,shuzi[1],32,16);
    displaypicture(16,3,kong,32,16);
       
    displaypicture(16,4,shuzi[5],32,16);

        displaypicture(16,5,shuzi[7],32,16);

        displaypicture(16,6,shuzi[8],32,16);
        displaypicture(16,7,kong,32,16);
    LATC1=1;break;
}
回复

使用道具 举报

5#
ID:88815 发表于 2015-8-25 15:50 | 只看该作者
lwxdx 发表于 2015-8-25 10:30
似乎点阵都是这样的

显示函数在while循环中,不知道怎样解决?谢谢哦
回复

使用道具 举报

6#
ID:84652 发表于 2015-8-25 17:06 | 只看该作者
zmy521 发表于 2015-8-25 15:48
恩,,就是在while循环中,通过while循环中switch来循环检测按键,选择显示不同内容。可以有什么方 ...

进switch的频率不要太高应该就行了……
回复

使用道具 举报

7#
ID:88815 发表于 2015-8-26 15:03 | 只看该作者
王朗的诱惑 发表于 2015-8-25 17:06
进switch的频率不要太高应该就行了……

灰常谢谢 指点 。
回复

使用道具 举报

8#
ID:88815 发表于 2015-8-27 10:05 | 只看该作者
王朗的诱惑 发表于 2015-8-25 17:06
进switch的频率不要太高应该就行了……

大哥 ,我要在中间两行 8个点 后再写入 16*32的字 ,水平地址只能是0x80到0x87之间,每个地址间是16个bit间距,没有8个点后的首地址。所以水平地址怎么 写 ,谢谢 哦
回复

使用道具 举报

9#
ID:84652 发表于 2015-8-29 16:24 | 只看该作者
zmy521 发表于 2015-8-27 10:05
大哥 ,我要在中间两行 8个点 后再写入 16*32的字 ,水平地址只能是0x80到0x87之间,每个地址间是16个bit ...

水平地址不是0x80~0x8F么?
没办法分成8个的吧……水平地址貌似只能精确到16个的。不想在前8个点显示东西就只好写0x00了。如果后面写的内容的显示范围涉及到前面的,前面的那部分写一样的数据就行了。或者把字分开,前一个字的后半个和后面的字的前半个一起写。
回复

使用道具 举报

10#
ID:89313 发表于 2015-9-3 13:52 | 只看该作者
加延时,或者用定时器中断扫
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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