搜索
bottom↓
回复: 18

[求助]请教无字库12864改大字体的函数怎样写啊!

[复制链接]

出0入0汤圆

发表于 2012-5-7 19:51:10 | 显示全部楼层 |阅读模式
小弟想做一个ks0108的12864屏温度计,找了一个51的程序,但字体太小,小弟不懂字体显示函数,只会改字模,请好心人帮忙修改一下或指导一下,多谢了!原程序+仿真+字模软件+效果图和预期的效果图附上。
/*************************写LCD函数********************************/
void lw(unsigned char x,unsigned char y,unsigned char dd)
{
                if (x<64)
                {
                        cs1=cs2=0;
                        di=rw=0;cs1=1;cs2=0;P2=0xb8|y;e=1;delay(2);e=0;delay(2);
                        di=rw=0;cs1=1;cs2=0;P2=0x40|x;e=1;delay(2);e=0;delay(2);
                        di=1;rw=0;cs1=1;cs2=0;P2=dd;e=1;delay(2);e=0;delay(2);       
                       
                }
                else
                {
                        cs1=cs2=0;x=x-64;
                        di=rw=0;cs1=0;cs2=1;P2=0xb8|y;e=1;delay(2);e=0;delay(2);                       
                        di=rw=0;cs1=0;cs2=1;P2=0x40|x;e=1;delay(2);e=0;delay(2);
                        di=1;rw=0;cs1=0;cs2=1;P2=dd;e=1;delay(2);e=0;delay(2);
                           cs1=cs2=1;
                }
                P2=0xff;
}

/************************LCD初始化*************************/
void lcd_init(void) {
        unsigned char x,y;       
        e=di=rw=0;
        cs1=cs2=1;
        cs1=0;cs2=1;
        di=rw=0;P2=0x3f;e=1;delay(2);e=0;delay(2);
        cs1=0;cs2=1;
        di=rw=0;P2=0xc0;e=1;delay(2);e=0;delay(2);
        cs1=cs2=0;

        cs1=1;cs2=0;
        di=rw=0;P2=0x3f;e=1;delay(2);e=0;delay(2);
        cs1=1;cs2=0;
        di=rw=0;P2=0xc0;e=1;delay(2);e=0;delay(2);
        cs1=cs2=0;

      for (y=0;y<8;y++) {
                for (x=0;x<128;x++) lw(x,y,0);
        }
}

/**********************************字符取模********************************************/


unsigned char code wen[32]={
0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00};

unsigned char code du[32]={
0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00};
unsigned char code shu[10][16]={
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},
{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},
{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},
{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},
{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},
{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},
{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}   };

unsigned char code point[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};                 //小数点

/***************写16*16分辨率汉字************/
void write_chinese(x,y,array)
unsigned char x,y;
unsigned char array[];
{
        unsigned char j,dd;                       
        for(j=0;j<32;j++)
        {
                dd=array[j];
                if(j<16) lw(x+j,y,dd);
                 else  lw(x+j-16,y+1,dd);
        }       
}
/***************写8*16分辨率字母,数字**********/
void write_english(x,y,array)
unsigned char x,y;
unsigned char array[];
{
        unsigned char j,dd;                       
        for(j=0;j<16;j++)
        {
                dd=array[j];
                if(j<8) lw(x+j,y,dd);
                 else  lw(x+j-8,y+1,dd);
        }       
}                       
                       
/************主函数*************/
void main()
{  
char bw,sw,gw,qw;
int i=0;
lcd_init();
while(1)
{      i=ReadTemperature();//读温度
          qw=i/1000;
      bw=(i%1000)/100;
      sw=(i-1000*qw-100*bw)/10;
      gw=i-1000*qw-100*bw-10*sw;
          
                      write_chinese(24,3,wen);
           write_chinese(40,3,du);

           write_english(72,3,shu[bw]);
           write_english(80,3,shu[sw]);
           write_english(88,3,point);
           write_english(96,3,shu[bw]);       
                             
          

       delay(1000);
           }
}

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2012-5-7 20:14:50 | 显示全部楼层
LCD上会画图不?把字体当成图片来做 不过任意地方显示的话就有点复杂了,对8的取整取余操作

出0入0汤圆

发表于 2012-5-7 20:30:40 | 显示全部楼层
无字库的12864显示汉字不是用取字模来做的吗?
你在取模的时候设置好字体的点阵大小,之后修改void write_chinese(x,y,array) 函数的循环次数不就出来了吗

出0入0汤圆

 楼主| 发表于 2012-5-7 21:54:57 | 显示全部楼层
谢谢楼上两位老师的指点,只改字模大小我试过不成功,在12864屏的四行16X16汉字中,能否将第2行和第3行合并成一行来显示32X32的大字体呢?还请老师帮忙写一个void write_chinese(x,y,array) 循环次数范例,小弟实在看不懂啊!

出0入0汤圆

 楼主| 发表于 2012-5-8 18:12:39 | 显示全部楼层
自己顶一下吧,希望还有人帮我

出0入0汤圆

发表于 2012-5-8 20:38:39 | 显示全部楼层
这样吧, 比如16*16的汉字是先写上半部分8行,写16列。然后再写下半部分的16个字节。

