找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6585|回复: 10
收起左侧

如何利用12864写数字和英文呢?数字和英文再建字模就太麻烦了。大家有什么好办法?

  [复制链接]
ID:161933 发表于 2017-3-7 21:36 | 显示全部楼层 |阅读模式
用的HC6800的板子,已经可以用12864写汉字了,是用字模的方法,实现的。
如何利用12864写数字和英文呢?数字和英文再建字模就太麻烦了。大家有什么好办法?

下面是我的程序


#include<reg52.h>
#include<intrins.h>


#define uchar unsigned char
#define uint unsigned int
sbit Lcd12864_RS=P2^6;
sbit Lcd12864_RD=P2^5;
sbit Lcd12864_WR=P2^7;
sbit Lcd12864_CS=P3^2;
sbit Lcd12864_REST=P3^3;


uchar code hz[][16]={


/*--  文字:  祝  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x08,0x89,0xEE,0x98,0x00,0x7E,0x42,0xC2,0x42,0x42,0xC2,0x42,0x7E,0x00,0x00,
0x02,0x01,0x00,0xFF,0x80,0x43,0x20,0x18,0x07,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,


/*--  文字:  老  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x20,0x24,0x24,0x24,0x24,0xBF,0x64,0x24,0x34,0x28,0x24,0x22,0x20,0x20,0x00,
0x10,0x08,0x04,0x02,0x3F,0x45,0x44,0x44,0x42,0x42,0x42,0x41,0x78,0x00,0x00,0x00,


/*--  文字:  婆  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x44,0x58,0xC1,0x26,0x10,0xC0,0x3E,0x12,0x32,0x52,0x9F,0x92,0x52,0x32,0x06,0x00,
0x04,0x84,0x85,0x94,0x5D,0x56,0x24,0x25,0x25,0x55,0x4C,0x44,0x85,0x05,0x05,0x00,


/*--  文字:  节  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x04,0x44,0x44,0x44,0x5F,0x44,0xC4,0x44,0x44,0x44,0x5F,0x44,0xC4,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x08,0x10,0x08,0x07,0x00,0x00,0x00,


/*--  文字:  日  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,


/*--  文字:  快  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,
0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00,


/*--  文字:  乐  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0x80,0x00,0x00,
0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00,


/*--  文字:  !  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


/*--  文字:  更  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x02,0xF2,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0x00,
0x80,0x80,0x87,0x4C,0x54,0x24,0x34,0x4F,0x44,0x44,0x84,0x84,0x87,0x80,0x80,0x00,


/*--  文字:  加  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,
0x80,0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,


/*--  文字:  年  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,
0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,


/*--  文字:  轻  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x80,0x82,0x42,0x22,0x12,0x1A,0x26,0x42,0x80,0x00,
0x08,0x18,0x08,0xFF,0x04,0x04,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x40,0x00,


/*--  文字:  漂  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0xC2,0x0C,0x80,0x02,0x7A,0x4A,0x4A,0x7E,0x4A,0x7E,0x4A,0x4A,0x7A,0x02,0x00,
0x04,0x04,0x7E,0x01,0x44,0x25,0x15,0x45,0x85,0x7D,0x05,0x05,0x15,0x25,0x44,0x00,


/*--  文字:  亮  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x04,0x04,0x74,0x54,0x54,0x55,0x56,0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x00,
0x84,0x83,0x41,0x21,0x1D,0x05,0x05,0x05,0x05,0x05,0x7D,0x81,0x81,0x85,0xE3,0x00,


/*--  文字:  水  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x20,0x20,0x20,0xA0,0x60,0x00,0xFF,0x60,0x80,0x40,0x20,0x18,0x00,0x00,0x00,
0x20,0x10,0x08,0x06,0x01,0x40,0x80,0x7F,0x00,0x01,0x02,0x04,0x08,0x10,0x10,0x00,


/*--  文字:  嫩  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0xF0,0x1F,0xF0,0x00,0xE4,0x24,0xFF,0x24,0xE4,0x20,0xD8,0x17,0xF0,0x10,0x00,
0x82,0x65,0x18,0x67,0x10,0x09,0x05,0xFF,0x05,0x19,0x80,0x67,0x18,0x67,0x80,0x00,


/*--  文字:  老  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x20,0x24,0x24,0x24,0x24,0xBF,0x64,0x24,0x34,0x28,0x24,0x22,0x20,0x20,0x00,
0x10,0x08,0x04,0x02,0x3F,0x45,0x44,0x44,0x42,0x42,0x42,0x41,0x78,0x00,0x00,0x00,


/*--  文字:  婆  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x44,0x58,0xC1,0x26,0x10,0xC0,0x3E,0x12,0x32,0x52,0x9F,0x92,0x52,0x32,0x06,0x00,
0x04,0x84,0x85,0x94,0x5D,0x56,0x24,0x25,0x25,0x55,0x4C,0x44,0x85,0x05,0x05,0x00,


/*--  文字:  :  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


/*--  文字:  我  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,


/*--  文字:  爱  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00,
0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00,


/*--  文字:  你  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,


/*--  文字:  !  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


/*--  文字:  !  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,




};


void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a,b;
    for(;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}


void St7565_WriteCmd(uchar cmd)
{
        Lcd12864_CS=0;//打开片选
        Lcd12864_RD=1;//读失能
        Lcd12864_RS=0;//选择命令
        Lcd12864_WR=0;//选择写模式
        _nop_();
        _nop_();
        P0=cmd;//放置命令
        _nop_();
        _nop_();
        Lcd12864_WR=1;//写入命令
}


void St7565_WriteData(uchar dat)
{
        Lcd12864_CS=0;//打开片选
        Lcd12864_RD=1;//读失能
        Lcd12864_RS=1;//选择数据
        Lcd12864_WR=0;//选择写模式
        _nop_();
        _nop_();
        P0=dat;//放置数据
        _nop_();
        _nop_();
        Lcd12864_WR=1;//写入数据
}


void Lcd12864_Init()
{
        uchar i;
        Lcd12864_REST=0;
        for(i=0;i<0;i++);
        Lcd12864_CS=0;
        Lcd12864_REST=1;
        for(i=0;i<0;i++);
        St7565_WriteCmd(0xe2);                                  //命令14,软复位
        for(i=0;i<0;i++);                                        //延时一下
        St7565_WriteCmd(0xa0);                           //命令8,列地址反向显示
        St7565_WriteCmd(0xc8);                           //命令15,行扫描方向        :普通
        St7565_WriteCmd(0xa6);                                //命令9,显示正显示
        St7565_WriteCmd(0xa4);                                //命令10,显示全部点阵:常规
        St7565_WriteCmd(0xa2);                                //命令11,设置偏压比
        St7565_WriteCmd(0xf8);                                //命令20,升压倍数选择
        St7565_WriteCmd(0x01);
        St7565_WriteCmd(0x81);                                //命令18,内部电压模式,
        St7565_WriteCmd(0x23);
        St7565_WriteCmd(0x25);                                //命令17,内部电阻比例
        St7565_WriteCmd(0x2f);                                //命令16,内部电压供应模式
        for(i=0;i<0;i++);//延时一下
        St7565_WriteCmd(0x40);                                //命令2,显示初始行设置,
        St7565_WriteCmd(0xaf);                                //命令1,开启显示
        for(i=0;i<0;i++);//延时一下
}


void Lcd12864_ClearScreen()
{
        uchar i;
        uchar j;
        for(i=0;i<8;i++)
        {
                St7565_WriteCmd(0xb0+i);          //命令3,页地址设置,
                St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
                St7565_WriteCmd(0x00);                  //命令4,列地址的低4位
                for(j=0;j<128;j++)
                {
                        St7565_WriteData(0x00);   //每一页填充,128列,如果设置背景为白色时,清屏选择0XFF
                }
        }
}




void putout()
{        uchar i,j;
        St7565_WriteCmd(0xb0);          //命令3,页地址设置,
        St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
        St7565_WriteCmd(0x00);
        for(i=0;i<=14;(i=i+2))
                {
                for(j=0;j<16;j++)
                St7565_WriteData(hz[j]);
                Delay10ms(10);
                }
       
        St7565_WriteCmd(0xb1);          //命令3,页地址设置,
        St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
        St7565_WriteCmd(0x00);
        for(i=1;i<=15;(i=i+2))
                {
                for(j=0;j<16;j++)
                St7565_WriteData(hz[j]);
                Delay10ms(10);
                }


        St7565_WriteCmd(0xb2);          //命令3,页地址设置,
        St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
        St7565_WriteCmd(0x00);
        for(i=16;i<=30;(i=i+2))
                {
                for(j=0;j<16;j++)
                St7565_WriteData(hz[j]);
                Delay10ms(10);
                }


        St7565_WriteCmd(0xb3);          //命令3,页地址设置,
        St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
        St7565_WriteCmd(0x00);
        for(i=17;i<=31;(i=i+2))
                {
                for(j=0;j<16;j++)
                St7565_WriteData(hz[j]);
                Delay10ms(10);
                }


        St7565_WriteCmd(0xb4);          //命令3,页地址设置,
        St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
        St7565_WriteCmd(0x00);
        for(i=32;i<=46;(i=i+2))
                {
                for(j=0;j<16;j++)
                St7565_WriteData(hz[j]);
                Delay10ms(10);
                }


        St7565_WriteCmd(0xb5);          //命令3,页地址设置,
        St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
        St7565_WriteCmd(0x00);
        for(i=33;i<=47;(i=i+2))
                {
                for(j=0;j<16;j++)
                St7565_WriteData(hz[j]);
                Delay10ms(10);
                }


        St7565_WriteCmd(0xb6);          //命令3,页地址设置,
        St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
        St7565_WriteCmd(0x00);
        for(i=48;i<=62;(i=i+2))
                {
                for(j=0;j<16;j++)
                St7565_WriteData(hz[j]);
                Delay10ms(10);
                }


        St7565_WriteCmd(0xb7);          //命令3,页地址设置,
        St7565_WriteCmd(0x10);                  //命令4,列地址的高4位
        St7565_WriteCmd(0x00);
        for(i=49;i<=63;(i=i+2))
                {
                for(j=0;j<16;j++)
                St7565_WriteData(hz[j]);
                Delay10ms(10);
                }
}


void main()
{
        Lcd12864_Init();
        Delay10ms(50);
        Lcd12864_ClearScreen();
        Delay10ms(1);
        putout();
        Delay10ms(200);
       
}

回复

使用道具 举报

ID:151348 发表于 2017-3-7 22:05 | 显示全部楼层
带字库的可以调库里的英文字符,不过好像木有带汉字的
回复

使用道具 举报

ID:113415 发表于 2017-3-8 20:01 | 显示全部楼层
液晶芯片中汉字库可能没有,数字和英文字符里面应当自带的,直接就能用。先参考控制器说明书,然后直接上机实验一下就知道了。
回复

使用道具 举报

ID:161933 发表于 2017-3-8 21:38 | 显示全部楼层
汉字,和图片,我都能显示了,直接调用字库:居然没有?!

无所谓了,主要是知道原理就好了。
回复

使用道具 举报

ID:7485 发表于 2017-3-9 11:14 | 显示全部楼层
什么型号的LCD?
回复

使用道具 举报

ID:167113 发表于 2017-3-9 19:19 | 显示全部楼层
带字库12864直接看文档可用英文数字.但成本会高些
回复

使用道具 举报

ID:158112 发表于 2017-3-9 23:37 | 显示全部楼层
进来学习学习
回复

使用道具 举报

ID:165046 发表于 2017-3-10 08:25 | 显示全部楼层
就是取模麻烦,还要对应地址什么的,我还在摸索中
回复

使用道具 举报

ID:169564 发表于 2017-3-10 10:10 | 显示全部楼层
12864分有字库和无字库两种,价格不一样,带字库的12864是有中文字库的,除非你想显示非内部标准字库字体的时候才用自建字库
回复

使用道具 举报

ID:154041 发表于 2017-3-10 11:49 | 显示全部楼层
1.选择带字库的LCD显示屏;
2.可以复制别人写好的字库;
一般情况程序内都带有英文和数字的字库,如果显示的汉字较多可以选择带字库的LCD较为便捷
回复

使用道具 举报

ID:54992 发表于 2017-3-11 10:50 | 显示全部楼层
I2C接口带中英文字库12864液晶屏,支持任意坐标位置(横向坐标,纵向坐标都以像素点为单位),希望能帮你解决问题。
1.png
2.png

Arduino I2C控制字库12864液晶屏资料.rar

664.1 KB, 下载次数: 27

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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