用的HC6800的板子,已經(jīng)可以用12864寫漢字了,是用字模的方法,實(shí)現(xiàn)的。
如何利用12864寫數(shù)字和英文呢?數(shù)字和英文再建字模就太麻煩了。大家有什么好辦法?
下面是我的程序
#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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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,
/*-- 文字: 節(jié) --*/
/*-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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; 此字體下對應(yīng)的點(diǎn)陣為:寬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;//選擇數(shù)據(jù)
Lcd12864_WR=0;//選擇寫模式
_nop_();
_nop_();
P0=dat;//放置數(shù)據(jù)
_nop_();
_nop_();
Lcd12864_WR=1;//寫入數(shù)據(jù)
}
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,軟復(fù)位
for(i=0;i<0;i++); //延時(shí)一下
St7565_WriteCmd(0xa0); //命令8,列地址反向顯示
St7565_WriteCmd(0xc8); //命令15,行掃描方向 :普通
St7565_WriteCmd(0xa6); //命令9,顯示正顯示
St7565_WriteCmd(0xa4); //命令10,顯示全部點(diǎn)陣:常規(guī)
St7565_WriteCmd(0xa2); //命令11,設(shè)置偏壓比
St7565_WriteCmd(0xf8); //命令20,升壓倍數(shù)選擇
St7565_WriteCmd(0x01);
St7565_WriteCmd(0x81); //命令18,內(nèi)部電壓模式,
St7565_WriteCmd(0x23);
St7565_WriteCmd(0x25); //命令17,內(nèi)部電阻比例
St7565_WriteCmd(0x2f); //命令16,內(nèi)部電壓供應(yīng)模式
for(i=0;i<0;i++);//延時(shí)一下
St7565_WriteCmd(0x40); //命令2,顯示初始行設(shè)置,
St7565_WriteCmd(0xaf); //命令1,開啟顯示
for(i=0;i<0;i++);//延時(shí)一下
}
void Lcd12864_ClearScreen()
{
uchar i;
uchar j;
for(i=0;i<8;i++)
{
St7565_WriteCmd(0xb0+i); //命令3,頁地址設(shè)置,
St7565_WriteCmd(0x10); //命令4,列地址的高4位
St7565_WriteCmd(0x00); //命令4,列地址的低4位
for(j=0;j<128;j++)
{
St7565_WriteData(0x00); //每一頁填充,128列,如果設(shè)置背景為白色時(shí),清屏選擇0XFF
}
}
}
void putout()
{ uchar i,j;
St7565_WriteCmd(0xb0); //命令3,頁地址設(shè)置,
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,頁地址設(shè)置,
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,頁地址設(shè)置,
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,頁地址設(shè)置,
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,頁地址設(shè)置,
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,頁地址設(shè)置,
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,頁地址設(shè)置,
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,頁地址設(shè)置,
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);
}
|