那32*32的字体也是同样的。只是分四次写。

最好的办法是当成图形来处理,开辟一显示BUF,128*64要1K的RAM,然后在RAM对显存进行操作,直接刷就可以了

出0入0汤圆

 楼主| 发表于 2012-5-10 05:43:00 | 显示全部楼层
谢谢楼上老师,似乎明白点了,还不是太懂,头大了,最好有人能给改一下函数。

出0入0汤圆

发表于 2012-6-8 20:46:36 | 显示全部楼层
http://www.ourdev.cn/thread-5474896-1-1.html最近一直没搞定,

作为学习来说建议你多看看ks1080的datasheet,关于cgrom的部分。资料参考一下这个http://www.ceet.hbnu.edu.cn/bbs/ ... amp;highlight=12864 ks1080的lcd不带字库的占资源个人不喜。没有现成驱动。不过给你一个建议,你可以按照cgrom打点的方式显示16x16的汉字 32x32的汉字。字库用字模提取软件搞注意显示取模方向。

出0入0汤圆

发表于 2012-6-9 00:57:33 | 显示全部楼层
根据楼主程序,改了一个24*32的汉字显示程序,没东西测,不知道正确与否,希望对楼主有帮助,当然你先要用取模软取好模~~~~

/***************写24*32分辨率汉字************/
void write_chinese(x,y,array)
unsigned char x,y;
unsigned char array[];
{
    unsigned char j,dd;
    for(j=0;j<96;j++)
    {
        dd=array[j];
        if(j<24) lw(x+j,y,dd);
        else if(j<48) lw(x+j-24,y+1,dd);
        else if(j<72) lw(x+j-48,y+2,dd);
        else lw(x+j-72,y+3,dd);
    }
}

出0入0汤圆

 楼主| 发表于 2012-6-9 08:21:59 | 显示全部楼层
多谢以上两位老师指点,我试了楼上老师改的函数显示乱码,取模方向正确,不知何故?

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-6-9 11:50:11 | 显示全部楼层
为了测试一下,我下载了你上面的程序,并测试了一下我的代码,结果是没问题的~~~我不知道你是怎么取模的,我试了好多次都没试出你的取模方式,现在我把我的取模方式和程序给你看一下




“温”字,24*32的取模结果为:
/**********************************字符取模********************************************/
unsigned char code wen24x32[96]={
0x00,0x00,0x00,0x08,0x30,0xF0,0x00,0x80,0x00,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0xF8,0x10,0x00,0x00,0x00,0x00,0x00,0x04,0x18,0x70,0x00,0x80,0x7E,0x01,
0x00,0xFF,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x40,0xC0,0xF0,0x0F,0x00,0x00,0xFC,0x09,0x08,0x08,0xF8,0x08,0x08,0xF8,
0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x20,0x20,0x20,
0x3F,0x20,0x20,0x20,0x3F,0x20,0x20,0x3F,0x20,0x20,0x20,0x3F,0x20,0x30,0x20,0x00,/*"温",0*/
};

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2012-6-9 12:22:52 | 显示全部楼层
再次感谢yesful老师,我再按您的方法再试一下,另外,上述显示函数是否适应于汉字后面的数字字库和温度符号(°C)的显示?

出0入0汤圆

发表于 2012-6-9 13:00:57 | 显示全部楼层
上面我只是给了个24*32的例子,当然你如果将数字、温度符号(°C)取模成24*32的话,也适用~~~但一般来说,数字的宽度只有汉字的一半,你就得写一个12*32的程序了~~~我的建议是,你最好了解液晶显示字符和取模软件的原理,你就可以写出各种分辨率的显示函数来~~~

出0入0汤圆

 楼主| 发表于 2012-6-9 14:11:49 | 显示全部楼层
完全按yesful老师的软件和取模设置,取出的字模也不一样,并且编译还通不过,还是搞不定,实在不想折腾这个软件了,只想早点做出硬件来。希望yesful老师能抽时间干脆也把12*32的显示函数以及0-9的数字字库等全部程序贴上来,让我们这些菜鸟们学着做吧!多谢yesful老师的热心帮助!

出0入0汤圆

发表于 2012-6-9 19:43:37 | 显示全部楼层
本帖最后由 yesful 于 2012-6-9 20:02 编辑
wjr888 发表于 2012-6-9 14:11
完全按yesful老师的软件和取模设置,取出的字模也不一样,并且编译还通不过,还是搞不定,实在不想折腾这个 ...


取模结果不一样?你是不是哪里没设置好?不然结果应该是一样的~~~见你是新手,就帮你把代码也写出来了,现在上传给你


本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-6-9 20:06:40 | 显示全部楼层
还有,不要叫我老师啊~~~只是我暂时在这方面的经验比你多点而已~~~大家正常交流就好~~~

出0入0汤圆

 楼主| 发表于 2012-6-10 07:03:43 | 显示全部楼层
太好了,高手就是厉害,非常感谢!我开始做硬件试验。

出0入0汤圆

发表于 2012-6-13 12:26:45 | 显示全部楼层
学习中,努力中

。。

出0入0汤圆

发表于 2014-3-6 17:05:38 | 显示全部楼层
学习了,很不错的资料,有借鉴意义,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 04:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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